To start a project and add code that creates a new paint window:
Step 1
1. |
Start Visual Studio. |
2. |
Select the File->New menu option, click the "projects" tab. |
3. |
From Project Types click on Visual C++ to expand it, then select MFC. From the right window select MFC Application. |
4. |
In the Project Name dialog box, enter "Tutorial". |
5. |
In the Location dialog box, use the <LEADTOOLS_INSTALLDIR>\examples\ClassLibrary\MSVC directory of your LEAD installation. Click OK. Then click Next |
6. |
Choose Multiple Document and click "Next". |
7. |
The "MFC AppWizard step 3 of 8", appears. Keep the default settings and press the "Next" Button. |
8. |
The "MFC AppWizard step 4 of 8", appears. Keep the default settings and press the "Next" Button. |
9. |
The "MFC AppWizard step 5 of 8", appears. Keep the default settings and press the "Next" Button. |
10. |
The "MFC AppWizard step 6 of 8", appears. Check "None" radio button under "Toolbars" and press the "Next" Button. |
13. |
The "MFC AppWizard step 7 of 8", appears. Uncheck the "Printing and print preview" combo box and press the "Finish" Button. |
Step 2
1. |
In stdafx.h add the following headers: (keep in mind, you may have to change the path to where the header files reside): |
#include "..\..\..\..\..\include\ClassLib\ltWrappr.h" Step 3
1. |
Click on the "Class View" tab. |
2. |
Click to open the Tutorial Classes branch. |
3. |
Click "CTutorialApp", and then double click the CTutorialApp() constructor. |
4. |
Add the following lines after |
L_TCHAR * pszLicenseFile = L"Replace this with the path to the LEADTOOLS license file";L_TCHAR * pszDeveloperKey = L"Replace this with your developer key";LSettings::SetLicenseFile(pszLicenseFile, pszDeveloperKey);LBase::LoadLibraries(LT_PDG|LT_KRN|LT_FIL|LT_DLG|LT_AUT|LT_CON|LT_TLB|LT_DIS);LDialogBase::Initialize(DLG_INIT_COLOR);
5. |
Click on the "Class View" tab. |
6. |
Click to open the Tutorial Classes branch. |
7. |
Right click on "CTutorialApp", and select "Add Function |
8. |
In the Add Member Function Dialog, enter "~CTutorialApp" for the Function name and enter void for the return type and then press Finish. |
9. |
Add the following lines inside the generated function": |
LDialogBase::Free();LBase::UnloadLibraries(LT_PDG|LT_KRN|LT_FIL|LT_DLG|LT_AUT|LT_CON|LT_TLB|LT_DIS);
Step 4
1. |
Click on the "Class View" tab. |
2. |
Click to open the Tutorial Classes branch. |
3. |
Click "CTutorialApp", and then double click the InitInstance() function. |
4. |
Add the following lines after the call to the ParseCommandLine function: |
//Hide the Auto appearance window (View)cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
Step 5
|
Create a new file called Imports.cpp in place it beside your project files. |
a. |
In the Project Workspace, click the Solution Explorer tab. |
b. |
Double-click the Automated folder to open it. |
c. |
Right-click the Source files folder and select Add New item. |
d. |
Right-click on the Source file |
e. |
Expand Visual C++ tree, if it is not already expanded. |
f. |
Select Code from the sub tree. |
g. |
Select C++ File (.cpp) from the right window. |
h. |
In the name text box, specify Imports. |
i. |
Click the OK button. |
j. |
Double-click the Imports.cpp file in the solution Explorer and add the following lines: |
#include "StdAfx.h"#if defined(WIN64)#pragma comment(lib, "..\\..\\..\\..\\..\\Lib\\CDLL\\x64\\Ltwvc_x.lib")#else#pragma comment(lib, "..\\..\\..\\..\\..\\Lib\\CDLL\\Win32\\Ltwvc_u.lib")#endif // #if defined(WIN64)
Step 6
1. |
Click on the "Class View" tab. |
2. |
Double click on "CTutorialView" |
3. |
Add the following public variables: |
LRasterPaintWindow m_RasterPntWnd;LRasterDialog m_PaintDialog;
Step 7
1. |
Go to TutorialView.h file then add the following function declaration: |
public:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
2. |
Go to TutorialView.cpp file then add the following line between the BEGIN_MESSAGE_MAP and END_MESSAGE_MAP: |
ON_WM_CREATE() 3. |
Add the following function: |
int CTutorialView::OnCreate(LPCREATESTRUCT lpCreateStruct){if(CView::OnCreate(lpCreateStruct) == -1)return -1;m_RasterPntWnd.SetWndHandle(m_hWnd);return 1;}
Step 8
1. |
Click on the "Class View" tab. |
2. |
Right click "CMainFrame" and select "Add Variable..." |
3. |
Add the following variable: |
protected:LToolbar m_LToolbar;
Step 9
1. |
Click on the "Class View" tab. |
2. |
Click to open the Tutorial Classes branch. |
3. |
Click "CMainFrame", and then double click the "OnCreate" function. |
4. |
Add the following lines before the last "return 0;" line: |
LRasterPaintWindow::Initialize();LRasterPaintWindow::CreateToolbar(&m_LToolbar, m_hWnd, TEXT("Test Toolbar"));LRasterPaintWindow::SetToolbar(&m_LToolbar);POINT ptPos = {0, 0};RECT rcClient;CMainFrame::GetClientRect(&rcClient);ptPos.x = rcClient.left + 2;ptPos.y = rcClient.top + 2;CMainFrame::ClientToScreen(&ptPos);LRasterPaintWindow::SetToolbarPosition(&ptPos);LRasterPaintWindow::ShowToolbar(TRUE);
Step 10
1. |
Go to MainFrm.h file then add the following function declaration: |
afx_msg void OnClose(); 2. |
Go to MainFrm.cpp file then add the following line between the BEGIN_MESSAGE_MAP and END_MESSAGE_MAP: |
ON_WM_CLOSE() 3. |
Add the following function: |
void CMainFrame::OnClose(){LRasterPaintWindow::FreeToolbar(&m_LToolbar);LRasterPaintWindow::Free();CMDIFrameWnd::OnClose();}
Step 11
Handle Save & Update UI for it
1. |
Click on the "Resource View" tab. |
2. |
Click on the Menu folder to expand it. Then double click IDR_TutorialTYPE to edit the menu. |
3. |
Click on the File menu, then right click on the Save item and click "Add event handler" |
4. |
From Class list select CTutorialDoc and make sure that the "COMMAND" is selected on the Message Type window, then click the "Add and Edit" button. |
|
Add the following lines of code after the |
POSITION pos = GetFirstViewPosition();CTutorialView* pView = (CTutorialView*) GetNextView(pos);LBitmapBase* pLBtmpbase = pView->m_RasterPntWnd.GetBitmap();BOOL bFlag = AfxGetMainWnd()->EnableWindow(FALSE);SAVEDLGPARAMS SaveParms;OPENFILENAME OpenFileName;memset(&SaveParms, 0, sizeof(SAVEDLGPARAMS));memset(&OpenFileName, 0, sizeof(OPENFILENAME));OpenFileName.lStructSize = sizeof(OPENFILENAME);OpenFileName.lpstrInitialDir = NULL;OpenFileName.lpstrTitle = _T("Save a File");OpenFileName.nFilterIndex = 0;SaveParms.uStructSize = sizeof(SAVEDLGPARAMS);SaveParms.nQFactor = 2;SaveParms.nPageNumber = 1;SaveParms.nStampBits = 24;SaveParms.nStampWidth = 120;SaveParms.nStampHeight = 120;SaveParms.nBitsPerPixel = 24;SaveParms.nFormat = FILE_BMP;SaveParms.uSaveMulti = MULTIPAGE_OPERATION_REPLACE;SaveParms.uDlgFlags = DLG_SAVE_SHOW_FILEOPTIONS_PROGRESSIVE |DLG_SAVE_SHOW_FILEOPTIONS_MULTIPAGE |DLG_SAVE_SHOW_FILEOPTIONS_STAMP |DLG_SAVE_SHOW_FILEOPTIONS_QFACTOR |DLG_SAVE_SHOW_FILEOPTIONS_J2KOPTIONS |DLG_SAVE_SHOW_FILEOPTIONS_BASICJ2KOPTIONS;pLBtmpbase->DialogFile()->SetSaveParams(&SaveParms);pLBtmpbase->DialogFile()->SetOpenFile(&OpenFileName);pLBtmpbase->DialogFile()->EnableAutoProcess(TRUE);L_INT nRetCode = pLBtmpbase->DialogFile()->DoModalSave(pView->m_hWnd);if(nRetCode!=SUCCESS_DLG_OK && nRetCode!=SUCCESS_DLG_CANCEL)pView->MessageBox(_T("Can't Save to file, check if file is read only."), _T("File Save Error"), MB_ICONWARNING | MB_OK);bFlag = AfxGetMainWnd()->EnableWindow(TRUE);AfxGetMainWnd()->SetActiveWindow();
Step 12
1. |
Click on the "Resource View" tab. |
2. |
Click on the Menu folder to expand it. Then double click IDR_TutorialTYPE to show the menu on the right window. |
3. |
Click on the File menu, then right click on the Save item and click "Add event handler" |
4. |
From Message Type select "UPDATE_COMMAND_UI ", and from Class list select CTutorialDoc. Then click the "Add and Edit" button. |
6. |
Add the following lines of code after the |
pCmdUI->Enable(m_RasterPntWnd.GetBitmap()->IsAllocated()); Step 13
Handle Open & Update UI for it
1. |
Click on the "Resource View" tab. |
2. |
Click on the Menu folder to expand it. Then double click IDR_MAINFRAME to show the menu on the right window. |
3. |
Click on the File menu, then right click on the Open item and click Properties. In ID field, set the ID to IDM_FILE_OPEN. |
4. |
Click on the File menu, then right click on the Open item and click "Add event handler" |
5. |
From Class list select CTutorialApp and make sure that the "COMMAND" is selected on the Message Type window, then click the "Add and Edit" button. |
6. |
Add the following lines of code after the |
OPENDLGPARAMS FOParm;OPENFILENAME OpenFileName;memset(&FOParm, 0, sizeof(OPENDLGPARAMS));memset(&OpenFileName, 0, sizeof(OPENFILENAME));OpenFileName.lStructSize = sizeof(OPENFILENAME);OpenFileName.lpstrInitialDir = NULL;OpenFileName.Flags = OFN_EXPLORER;FOParm.uStructSize = sizeof(OPENDLGPARAMS);FOParm.uDlgFlags = DLG_OPEN_ENABLESIZING |DLG_OPEN_SHOW_PROGRESSIVE |DLG_OPEN_USEFILESTAMP |DLG_OPEN_SHOW_MULTIPAGE |DLG_OPEN_SHOW_LOADROTATED |DLG_OPEN_SHOW_LOADCOMPRESSED |DLG_OPEN_SHOW_DELPAGE |DLG_OPEN_SHOW_LOADOPTIONS |DLG_OPEN_SHOW_FILEINFO |DLG_OPEN_SHOW_PDFOPTIONS |DLG_OPEN_SHOW_RASTEROPTIONS |DLG_OPEN_SHOW_VECTOROPTIONS |DLG_OPEN_VIEWTOTALPAGES;FOParm.bPreviewEnabled = TRUE;m_LBitmap.DialogFile()->SetOpenParams(&FOParm);m_LBitmap.DialogFile()->EnablePreview(TRUE);m_LBitmap.DialogFile()->SetOpenParams(&OpenFileName);m_LBitmap.DialogFile()->EnableCallBack(FALSE);L_INT nRetCode = m_LBitmap.DialogFile()->DoModalOpen(m_pMainWnd->m_hWnd);if(nRetCode==SUCCESS_DLG_OK){L_TCHAR szFileName[256];memset(szFileName,0,sizeof(szFileName));L_UINT uSize=sizeof(szFileName);m_LBitmap.GetFileName(szFileName,&uSize);m_LBitmap.DialogFile()->GetOpenParams(&FOParm,sizeof(FOParm));POSITION pos = GetFirstDocTemplatePosition();CDocTemplate* pDocTemplate = GetNextDocTemplate(pos);pDocTemplate->OpenDocumentFile(szFileName);}
7. |
Click on the "Class View" tab. |
8. |
Double click on "CTutorialApp" |
9. |
Add the following public variables: |
public:LBitmapBase m_LBitmap;
Step 14
1. |
Click on the "Class View" tab. |
2. |
Click to open the "Tutorial Classes" branch. |
3. |
Right click on the "CTutorialDoc" to choose Properties |
4. |
From the "Properties" window toolbar, click on the overrides icon. Then click on the empty area beside the item "OnOpenDocument" and choose OnOpenDocument. |
7. |
Replace return statement with the following code: |
CTutorialApp* pTheApp = (CTutorialApp*) AfxGetApp();POSITION pos = GetFirstViewPosition();CTutorialView* pView = (CTutorialView*)GetNextView(pos);FILEINFO fInfo;OPENDLGPARAMS FOParm;memset(&FOParm, 0, sizeof(OPENDLGPARAMS));memset(&fInfo, 0, sizeof(FILEINFO));fInfo.uStructSize = sizeof(FILEINFO);LBitmapBase LBtmpbase;pTheApp->m_LBitmap.DialogFile()->GetOpenParams(&FOParm, sizeof(OPENDLGPARAMS));LBtmpbase.SetFileName((L_TCHAR *)lpszPathName);LBtmpbase.File()->GetInfo(&fInfo, sizeof(FILEINFO), FILEINFO_TOTALPAGES, NULL);L_INT nBitsPerPixel = fInfo.BitsPerPixel;if(nBitsPerPixel != 1 && nBitsPerPixel != 4 && nBitsPerPixel != 8 && nBitsPerPixel != 16 && nBitsPerPixel != 24){pView->MessageBox(_T("Your image format is not either 1,4,8,16 or 24 bits per pixel"), _T("Error Opening Image"), MB_ICONWARNING | MB_OK);return FALSE;}L_INT nRetCode = LBtmpbase.Load(fInfo.BitsPerPixel, ORDER_BGRORGRAY, (FOParm.pFileData)? FOParm.pFileData[0].nPageNumber : 1);if(nRetCode!=SUCCESS){if(nRetCode== ERROR_PDF_BAD_INITIALIZATION_FILES){if(IDYES == MessageBox(AfxGetApp()->m_pMainWnd->m_hWnd, TEXT("LEADTOOLS PDF plugin is not found, do you want to download the plugin now?"),TEXT("Open file"),MB_ICONEXCLAMATION | MB_YESNO))ShellExecute(AfxGetApp()->m_pMainWnd->m_hWnd, TEXT("open"), TEXT("https://www.leadtools.com/ReleaseDownloads/v19/LEADTOOLSPDFRuntime.exe"),NULL, NULL, SW_SHOWNORMAL);}elseLBase::DisplayError(NULL, nRetCode);}else{pView->m_RasterPntWnd.SetBitmap(&LBtmpbase);}return((nRetCode == SUCCESS) ? TRUE : FALSE);
6. |
Open the "TutorialDoc.cpp" file from the "File View" tab. |
7. |
Add this include statement after the #include "TutorialDoc.h" |
#include "TutorialView.h" Step 15
Delete Save As menu Item
Delete New Menu Item
Delete Resent Files Menu Item
1. |
Move to the "Resource View" tab. |
2. |
Double click the "Tutorial resources" to expand the branch. |
3. |
Double click the "Menu" item from the tree to show the available menus. |
4. |
Double click on the "IDR_MAINFRAME" item to view the menu. |
5. |
Select "File""New" form the displayed menu bar and press the "Del" key to delete this menu item. |
6. |
Do the same with the "Recent File" and the Separator menu items. |
7. |
Now double click on the "IDR_TutorialTYPE" item from the "Resource View" tab to view this menu. |
8. |
Delete the New, "Save As", "Recent File" and the Separator menu items from the "File" menu as we did in step (5). |
Step 16
Handling Palette Changes
1. |
Open the "Tutorial.h" file from the "File View" tab. |
2. |
Add this define statement after the |
#define WM_HANDLEPALETTE WM_APP + 0 3. |
Click on the "Class View" tab. |
4. |
Right-click on the "CMainFrame" and select "Properties". |
5. |
From the "Properties" window toolbar, click on the Message icon. Then click on the empty area beside the item "WM_PALETTECHANGED" and choose OnPaletteChanged |
6. |
Add the following lines of code after the " void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd) line: |
if(pFocusWnd!=NULL)SendMessageToDescendants(WM_HANDLEPALETTE,(WPARAM)pFocusWnd ->m_hWnd, TRUE);
7. |
Right click "CMainFrame" and select "Properties". |
8. |
From the "Properties" window toolbar, click on the Message icon. Then click on the empty area beside the item " WM_QUERYNEWPALETTE" and choose OnQueryNewPalette |
9. |
Replace the "return CMDIFrameWnd::OnQueryNewPalette();" statement with the following lines of code: |
CMDIChildWnd* pMDIChildWnd = MDIGetActive();if(pMDIChildWnd!=NULL){CView* pView = pMDIChildWnd->GetActiveView();if(pView!=NULL){pView->SendMessage(WM_HANDLEPALETTE,0,FALSE);return TRUE;}}return FALSE;
10. |
Right click "CMainFrame" and select "Properties". |
11. |
From the "Properties" window toolbar, click on the Message icon. Then click on the empty area beside the item " WM_SYSCOLORCHANGE" and choose OnSysColorChange |
12. |
Replace the "CMDIFrameWnd::OnSysColorChange();" statement with the following line of code which actually calls the OnQueryNewPalette() function: |
OnQueryNewPalette(); 13. |
Right click " CTutorialView" and select "Properties". |
14. |
From the "Properties" window toolbar, click on the overrides icon. Then click on the empty area beside the item "OnActivateView" and choose OnActivateView |
15. |
Write the following lines of code after the |
if(bActivate==TRUE&&pActivateView==this)m_RasterPntWnd.HandlePalette(WM_QUERYNEWPALETTE,0,0);
18. |
Open the "TutorialView.h" file from the "Soluation Explorer" tab and add the following line before the DECLARE_MESSAGE_MAP() statement: |
afx_msg LRESULT OnHandlePalette(WPARAM wParam, LPARAM lParam); 19. |
Open the "TutorialView.cpp" file from the "File View" tab and add the following line before the END_MESSAGE_MAP() statement: |
ON_MESSAGE(WM_HANDLEPALETTE,OnHandlePalette) 20. |
Now add the following lines of code to the end of the "TutorialView.cpp" file: |
LRESULT CTutorialView::OnHandlePalette(WPARAM wParam, LPARAM lParam){if(lParam==TRUE){if(m_RasterPntWnd.HandlePalette(WM_PALETTECHANGED, wParam, 0)==FALSE)m_RasterPntWnd.Repaint();}else{if(m_RasterPntWnd.HandlePalette(WM_QUERYNEWPALETTE, 0, 0)==FALSE)m_RasterPntWnd.Repaint();}return TRUE;}
Step 17
Show / Hide the Tool bar
1. |
Move to the "Resource View" tab. |
2. |
Double click the "Tutorial" to expand the branch. |
3. |
Double click the "Menu" item from the tree to show the available menus. |
4. |
Double click on the "IDR_MAINFRAME" item to view the menu. |
5. |
Click on the "View" menu to view the menu items. |
8. |
Add a new menu item "&Toolbar" to the menu. |
9. |
Now do the same with the "IDR_TutorialTYPE" menu. |
10. |
Right-click on the "Toolbar" menu item and choose "Add Event Handler&" |
11. |
Select "Message Maps" tab and select " CMainFrame " as the Class name |
13. |
Select "COMMAND" from the Messages list box. |
14. |
Click the "Add and Edit" button. |
17. |
Add the following line of code inside the generated function body: |
LRasterPaintWindow::ShowToolbar(!m_LToolbar.IsVisible()); 18. |
Right-click again on the "Toolbar" menu item and choose "Add Event Handler&" |
19. |
Select "Message Maps" tab and select " CMainFrame " as the Class name |
21. |
Select "UPDATE_COMMAND_UI" from the Messages list box. |
22. |
Click the "Add and Edit" button. |
25. |
Add the following line of code inside the generated function body: |
pCmdUI->SetCheck(m_LToolbar.IsVisible()); Step 18
Here we will be dealing with one of the paint dialogs, which is the "Brush" dialog:
1. |
Move to the "Resource View" tab. |
2. |
Double click the "Tutorial" to expand the branch. |
3. |
Double click the "Menu" item from the tree to show the available menus. |
4. |
Double click on the "IDR_TutorialTYPE" item to view the menu. |
5. |
Click on the empty menu and then type "&Properties" |
7. |
Drag the new menu next to the "Help" menu and drop it before the "Help" menu. |
8. |
A new menu item will appear within the created menu "Properties". |
9. |
click on the empty menu item and enter "&Brush" |
11. |
Right-click on "&Brush" menu item and select "Add Event Handler&" |
12. |
Select "Message Maps" tab and select " CTutorialView" as the Class name |
14. |
Select "COMMAND" from the Messages list box. |
15. |
Click the "Add and Edit" button. |
18. |
Add the following line of code inside the generated function body: |
CTutorialApp* pTheApp = (CTutorialApp*)AfxGetApp();PAINTDLGBRUSHINFO BrushDlgInfo;PAINTBRUSH* pPaintBrush = m_RasterPntWnd.GetPaintBrush();L_INT nRetCode;L_TCHAR* TouchBitmap [ ] = { TEXT("Leaf") };L_TCHAR* TextureBitmap [ ] = { TEXT("Texture-00") };BrushDlgInfo.dwFlags = PAINT_DLG_BRUSH_SHOWALL;BrushDlgInfo.pszTitle = TEXT("Paintbrush Properties");BrushDlgInfo.nContentsType = pPaintBrush->Touch.nContentsType;BrushDlgInfo.crColor = pPaintBrush->Touch.crColor;BrushDlgInfo.ppszTouchImage = TouchBitmap;BrushDlgInfo.uTouchImageCount = 1;BrushDlgInfo.nActiveTouchImageItem = 0;BrushDlgInfo.nDiameter = pPaintBrush->nDiameter;BrushDlgInfo.nHardnessValue = pPaintBrush->Hardness.nValue;BrushDlgInfo.nSpacing = pPaintBrush->nSpacing;BrushDlgInfo.nDensity = pPaintBrush->nDensity;BrushDlgInfo.nOpacity = pPaintBrush->nOpacity;BrushDlgInfo.nFadeOutRate = pPaintBrush->nFadeOutRate;BrushDlgInfo.ppszPaperTexture = TextureBitmap;BrushDlgInfo.uPaperTextureCount = 1;BrushDlgInfo.nActivePaperTextureItem = ((pPaintBrush->pTexture != NULL) ? 0 : -1);nRetCode = m_PaintDialog.DoModalBrush(m_hWnd, &BrushDlgInfo);if(nRetCode == SUCCESS){pPaintBrush->nSize = sizeof(PAINTBRUSH);pPaintBrush->dwMask = PBF_ALL;pPaintBrush->Touch.nContentsType = BrushDlgInfo.nContentsType;pPaintBrush->Touch.crColor = BrushDlgInfo.crColor;pPaintBrush->Touch.nShape = PAINT_TOUCH_SHAPE_CIRCLE;pPaintBrush->Touch.pBitmap = ((BrushDlgInfo.nActiveTouchImageItem != -1) ? pTheApp->m_LBtmpBrush.GetHandle() : NULL);pPaintBrush->Touch.crTransparentColor = RGB(0, 0, 0);pPaintBrush->nDiameter = BrushDlgInfo.nDiameter;pPaintBrush->Hardness.nDistributionType = PAINT_HARDNESS_DISTRB_TYPE_0;pPaintBrush->Hardness.nValue = BrushDlgInfo.nHardnessValue;pPaintBrush->nSpacing = BrushDlgInfo.nSpacing;pPaintBrush->nDensity = BrushDlgInfo.nDensity;pPaintBrush->nOpacity = BrushDlgInfo.nOpacity;pPaintBrush->nFadeOutRate = BrushDlgInfo.nFadeOutRate;pPaintBrush->pTexture = ((BrushDlgInfo.nActivePaperTextureItem != -1) ? pTheApp->m_LBtmpPaperTexture.GetHandle(): NULL);m_RasterPntWnd.SetPaintBrush(pPaintBrush);}
19. |
Click on the "Class View" tab. |
20. |
Double click on "CTutorialApp" |
21. |
Add the following public variables: LBitmapBase m_LBtmpBrush; |
22 |
Copy the bitmaps you want to use in the dialog to the "Res" folder in your current directory. |
23. |
Now move to the "Resource View" tab. |
24. |
Right click on the "Tutorial.rc and select Add resource. In Add Resource dialog click Import |
25. |
In the "Import Resource" dialog browse to the LEADTOOLS "Images" directory (%UserProfile%\My Documents\LEADTOOLS Images), and select one of the bitmap files (ex. ULAY1.BMP) then click Open. |
26. |
Right click on the new added bitmap and select "Properties". |
27. |
Change the "ID" edit box to "IDB_BITMAP_BRUSH" and close the dialog. |
28. |
Repeat steps (29-32) to load a second bitmap (ex. ULAY2.BMP) and give it the following ID "IDB_PAPER_TEXTURE" |
29. |
Move to the "Class View" tab. |
30. |
Right click on the "CTutorialApp" class and select Add Add Function. |
31. |
Enter "void" in the "Return Type" edit box and enter "LoadImages" statement in the "Function name" edit box "Press "Finish". |
32. |
Add the following lines of code to the function body: |
DIBSECTION dibsc;BITMAPHANDLE TempBtmapHandle;// load paper texture image.HANDLE hBitmap = LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PAPER_TEXTURE), IMAGE_BITMAP, 0, 0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE);GetObject(hBitmap , sizeof(DIBSECTION), &dibsc);m_LBtmpPaperTexture.SetHandle(&TempBtmapHandle);m_LBtmpPaperTexture.ConvertFromDIB((LPBITMAPINFO) &dibsc.dsBmih, (L_UCHAR*)dibsc.dsBm.bmBits);m_LBtmpPaperTexture.ChangeViewPerspective(TOP_LEFT);DeleteObject((HBITMAP) hBitmap);// load the brush image.hBitmap = LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_BRUSH), IMAGE_BITMAP, 0, 0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE);GetObject(hBitmap , sizeof (DIBSECTION), &dibsc);m_LBtmpBrush.SetHandle(&TempBtmapHandle);m_LBtmpBrush.ConvertFromDIB((LPBITMAPINFO) &dibsc.dsBmih, (L_UCHAR *)dibsc.dsBm.bmBits);m_LBtmpBrush.ChangeViewPerspective(TOP_LEFT);DeleteObject((HBITMAP) hBitmap);
31. |
Right click on the "CTutorialApp" class and select Add Add Function. |
32. |
Enter "void" in the "Return Type" edit box and enter "FreeImages" statement in the "Function Name" edit box "Press "Finish". |
33. |
Add the following lines of code to the function body: |
m_LBtmpBrush.Free();m_LBtmpPaperTexture.Free();
34. |
Add the following statement to the "InitInstance()" function in the "Tutorial.cpp" file before the "return TRUE" statement: |
LoadImages(); 35. |
Add the following statement at the end of the "~CTutorialApp()" function in the "Tutorial.cpp" file |
FreeImages();