AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

在DLL中使用资源(一)

51自学网 2015-08-30 http://www.wanshiok.com

在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;

}

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:使用c++的成员指针实现类似Borland&nbsp;VCL组件的事件回调机制(下)  下一篇:在DLL中使用资源(二)