如何把dll中弹出的对话框,作为exe中属性页的一个页面?
手中有一个别人封装好的动态库,导出一个函数,函数主要功能是弹出一个对话框,如下:
BOOL WINAPI RptShowSnapshot(LPCTSTR szFileName,HWND hwndParent)
{
CPreviewDlg dlgPreview(CWnd::FromHandle(hwndParent));
dlgPreview.m_strFileName=szFileName;
dlgPreview.DoModal();
return TRUE;
}
现在想把该对话框(在 dll 中)作为属性页(在 exe 中)的一个页面使用。
我不知道怎么弄,高手帮忙!
问题点数:200、回复次数:11Top
1 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2006-03-07 10:18:12 得分 0
看上面楼主的函数里面是DoModal方式的,应该不能做为一个child窗体使用了。
请使用Create()方式后ShowWindow()后才可以Top
2 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2006-03-07 10:21:34 得分 0
再有请参考:
http://vckbase.com/document/viewdoc/?id=605Top
3 楼sungengyu(快乐机器)回复于 2006-03-07 10:35:31 得分 0
rageliu :并不是 DoModal 或者 Create 的问题。我有全部的源码,但是我想做最小的修改。
CPropertySheet 需要的是 CPropertyPage ,而动态库中的是 CDialog 。我想把 CDialog 替代 CpropertyPage ,放到 CPropertySheet 中。当然不是一定要用 CPropertySheet ,只要能用现有的 CDialog 实现属性页,怎么做都行。Top
4 楼boluoCTO(菠萝项目经理)回复于 2006-03-07 10:45:38 得分 50
CPropertySheet 的扩展性不是很好,我以前做过一个,可以使用主Dialog里面套子Dialog的方法。一样可以达到CPropertySheet的效果。你用Spy++看PropertySheet,他其实也是用的这个方法,只不过他封装了而已。Top
5 楼laiyiling(陌生人[MVP])回复于 2006-03-07 11:15:09 得分 25
看看这个有没有帮助
Inserting a CFormView into a CPropertySheet
http://www.codeguru.com/cpp/controls/propertysheet/article.php/c607/
Top
6 楼bohlee(我心澎湃)回复于 2006-03-07 14:04:47 得分 25
MARKTop
7 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2006-03-07 17:36:45 得分 50
最好是把DLL的对话框改成child风格,弹出的时候用非模态方式.并把Tab设置为父窗口Top
8 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2006-03-07 18:16:25 得分 0
up
非child的还domodal一定不行的Top
9 楼he_sl(he_sl)回复于 2006-03-07 18:23:25 得分 0
改成非模态,然后将它加到一个CPropertyPage对话框上
没试过Top
10 楼he_sl(he_sl)回复于 2006-03-07 18:24:17 得分 0
这样不需要动别人的类的层次关系
只需要改弹出方式Top
11 楼Atomictry(天影)回复于 2006-03-07 18:33:22 得分 50
估计楼主问不捷径。
我曾经这样搞过:
HWND hWnd = ::FindWindow(NULL, "某个已在运行的程序标题");
if (NULL != hWnd)
::SetParent(hWnd, this->m_hWnd);
这样的后果是,子窗口是被直接导致父窗口的窗口里,但是子窗口所在的区域无法得到刷新,没有任何响应。Top




