在COM中显示对话框(转)

 

其实在COM中显示对话框和在DLL中是一样的,只不过在DLL中我们调用的是一个外导的函数,而在COM中,我们则通过接口来调用。下面是在COM中创建对话框的基本步骤:
1、利用ATL创建一个标准的COM程序。取名为AtlDiaolg;
    2、在这个COM程序中插入一个对话框资源,对话框ID为IDD_ATLDIALOG.打资源的头文件(Resource.h)加 入到工程当中
3、创建一个接口,用于外部的访问。接口名为IAtlDlg
4、在这个接口中添加一个方法:ShowDlg(HWND hWndParent).
    HRESULT ShowDlg(HWND hWndParent)
    {
        HWND hWnd =
          CreateDialog(_Module.m_hIns, MAKEINTRESOURCE(IDD_ATLDIALOG), hWndParent, DlgProc);
        ShowWindow(hWnd, SW_SHOW);
    }
    5、定义一个对话框的消息响应过程:
    BOOL __stdcall DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
        case WM_CLOSE:
            DestroyWindow(hWnd);
            break;
        default:
            break;
        }
        return FALSE;
    }
这样,在客户程序中,我们就可以通过COM接口来调用COM中的对话框了:
// 包含COM里面的两个文件
#include "AtlDialog.h"         // 接口定义文件
#include "AtlDialog_i.c"       // GUID定义文件
// 初始化COM库
CoInitialize(NULL);
// 使用CComPtr,让其在作用域过后自动释放接口
CComPtr pAtlDlg = NULL;
// 取得相应的COM接口
HRESULT hr = CoCreateInstance(CLSID_AtlDialog, NULL, CLSCTX_INPROC_SERVER,
                 IID_IAtlDlg, (void**)&pAtlDlg);
if (SUCCEEDED(hr))
{
    pAtlDlg->ShowDlg(NULL);      // 参数为对话框所在的父窗口的句柄
}
// 使用完成之后要记得反初始化COM库
CoUninitialize();

你可能感兴趣的:(在COM中显示对话框(转))