描述:
我已经用ATL在Word中加了一个按钮,我想在点击此按钮后跳出一个无模式对话框,然后再通过此无模式对话框对Word进行操作,如点击一下无模式对话框的一个按钮就可以在Word中插入一张图等。我不知如何创建此对话框,是用Insert中的NEW ATL OBJECT 中选 Micellaneous 中的Dialog还是在资源中直接添加一个对话框,急啊!老师催要
解决方案1:
楼主,你的方法是对的。
1、“用Insert中的NEW ATL OBJECT 中选 Micellaneous 中的Dialog还是在资源中直接添加一个对话”框
2、(会出错)
HWND hWndParent=0;
hWndParent=::GetActiveWindow();
dlg.Create(hWndParent);
dlg.ShowWindow(SW_SHOW);
这样可以创建一个模式对话框,但是窗口显示出来后,会出错;经过反复考虑,发现,组件在析构的时候,对话框没有释放掉。故改进如下:
3、
HWND hWndParent=0;
hWndParent=::GetActiveWindow();
dlg.Create(hWndParent);
dlg.ShowWindow(SW_SHOW);
Sleep(3000);
dlg.DestroyWindow();
这样,建立一个以当前活动窗口(调用者窗口)为父窗口的对话框,并会显示三秒,然后自己Destroy。程序不会出错。
4、
STDMETHODIMP CObj::ShowDlg5(long hWndParent)
{
// TODO: Add your implementation code here
dlg.Create(hWndParent);
dlg.ShowWindow(SW_SHOW);
Sleep(3000);
dlg.DestroyWindow();
return S_OK;
}
vb可以把自己的Me.hWnd作为参数传入。
5、最终版:
STDMETHODIMP CObj::ShowDlg()
{
// TODO: Add your implementation code here
HWND hWndParent=0;
hWndParent=::GetActiveWindow();
dlg.Create(hWndParent);
dlg.ShowWindow(SW_SHOW);
Sleep(3000);
// dlg.DestroyWindow(); //在组件析构函数里调用。
return S_OK;
}
CDlg dlg;
~CObj()
{
dlg.DestroyWindow();
}