斑竹是谁啊,一个问题问了那么久,都没人回呢??? http://community.csdn.net/Expert/topic/3416/3416073.xml?temp=.5062525问了好几天,都不见有人会啊,怎么了???? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我说的意思就是先启动一个dialog,当dialog消失的时候,再生成一个窗口。可是生成这个窗口的时候一闪就不见了呢?为什么 BOOL CConferClientApp::InitInstance(){ CPLoginDialog pLogin; m_pMainWnd=&pLogin; int nResponse = pLogin.DoModal(); if (nResponse == IDOK) { CShowControlWnd *pWnd=new CShowControlWnd; pWnd->Create(); pWnd->ShowWindow(SW_SHOW); pWnd->UpdateWindow(); m_pMainWnd=pWnd; } else if (nResponse == IDCANCEL) { IsInMain=false; PostQuitMessage(0); } delete pLogin; return true;}可是这个窗口只闪一下就不见了呢? 很显然啊,因为你前面的dialog是模态对话框,当调用DoModal()后,主线程会等待这个对话框运行结束才退出,所以这时候你可以很轻松的操作login对话框。但你创建的pWnd可不是这样啊。如果CShowControlWnd是个对话框的话,那么,你用Create方式创建就是建立了一个非模态对话框。非模态对话框是不阻塞主线程的。因此在pWnd->ShowWindow(SW_SHOW)后,程序是继续向下执行的!!!一直执行到return true后,整个应用程序就结束了!因此你只能看到窗口闪一下而已。要想不退出,你就必须想办法阻塞主线程,要么用模态对话框,要么就要做个循环之类的,总之程序不能运行到return true,否则就整个应用程序运行结束了。明白了么??? 明白了,那怎么让他阻塞呢?如果设置为m_pMainWnd就可以阻塞着,但是如果那样生成的dialog就不能在里面实现窗口的WM_PAINT()调用了,我是发送消息让重会的,必须AfxGetApp->m_pMainWnd->SendMessage()。如果this->SendMessage()就不行,出现异常,说是找不到这个窗口IsWindow(m_hWnd)?,我觉得就出在这里了 BOOL CConferClientApp::InitInstance(){ CPLoginDialog pLogin; int nResponse = pLogin.DoModal(); if (nResponse == IDOK) { CShowControlWnd oWnd; oWnd.DoModal(); m_pMainWnd=&oWnd; } else if (nResponse == IDCANCEL) { } return true;} 有两点注意:1、去掉pWnd->Create();后,资源ID是否已经给对话框绑定2、return true;是有问题的应该是return FALSE; CShowControlWnd oWnd;oWnd.DoModal();???????CShowControlWnd:public CWnd;那里来的DoModal?? 奇怪,在OnInitDialog()里面我HWND hWnd=GetSafeHwnd();了可是在SendMessage(hWnd,....);却出现这个hWnd=NULL的异常呢?为什么? //靠,你仿照一下也不行?????????????????BOOL CConferClientApp::InitInstance(){ CPLoginDialog pLogin; //m_pMainWnd=&pLogin; //你把这行去掉 int nResponse = pLogin.DoModal(); if (nResponse == IDOK) { CShowControlWnd *pWnd=new CShowControlWnd; pWnd->Create(); pWnd->ShowWindow(SW_SHOW); pWnd->UpdateWindow(); m_pMainWnd=pWnd; } else if (nResponse == IDCANCEL) { } //delete pLogin; return TRUE;} 我改了好几次了,如果把m_pMainWnd=&pLogin;去掉,我在这个dialog里面有个SendMessage()要发送一个消息去更新我的对话筐界面,就会出现异常操作,ASSERT(IsWindow(m_hWnd)); 这个窗口可能不存在了。所以无法更新界面。只能设置为m_pMainWnd,然后AfxGetApp->m_pMainWnd->SendMessage(); 我后来找了一个跟我做的基本上一样的东西看了看,可是他的里面就可以直接调用RedrawWindwo()来更新界面,我的一更新就异常,只能这样发送消息。 sorry,国庆这几天出去了。。 请问怎样动态给文件取名 MFC对Direct程序的支持如何?? WTL使用CRichEditCtrl的问题 请教 分析函数名称 怎么在CMyDoc类中定义CArray类用来管理float数组变量对象?谢谢 菜鸟刚开始学写DLL,初级问题 help me!!! windows中能不能实现由拨号方分配给被拨方IP地址? VS2012MFC基于单文档模式的自定义热键无法响应 在文本编辑器或者richtextbox的控件中,如何取得当前光标的位置 急!为什么getfolderpath会出错 CDaoDatabase::Execute创建表后不能马上用CDaoTableDef::Open()打开?
BOOL CConferClientApp::InitInstance()
{
CPLoginDialog pLogin;
m_pMainWnd=&pLogin;
int nResponse = pLogin.DoModal();
if (nResponse == IDOK)
{
CShowControlWnd *pWnd=new CShowControlWnd;
pWnd->Create();
pWnd->ShowWindow(SW_SHOW);
pWnd->UpdateWindow();
m_pMainWnd=pWnd;
}
else if (nResponse == IDCANCEL)
{
IsInMain=false;
PostQuitMessage(0);
}
delete pLogin;
return true;
}
可是这个窗口只闪一下就不见了呢?
要想不退出,你就必须想办法阻塞主线程,要么用模态对话框,要么就要做个循环之类的,总之程序不能运行到return true,否则就整个应用程序运行结束了。
明白了么???
{
CPLoginDialog pLogin; int nResponse = pLogin.DoModal();
if (nResponse == IDOK)
{
CShowControlWnd oWnd;
oWnd.DoModal(); m_pMainWnd=&oWnd;
}
else if (nResponse == IDCANCEL)
{
} return true;
}
1、去掉pWnd->Create();后,资源ID是否已经给对话框绑定
2、return true;是有问题的
应该是return FALSE;
oWnd.DoModal();
???????
CShowControlWnd:public CWnd;
那里来的DoModal??
我HWND hWnd=GetSafeHwnd();了
可是在SendMessage(hWnd,....);却出现这个hWnd=NULL的异常呢?为什么?
BOOL CConferClientApp::InitInstance()
{
CPLoginDialog pLogin;
//m_pMainWnd=&pLogin; //你把这行去掉
int nResponse = pLogin.DoModal();
if (nResponse == IDOK)
{
CShowControlWnd *pWnd=new CShowControlWnd;
pWnd->Create();
pWnd->ShowWindow(SW_SHOW);
pWnd->UpdateWindow();
m_pMainWnd=pWnd;
}
else if (nResponse == IDCANCEL)
{
}
//delete pLogin;
return TRUE;
}