我在子线程中创建一个对话框:
BOOL CThread::InitInstance()
{
CMyDialog* pDlg=new CMyDialog;
pDlg->Create(IDD_DIALOG1);
Sleep(5000);
pDlg->ShowWindow(SW_SHOW);
m_pMainWnd=pDlg;
return TRUE;
}
只要把Sleep放到Create以后,主界面就会停止响应5秒钟。但如果把dialog换成framewnd的话就没有这个问题:
BOOL CThread::InitInstance()
{
CFrameWnd* pWnd=new CFrameWnd;
pDlg->Create(NULL,"Frame Window");
Sleep(5000); //这时主界面正常
pWnd->ShowWindow(SW_SHOW);
m_pMainWnd=pWnd;
return TRUE;
}
谁能告诉我CDialog::Create倒底做了什么事,以至在它之后在子线程中Sleep会导致主线程停止响应?
BOOL CThread::InitInstance()
{
CMyDialog* pDlg=new CMyDialog;
pDlg->Create(IDD_DIALOG1);
Sleep(5000);
pDlg->ShowWindow(SW_SHOW);
m_pMainWnd=pDlg;
return TRUE;
}
只要把Sleep放到Create以后,主界面就会停止响应5秒钟。但如果把dialog换成framewnd的话就没有这个问题:
BOOL CThread::InitInstance()
{
CFrameWnd* pWnd=new CFrameWnd;
pDlg->Create(NULL,"Frame Window");
Sleep(5000); //这时主界面正常
pWnd->ShowWindow(SW_SHOW);
m_pMainWnd=pWnd;
return TRUE;
}
谁能告诉我CDialog::Create倒底做了什么事,以至在它之后在子线程中Sleep会导致主线程停止响应?
解决方案 »
- scrollbar滚动显示图片
- EDIT 属性设置
- 一个关于用waveout××进行声音播放的问题,请高手帮忙!来者有分~~谢了
- 怎杨 把时间 显示在 桌面上 但是字符串 的背景是 透明 的 ?
- 栈的问题!高手们快出手救救小第!!!!!谢谢!!!
- 如何比较在两种算法的快慢!!!!!
- 怎么样为一个应用程序增加双接口或派发接口?
- 请教一个关于通讯方面的编程问题。
- 小小动画
- 请问各位大侠:DirectX 70 sdk的例子中,include文件夹下面.h文件的.cpp文件在哪??见笑!!
- 我在线等待 请大家帮帮忙我在线等待 请大家帮帮忙我在线等待 请大家帮帮忙我在线等待 请大家帮帮忙我在线等待 请大家帮帮忙我在线等待 请
- 如何为CEditView设置字体?
pParentWnd Points to the parent window object (of type CWnd) to which the dialog object belongs. If it is NULL, the dialog object's parent window is set to the main application window.
而CDialog的Create中的pParentWnd是这样的:
pParentWnd Specifies the parent window of this frame window. This parameter should be NULL for top-level frame windows.
你可以将CMyDialog的属性中的POPUP改为Child试试还会不会有这种情况。
CMyDialog* pDlg=new CMyDialog;
pDlg->Create(IDD_DIALOG1,CWnd::FromHandle(AfxGetApp()->m_pMainWnd->m_hWnd);
Sleep(5000);
还是一样,主线程无响应5秒。
m_pMainWnd = m_pDlg;
m_pDlg->Create(CAboutDlg::IDD);
Sleep(5000);
m_pDlg->ShowWindow(SW_SHOWNOACTIVATE);这样就无响应了:m_pDlg = new CAboutDlg;
m_pDlg->Create(CAboutDlg::IDD);
Sleep(5000);
m_pDlg->ShowWindow(SW_SHOWNOACTIVATE);
m_pMainWnd = m_pDlg;应该是MFC的问题。
{
CMyDialog* pDlg=new CMyDialog;
pDlg->Create(IDD_DIALOG1);
pDlg->ShowWindow(SW_SHOW);
Sleep(5000);
m_pMainWnd=pDlg;
return TRUE;
}试试
m_pDlg = new CAboutDlg;
m_pMainWnd = m_pDlg;
m_pDlg->Create(CAboutDlg::IDD);
的话,在Create中用AfxGetMainWnd()得到的窗口(也就是dialog的父窗口)就是它m_pDlg本身。
但如果
m_pDlg = new CAboutDlg;
m_pDlg->Create(CAboutDlg::IDD);
Sleep(5000);
m_pDlg->ShowWindow(SW_SHOWNOACTIVATE);
m_pMainWnd = m_pDlg;
的话,用AfxGetMainWnd得到的窗口就是程序的主窗口。这应该就是产生这种差别的根本原因。但我不明白父窗口的不同为什么会产生这种差别。
BOOL CThread::InitInstance()
{
CMyDialog* pDlg=new CMyDialog;
pDlg->Create(IDD_DIALOG1);
Sleep(5000);
pDlg->ShowWindow(SW_SHOW);
m_pMainWnd=pDlg;
return TRUE;
}
改为BOOL CThread::InitInstance()
{
CMyDialog* pDlg=new CMyDialog;
Sleep(5000);
pDlg->Create(IDD_DIALOG1);
pDlg->ShowWindow(SW_SHOW);
m_pMainWnd=pDlg;
return TRUE;
}
试试看