首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC DLL中创建非模态子对话框,主窗口退出是出现错误

2012-04-24 
MFC DLL中创建非模态子对话框,主窗口退出是出现异常我使用MFC DLL创建了一个线程,然后在线程里创建了一个

MFC DLL中创建非模态子对话框,主窗口退出是出现异常
我使用MFC DLL创建了一个线程,然后在线程里创建了一个非模态子对话框

代码如下

void funcallback(void *pParam)
{
  //g_DllDlg为子对话框对象,g_hWnd为主窗口句柄
g_DllDlg.Create(IDD_DIALOG1, CWnd::FromHandle(g_hWnd)); 
g_DllDlg.ShowWindow(SW_SHOW);

 MSG msg;
 while(GetMessage(&msg, NULL, 0, 0))
 {
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }

}

BOOL CMFCDLLApp::InitInstance()
{
CWinApp::InitInstance();

 m_pMainWnd = (CWnd*)&g_DllDlg;

_beginthread(funcallback, 0, NULL);
  return TRUE;

return TRUE;
}

问题在于,如果先关掉子对话框,然后再关掉主窗口,就可以正常退出
如果不先关子对话框而直接关掉主窗口,则会发生异常,调试后发生异常发生在DestroyWindow()函数里。

ENSURE(pMap != NULL);

请问哪位大侠知道如果解决这个问题啊,谢谢!

[解决办法]
为什么非要关闭主窗口呢?
简单点儿,比如,可以把主窗口隐藏。

[解决办法]
窗口与线程相关联的。一个线程创建的窗口,不能在另一个线程中访问的,比如UpdateDate,DestroyWindow之类。要以通过PostMessage的方法退出窗口。
[解决办法]

探讨
窗口与线程相关联的。一个线程创建的窗口,不能在另一个线程中访问的,比如UpdateDate,DestroyWindow之类。要以通过PostMessage的方法退出窗口。

[解决办法]
父窗口句柄都销毁了,子窗口肯定会有问题啊
创建的时候不就是用到父窗口了嘛
g_DllDlg.Create(IDD_DIALOG1, CWnd::FromHandle(g_hWnd));

热点排行