在DLL中使用资源

http://tech.ddvip.com   2006年04月02日    社区交流

本文详细介绍在DLL中使用资源

  现在最常看见的关于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;
}

责编:豆豆技术应用

正在加载评论...