EndDialog()方法怎么不能立即关掉对话筐,那么还有什么办法么?
解决方案 »
- 不用控件如何设置和获得本地IP地址
- 孙鑫的VC视频要在哪里下啊?我这里是校园网,用不了电驴啊。。。。哪位大侠能指点一下啊?。。。。雪地裸体跪谢
- 这样将结构体写入文件读出时为何是怪码?
- 关于用键盘HOOK读取条码的问题(急急急!!!!,在线等待)
- 提问!!!
- 结构体的问题
- 请问谁有mstcpip.h
- VC++的爱好者们~~ 我提议....(有话说的, 请在此一回)
- 新手提问:CreateDialog为什么返回NULL??(先答对者送200分)
- MFC连接ODBC数据源时出现"记录集只读"问题,还有就是提示“SNAPSHOT”仅对内存优化的表有效,无法预定义语句,怎么办?
- 简单问题。急!!!!!!!!
- 急需!!谁能提供VSS的命令行操作的详细中文说明,偶一万个感激!
CCdburnerDlg dlg;
int nResponse = dlg.DoModal();
dlg.SendMessage( WM_CLOSE );//(或者:dlg.OnClose();
在InitDialog里settimer
在ontimer里enddialog
int nResponse = dlg.DoModal();
SendMessage( WM_CLOSE );
CCdburnerDlg dlg;
...
中,dlg的句柄怎么获得
SendMessage( WM_CLOSE );编译通不过,参数怎么具体处理
SetTimer(1, 1000, NULL);//这里1000是一秒,你看也就是一秒钟会调用OnTimer()函数一次,你想多长时间关闭,就设多长时间;
然后给该Dlg添加OnTimer()函数,在这它的函数体里处理:
if(nIDEvent == 1)
EndDialog(IDOK);//是IDOK还是IDCANCEL,由你自己选择,相当于点击了Ok或Cancel按钮;这样就没有问题了
请看下列对话筐类的部分实现:
BOOL CCdburnerDlg::OnInitDialog()
{
CDialog::OnInitDialog(); SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
SetTimer(1,1000,NULL); ////////
return TRUE;
}afx_msg void CCdburnerDlg::OnTimer( UINT nIDEvent )
{
if(nIDEvent == 1)
EndDialog(IDOK); ////////////
}
然而,对话框仍不能自行关闭!
afx_msg void CCdburnerDlg::OnTimer( UINT nIDEvent )
{
if(nIDEvent == 1)
EndDialog(IDOK); ////////////
}
样子很奇怪,是写错了还是?它前面不应该有“afx_msg”这个关键字啊,如果有,肯定不会调用的啊,你跟踪一下(在该函数中设断点),看看这个函数执行了没有?如其他各位所说,将EndDialog(IDOK);改为OnOK();也可以,但是这应该不是真正的问题,我的都是用前面的,没有出过错顺便提一下,这个你的OnTimer()是用ClassWizard产生的吗?
根据你和各位的指导,问题已经解决,
另外,
1.怎么在对话筐类的外部而不时在OnInitDialog()中设置时间?因为我要根据外部情况决定时间长短
2.dlg的句柄怎么获得?
在你的Dlg类里定义一个:
int m_iYourTime;
的成员变量,然后在DoModal()之前给他赋值,用它代替你的SetTimer()函数中的1000,这样你就可以大概控制时间了。其他更科学的方法也有,可能设计到创建线程之类的,比较麻烦,呵呵
即可!
这里如果你以前设了timer,就killtimer
然后调用。
在你的Dlg中定义一个CStringArray的变量,设为m_saComboStr;
然后在你的CSDlg类的OnInitDialog()函数中后面添加:
for(int i = 0; i < m_saComboStr.GetSize(); i++)
dlg.mcbx.AddString(m_saComboStr[i]);然后这么使用就可以了:
CSDlg dlg;
dlg.m_saComboStr.Add("1");
dlg.m_saComboStr.Add("2");
dlg.m_saComboStr.Add("3");//当然可以用循环赋值;
…………
int nResponse = dlg.DoModal();这种方法也只能在DoModal()前使用,其他地方也是不行的,也就是说不是任意的“外面”都可以。原因是:在DoModal()之前,对话框还没有建立,之后对话框又消失了,上面的控件也是一样,所以在DoModal()之前和之后都不能对其中的控件操作,切记切记;但是可以对它的和控件无关的成员变量操作,因为在定义的时候,他们就已经存在了,而不象控件还要生成。只是这个问题我以前碰到过而已,离高手还远呢,呵呵,互通有无吧。我的EMAIL:[email protected]。