一个对话框程序在主对话框出现前,如何先显示一个对话框?

lonelyeagle 2002-07-29 07:39:59
我在作一个串口通信程序,在主对话框启动之前,希望能先用一个对话框(设置),
输入串口初始化的参数.但是由于应用程序是对话框框架的,如果在应用程序
类CWinApp的initInstance()中的主对话框定义前,使用并显示设置对话框的话,
就会出错.有知道的朋友,请指教.
...全文
115 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ozzman 2002-08-02
在对话框的类的构造函数中加个Create,看看是不是可以了!
回复
freecutelei 2002-07-31
不过看你的程序就是一个pass的登陆框吧? 应该放在initinstance没问题的
然后在passdlg的onclose里面判断一下是否密码正确,然后把主要的dlg显示出来
回复
freecutelei 2002-07-31
如果程序需要分配source或者初始化,放在initinstance有时候会出错的,遇到这样的时候我都是放在onpaint里面,设个变量只执行一次
回复
rokia 2002-07-31
你對csdn的解釋有誤解。如果不加入你的那一段pass對話框,肯定是主窗口關閉就是整個程序的關閉,不過,如果你改了initinstance,先彈一個框肯定沒有問題的,不會導致程序退出。
回复
tcice 2002-07-31
在InitInstance()中,在主对话框DoModal()前, DoModal()你的设置对话框.
agree up
回复
ylb_and_xy 2002-07-31
在InitInstance()中,在主对话框DoModal()前, DoModal()你的设置对话框.
我就是这么做的。出错可能是你其他地方的原因。
回复
Ozzman 2002-07-31
建议还是在CMyClassApp的initInstance()中显示设置对话框。这些对话框的设置保存在全局变量中,在申明主对话框后进行设置,然后显示。
或在对话框的初始化时利用全局变量进行设置(也可以在其他地方)。
目的就是在主窗口起来之前先起你要的窗口,你会在CMyClassApp的InitInstance()中看到如下代码!
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
/*
在这儿加入你要的东东!明白了吗!不明白给我
ozzman@163.net
*/

CCHARToASCDlg dlg; //主窗口
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
回复
sunshine_djh 2002-07-31
直接在InitInstance()中显示,我就是这么做的。出错可能是你其他地方的原因。
回复
lonelyeagle 2002-07-30
shan_hy:
你和前面的朋友讲的方法,有一些我曾试过.
对于m_pMainWnd,在msdn中解释说,若是m_pMainWnd指向的
窗口关闭的话,由于这意味着主窗口的关闭,因此应用程序会随之
关闭.你的解释中已经注意到了,但是怎么是先关闭对话框,然后又
DoModal()?这样在访问上,会不会有问题?
例如:(借前面朋友代码一用)
CPassDlg pass;
m_pMainWnd = &pass;//这是将先显示的对话框
pass.DoModal(); /*1*/
if(pass.m_ret != 1)
return false;
CMntnDlg dlg;
m_pMainWnd = &dlg;//这条语句是不是要放到CPassDlg的OnOk()
//或是OnCancel()中去
//否则前面的语句1结束后,对话框pass
//关闭,应用程序是否会结束?
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{}

还请指点.谢谢
回复
shan_hy 2002-07-30
在InitInstance()函数中先将m_pMainWnd = 你先要显示的对话框;
然后在该对话框关闭的时候,再将
((CxxxApp*)AfxGetApp())->m_pMainWnd = 主对话框;然后DoModal()就可以了
回复
aileen_long 2002-07-30
照webber84(糕鱼昏)说的做吧。
回复
Hanzo 2002-07-30
在主对话框DoModal()前, DoModal()你的设置对话框.
回复
UDX协议 2002-07-30
CPassDlg pass;
pass.DoModal();
if(pass.m_ret != 1)
return false;
CMntnDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{}
回复
howtotell 2002-07-30
串口通信需要初始化的东西一定要写在你的对话框弹出之前.
回复
chenshi999 2002-07-29
建议还是在CWinApp的initInstance()中显示设置对话框。这些对话框的设置保存在全局变量中,在申明主对话框后进行设置,然后显示。
或在对话框的初始化时利用全局变量进行设置(也可以在其他地方)。
回复
张友邦 2002-07-29
在OnPaint事件中,我有个程序也是要这样的功能,我就是这样实现的.
不过,记得设置一个static变量让这一段程序只执行一次.
回复
webber84 2002-07-29
OnInitDialog中。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告