資源描述:
《vc++中把窗體封裝到dll中并調用》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、VC++中把窗體封裝到dll中并調用在DLL中使用資源現(xiàn)在最??匆姷年P于DLL的問題就是如何在DLL中使用對話框,這是一個很普遍的關于如何在DLL中使用資源的問題。這里我們從Win32DLL和MFCDLL兩個方面來分析并解決這個問題。1.Win32DLL在Win32DLL中使用對話框很簡單,你只需要在你的DLL中添加對話框資源,而且可以在對話框上面設置你所需要的控件。然后使用DialogBox或者CreateDialog這兩個函數(shù)(或相同作用的其它函數(shù))來創(chuàng)建對話框,并定義你自己的對話框回調函數(shù)處理對話框收到的消息。下面通過一個
2、具體實例來學習如何在Win32DLL中使用對話框,可以按照以下步驟來完成這個例子:1)在VC菜單中File->New新建一個命名為UseDlg的Win32Dynamic-LinkLibrary工程,下一步選擇AsimpleDLLproject。2)在VC菜單中Insert->Resource添加一個ID為IDD_DLG_SHOW的Dialog資源,將此Dialog上的Cancel按鈕去掉,僅保留OK按鈕。再添加一個ID為IDD_ABOUTBOX的對話框,其Caption為About。保存此資源,將資源文件命名為UseDlg.rc
3、。并將resource.h和UseDlg.rc加入到工程里面。3)在UseDlg.app中包含resource.h,并添加如下代碼:HINSTANCEhinst=NULL;HWNDhwndDLG=NULL;BOOLCALLBACKDlgProc(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam);BOOLCALLBACKAboutProc(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam);extern"C"__declspec(dllexp
4、ort)voidShowDlg();BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){switch(ul_reason_for_call){caseDLL_PROCESS_ATTACH:hinst=(HINSTANCE)hModule;caseDLL_PROCESS_DETACH:break;}returnTRUE;}extern"C"__declspec(dllexport)voidShowDlg(){hwndDLG=Crea
5、teDialog(hinst,MAKEINTRESOURCE(IDD_DLG_SHOW),NULL,(DLGPROC)DlgProc);ShowWindow(hwndDLG,SW_SHOW);}BOOLCALLBACKDlgProc(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam){switch(message){caseWM_INITDIALOG:returnTRUE;caseWM_COMMAND:if(LOWORD(wParam)==IDOK)DialogBox(hinst,MA
6、KEINTRESOURCE(IDD_ABOUTBOX),hDlg,(DLGPROC)AboutProc);returnTRUE;caseWM_CLOSE:DestroyWindow(hDlg);hwndDLG=NULL;returnTRUE;}returnFALSE;}BOOLCALLBACKAboutProc(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam){switch(message){caseWM_CLOSE:EndDialog(hDlg,NULL);hwndDLG=NULL
7、;returnTRUE;}returnFALSE;}4)編譯生成UseDlg.dll和UseDlg.lib。接下來我們建立調用此DLL的應用程序,其步驟如下:1)在VC菜單中File->New新建一個命名為Use的MFCAppWizard(exe)工程,下一步選擇DialogBased之后點擊Finish按鈕。2)在主對話框上面添加一個按鈕,www.qqme5.com,之后雙擊此按鈕,會彈出AddMemberFunction的對話框,直接點擊OK進入voidCUseDlg::OnButton1()函數(shù)。并在此函數(shù)內添加一個函數(shù)調
8、用:ShowDlg();。3)緊跟在#include語句后面加上如下代碼:extern"C"__declspec(dllexport)voidShowDlg();#pragmacomment(lib,"debug/UseDlg")4)將上面UseDlg工程中生成