关于Dialog类的问题~~~~ 通过MFC向导新建一个基于dialog的应用程序mydialog,我想在程序起始时将其隐藏,但是由于其对话框是Model()方法产生的模式对话框,好象不能隐藏,如果我将其用Create方法改成非模式对话框,又会出现错误.是不是基于DIALOG的应用程序不能隐藏呢?但是它是继承自CWND类的,应该可以隐藏,究竟怎么做呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ::ShowWindow(this->GetSafeHwnd(), SW_HIDE); 可以隐藏的.不过也要掌握时机.如果你在App里用这个语句,如果在domode之前,会因为窗口没有创建无效,如果在之后,会报错(我刚才测试了一下),大概因为是DOMODE了,这边不能"动"了^_^如果你在Dlg里面的OnInitDialog里用,也会因为窗口还没有创建而无效.我是方法是这样:1.在OnInitDialog里加上SetTimer(1,1,NULL);2.重载OnTimer函数,写上:ShowWindow(SW_HIDE);运行试试! 可以在OnInitDialog中加入如下代码来隐藏: ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, WS_EX_TOOLWINDOW); wp.length=sizeof(WINDOWPLACEMENT); wp.flags=WPF_SETMINPOSITION; wp.showCmd=SW_HIDE; SetWindowPlacement(&wp); qrlvls(≌AIR⌒LIKE) (≤和空气一样帅≥√) 是高手.正解 显示 ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, WS_EX_WINDOWEDGE); wp.length=sizeof(WINDOWPLACEMENT); wp.flags=WPF_SETMINPOSITION; wp.showCmd=SW_SHOW; wp.ptPosition = CPoint(0, 0); wp.rcNormalPosition = CRect(0, 0, 100, 100); SetWindowPlacement(&wp);注意: 上面 CPoint(0,0); 应该修改成OnInitDialog中所得到的窗口左上角坐标CRect(0, 0, 100, 100);应该修改成OnInitDialog中所得到的窗口大小 在OnPaint里写if (m_bHide){ ShowWindow(SW_HIDE);} else { ShowWindow(SW_NORMAL);} 恩,那么多高手都解答了,我就不再说了! 呵呵,不过楼上的可说错了! 主对话框也可以模式对话框的,但是要控制app里面不要return就可以了,就是让程序退不出来就可以! 的确是的,我对线程类了解不够,主对话框可以非模式,不过InitInstance必须返回TRUE,CDLGTESTApp theApp;CDLGTESTDlg* dlg;/////////////////////////////////////////////////////////////////////////////// CDLGTESTApp initializationBOOL CDLGTESTApp::InitInstance(){ AfxEnableControlContainer(); dlg=new CDLGTESTDlg(); dlg->ShowWindow(SW_SHOW); m_pMainWnd = dlg; return TRUE; }int CDLGTESTApp::ExitInstance() { delete dlg; return CWinApp::ExitInstance();} 不知楼主的问题解决了没有.不过上面的办法似乎有点缺陷.使用timer的办法是正道,不过用户能看到界面闪了一下,感觉不太好.在oninitdialog中用SetWindowPlacement的缺点是失去活动窗口.(因为活动窗口是隐藏了的dialog) 呵呵,如果返回false,就会销毁程序所有的资源了,但是如果返回true,就会启动线程消息循环,而且不会因为你关闭了主对话框而关闭整个程序! 这种方法应该很少会有人使用的!当然少数情况下,要同时启动多个对话框窗口,也许还有点用吧! 我觉得楼主的问题,真正的解决之道,在于用非模式对话框,而不能因为它会报错,就想出个办法隐藏它来! 呵呵,窗口隐藏了,问题也隐藏了,所以还不是解决之道,你贴出来,到底create是报什么错误啊? debug版本运行没问题,realse下出现访问违例 如何写一个最简单的windows服务程序?(控制面板能管理的那种) 请问winperf.h有什么作用 VC初学者,问一个VC组件风格的问题。给我弄糊涂了。 如何剪切字符串? 简单问题 简单问题,送分 高分求够———那里有用VC编写的关于 G.723.1 的例程,或相关介绍? 得到VARIANT类型的数据,如何获取里面的值 关于颜色定义的问题! 各位高手,判断本机是否连网所用的头文件Sensapi.h编译器为什么报找不到头文件的呢. 如何对汉字得出拼音
如果你在Dlg里面的OnInitDialog里用,也会因为窗口还没有创建而无效.我是方法是这样:
1.在OnInitDialog里加上SetTimer(1,1,NULL);
2.重载OnTimer函数,写上:ShowWindow(SW_HIDE);
运行试试!
::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, WS_EX_TOOLWINDOW);
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_SETMINPOSITION;
wp.showCmd=SW_HIDE;
SetWindowPlacement(&wp);
是高手.正解
::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, WS_EX_WINDOWEDGE);
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_SETMINPOSITION;
wp.showCmd=SW_SHOW;
wp.ptPosition = CPoint(0, 0);
wp.rcNormalPosition = CRect(0, 0, 100, 100);
SetWindowPlacement(&wp);
注意:
上面 CPoint(0,0); 应该修改成OnInitDialog中所得到的窗口左上角坐标
CRect(0, 0, 100, 100);应该修改成OnInitDialog中所得到的窗口大小
if (m_bHide)
{
ShowWindow(SW_HIDE);
} else {
ShowWindow(SW_NORMAL);
}
CDLGTESTApp theApp;
CDLGTESTDlg* dlg;/////////////////////////////////////////////////////////////////////////////
// CDLGTESTApp initializationBOOL CDLGTESTApp::InitInstance()
{
AfxEnableControlContainer();
dlg=new CDLGTESTDlg();
dlg->ShowWindow(SW_SHOW);
m_pMainWnd = dlg;
return TRUE;
}
int CDLGTESTApp::ExitInstance()
{
delete dlg;
return CWinApp::ExitInstance();
}
不过上面的办法似乎有点缺陷.
使用timer的办法是正道,不过用户能看到界面闪了一下,感觉不太好.
在oninitdialog中用SetWindowPlacement的缺点是失去活动窗口.(因为活动窗口是隐藏了的dialog)