由CWND派生的子类,如何就不能够是模态的?(可能小弟我提问的方式不如何正确,但基本就是这样的)
由CWND派生的子类,怎么就不能够是模态的?(可能我提问的方式不怎么正确,但基本就是这样的)
各位高手:
我最近在网上搜到一个跳棋的程序,我想在自己的对话框中,暂时命名为Dialog1设置一个按钮,然后再调用这个程序,可是出现了一点小问题...
在按钮的响应函数中,我是这样定义的:
void COkDlg::OnBnEnter()
{
// TODO: Add your control notification handler code here
CTtqDlg dlg;
MSG msg;
CWnd* m_pMainWnd;
m_pMainWnd = &dlg;
int nResponse = dlg.CreateEx(0,
AfxRegisterWndClass(0), "跳子棋 ",
WS_POPUP|WS_SYSMENU,
CRect(0,0,453,504),NULL,NULL,NULL);
hBmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMBK), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
hbmmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMBK1), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
BITMAP bm;
::GetObject(hBmp, sizeof(bm), &bm);
HRGN h = BitmapToRegion(hBmp);
if (h)
::SetWindowRgn(m_pMainWnd-> m_hWnd, h, TRUE);
dlg.ShowWindow(SW_SHOW);
dlg.UpdateWindow();
while(GetMessage(&msg,(HWND)NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
其中CTtqDlg是由cwnd派生的.
在CTtqDlg中有一个newgame()函数,用来显示一个模态的对话框,暂时取名为Dialog2.
运行的时候,当我显示Dialog2的时候发现:Dialog2可以跟CTtqDlg的对象进行切换,对Dialog1不能够切换.而在这个游戏的源程序中,Dialog2对CTtqDlg的对象是不可以切换的.
我要实现的是,Dialog2对以上这两个对象都不能够切换,该怎样实现的啊.如果需要的话,我可以把整个代码发给你帮我分析.拜托各位了!
------解决方案--------------------
应该用UI线程
------解决方案--------------------
创建模态对话框的话,至少应该是用DoModal(),而不是Create.这是一个很明显的问题.
------解决方案--------------------
RunModalLoop
不过怎么不用CDialog
------解决方案--------------------
解决了就值得恭喜下呢。
各位高手:
我最近在网上搜到一个跳棋的程序,我想在自己的对话框中,暂时命名为Dialog1设置一个按钮,然后再调用这个程序,可是出现了一点小问题...
在按钮的响应函数中,我是这样定义的:
void COkDlg::OnBnEnter()
{
// TODO: Add your control notification handler code here
CTtqDlg dlg;
MSG msg;
CWnd* m_pMainWnd;
m_pMainWnd = &dlg;
int nResponse = dlg.CreateEx(0,
AfxRegisterWndClass(0), "跳子棋 ",
WS_POPUP|WS_SYSMENU,
CRect(0,0,453,504),NULL,NULL,NULL);
hBmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMBK), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
hbmmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMBK1), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
BITMAP bm;
::GetObject(hBmp, sizeof(bm), &bm);
HRGN h = BitmapToRegion(hBmp);
if (h)
::SetWindowRgn(m_pMainWnd-> m_hWnd, h, TRUE);
dlg.ShowWindow(SW_SHOW);
dlg.UpdateWindow();
while(GetMessage(&msg,(HWND)NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
其中CTtqDlg是由cwnd派生的.
在CTtqDlg中有一个newgame()函数,用来显示一个模态的对话框,暂时取名为Dialog2.
运行的时候,当我显示Dialog2的时候发现:Dialog2可以跟CTtqDlg的对象进行切换,对Dialog1不能够切换.而在这个游戏的源程序中,Dialog2对CTtqDlg的对象是不可以切换的.
我要实现的是,Dialog2对以上这两个对象都不能够切换,该怎样实现的啊.如果需要的话,我可以把整个代码发给你帮我分析.拜托各位了!
------解决方案--------------------
应该用UI线程
------解决方案--------------------
创建模态对话框的话,至少应该是用DoModal(),而不是Create.这是一个很明显的问题.
------解决方案--------------------
RunModalLoop
不过怎么不用CDialog
------解决方案--------------------
解决了就值得恭喜下呢。