天皓手机销售管理系统:MFC 对话框问题!!

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 17:20:49
CColorDialog dlg;
dlg.DoModal();
以上代码运行正确,将打开一个颜色对话框,调用::IsWindow(dlg.m_hWnd)返回TRUE;

而以下代码
CColorDialog* pdlg;
pdlg=new CColorDialog();
pdlg->ShowWindow(SW_SHOW);
在编译时将产生错误,并且调用::IsWindow(pdlg->m_hWnd)
返回FALSE,表明它指向的不是一个窗口,为什么????

请详细说明第二例错误原因并更正,本人感激涕零,不知所言。
谢谢二楼的回答,但是颜色对话框的ID在哪可以找得到呢?似乎没有啊!

首先pdlg=new CColorDialog(); 这句只是分配了内存空间,没有将对象实例话,其次使用非模式对话框最好加入主窗体句柄,使其有所归属(暂时这么叫吧)

CMainFrame* pWnd=(CMainFrame*)AfxGetMainWnd();
pdlg=new CColorDialog(pWnd);
pdlg->Create(对话框的id例如:IDD_****,pWnd);
pdlg->ShowWindow(SW_SHOW);

补充:没有注意到你用的是CColorDialog ,CColorDialog 是vc++的标准对话框,没有办法直接应用非模式,除非你将CColorDialog 类进行重载。重载同时给其id(同样的还有SetWindowText、SetWindowPos、MoveWindow等事件都不能使用,除了重载)

*(pdlg)->ShowWindow(SW_SHOW)
pdlg是指向一个CColorDialog的一个指针,而不是CColorDialog本身!