程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在DLL中使用資源

在DLL中使用資源

編輯:vc教程

  現在最常看見的關於DLL的問題就是如何在DLL中使用對話框,這是一個很普遍的關於如何在DLL中使用資源的問題。這裡我們從Win32 DLL和MFC DLL兩個方面來分析並解決這個問題。

  1.Win32 DLL 

  在Win32 DLL中使用對話框很簡單,你只需要在你的DLL中添加對話框資源,而且可以在對話框上面設置你所需要的控件。然後使用DialogBox或者CreateDialog這兩個函數(或相同作用的其它函數)來創建對話框,並定義你自己的對話框回調函數處理對話框收到的消息。下面通過一個具體實例來學習如何在Win32 DLL中使用對話框,可以按照以下步驟來完成這個例子:

  1)在VC菜單中File->New新建一個命名為UseDlg的Win32 Dynamic-Link Library工程,下一步選擇A simple DLL project。

  2)在VC菜單中Insert->Resource添加一個ID為IDD_DLG_SHOW的Dialog資源,將此Dialog上的Cancel按鈕去掉,僅保留OK按鈕。再添加一個ID為IDD_ABOUTBOX的對話框,其Caption為About。保存此資源,將資源文件命名為UseDlg.rc。並將resource.h和UseDlg.rc加入到工程裡面。

  3)在UseDlg.app中包含resource.h,並添加如下代碼:

  

HINSTANCE hinst = NULL;
HWND hwndDLG = NULL;
BOOL CALLBACK DlgProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam);
BOOL CALLBACK AboutProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam);
extern "C" __declspec(dllexport) void ShowDlg();
BOOL APIENTRY DllMain( HANDLE hModule, 
       DWORD ul_reason_for_call, 
       LPVOID lpReserved 
          )

   switch(ul_reason_for_call) 
   { 
   case DLL_PROCESS_ATTACH: 
     hinst = (HINSTANCE)hModule; 
   case DLL_PROCESS_DETACH: 
     break; 
   } 
  return TRUE;
}
extern "C" __declspec(dllexport) void ShowDlg()

   hwndDLG = CreateDialog(hinst,MAKEINTRESOURCE(IDD_DLG_SHOW),
NULL,(DLGPROC)DlgProc); 
   ShowWindow(hwndDLG, SW_SHOW);
}
BOOL CALLBACK DlgProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)

  switch(message) 
  { 
   case WM_INITDIALOG: 
     return TRUE; 
   case WM_COMMAND: 
     if(LOWORD(wParam)==IDOK)
      DialogBox(hinst,MAKEINTRESOURCE(IDD_ABOUTBOX),
hDlg,(DLGPROC)AboutProc); 
     return TRUE; 
   case WM_CLOSE: 
     DestroyWindow(hDlg); 
     hwndDLG = NULL; 
     return TRUE; 
  } 
  return FALSE;
}
BOOL CALLBACK AboutProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)

   switch(message) 
  { 
     case WM_CLOSE: 
      EndDialog(hDlg,NULL); 
      hwndDLG = NULL; 
      return TRUE; 
  } 
  return FALSE;
}

  4)編譯生成UseDlg.dll和UseDlg.lib。

  接下來我們建立調用此DLL的應用程序,其步驟如下:

  1)在VC菜單中File->New新建一個命名為Use的MFC AppWizard(exe)工程,下一步選擇Dialog Based之後點擊Finish按鈕。

  2)在主對話框上面添加一個按鈕,之後雙擊此按鈕,會彈出Add Member Function的對話框,直接點擊OK進入void CUseDlg::OnButton1()函數。並在此函數內添加一個函數調用:ShowDlg();。

  3)緊跟在#include語句後面加上如下代碼:

  extern "C" __declspec(dllexport) void ShowDlg();

  #pragma comment(lib,"debug/UseDlg")

  4)將上面UseDlg工程中生成的UseDlg.dll和UseDlg.lib兩個文件復制到Use工程的Debug目錄內。

  5)編譯生成Use.exe。 

  運行Use.exe,點擊Button1按鈕,可以看到一個名稱為Dialog的非模態對話框彈出。點擊上面的按鈕,可以彈出模態對話框About。運行成功。 

  讓我們來回顧一下在Win32 DLL中使用對話框的過程。

  在DLL中,我們定義了兩個對話框資源:IDD_DLG_SHOW和IDD_ABOUTBOX,並且導出了函數ShowDlg。在函數ShowDlg之中使用CreateDialog函數創建了非模態對話框IDD_DLG_SHOW,並指定了該對話框的回調函數DlgProc。在DlgProc之中處理了WM_INITDIALOG、WM_COMMAND和WM_CLOSE消息,以響應用戶對對話框所做的動作。在處理按鈕動作的時候,使用DialogBox函數創建IDD_ABOUTBOX這個模態對話框,指定其回調函數為AboutProc,並且在AboutProc中處理其相應消息。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁
  • 尾頁
  • 共3頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved