其实在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();