为什么我创建的非模态对话框闪一下就没了

jxlilong 2011-08-09 04:59:42
第一次用MFC,上网搜了好久,都没解决。



BOOL CRecvApp::InitInstance()
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}

AfxEnableControlContainer();

#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

CRecvDlg *pDlg = new CRecvDlg();
pDlg->Create(IDD_RECV_DIALOG, NULL);
pDlg->ShowWindow(SW_SHOW);



return FALSE;
}





另外,我创建了一个线程,等待UDP消息,一旦收到消息就需要显示对话框,请问在线程里怎么控制对话框。
...全文
360 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaochizhen33 2011-12-06
  • 打赏
  • 举报
回复
动态创建的变量应该在什么地方释放呢?
5t4rk 2011-08-09
  • 打赏
  • 举报
回复
不懂 学习了
东莞某某某 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bokutake 的回复:]

m_pMainFrame = pDlg;
return TURE;
模态对话框自己有消息循环,所以在InitInstance里进行,等它返回后,就直接return FALSE,没有进入App的消息循环。非模态对话框只能使用App的消息循环。
[/Quote]
100分!哈
至善者善之敌 2011-08-09
  • 打赏
  • 举报
回复
费劲,传一份给我看看吧
辰岡墨竹 2011-08-09
  • 打赏
  • 举报
回复
线程里最好给Dialog发消息,让它SHOW,这样无需额外保证线程同步。
辰岡墨竹 2011-08-09
  • 打赏
  • 举报
回复
另外记得Dialog的WM_CLOSE里PostQuitMessage,保证App退出,否则对话框关闭了,进程还在内存里。
辰岡墨竹 2011-08-09
  • 打赏
  • 举报
回复
m_pMainFrame = pDlg;
return TURE;
模态对话框自己有消息循环,所以在InitInstance里进行,等它返回后,就直接return FALSE,没有进入App的消息循环。非模态对话框只能使用App的消息循环。
jxlilong 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 babilife 的回复:]
pDlg->Create(IDD_RECV_DIALOG, NULL);

改成
pDlg->Create(IDD_RECV_DIALOG,this); 试试
[/Quote]

编译失败
至善者善之敌 2011-08-09
  • 打赏
  • 举报
回复
pDlg->Create(IDD_RECV_DIALOG, NULL);

改成
pDlg->Create(IDD_RECV_DIALOG,this); 试试
無_1024 2011-08-09
  • 打赏
  • 举报
回复
断点跟踪一下
DX_deepblue 2011-08-09
  • 打赏
  • 举报
回复
应该是API函数用错了,具体哪里我不知道,我好像还是在学习MFC的时候遇到过这种问题,现在都没用MFC忘记了

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧