模态窗口和非模态窗口

JacksonFox 2006-12-08 02:27:27
我想在我的程序中创建一个子窗口A,这个窗口A总在程序的最上面,而且当主程序弹出模态窗口B的时候,这个窗口A仍旧能够响应自己窗口A上的事件。
程序本身有自己的主窗口。
谢谢。
...全文
517 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
livedeal 2006-12-08
  • 打赏
  • 举报
回复
A用非模式的就可以了~~~这样出现B的时候A也可以用的`
wsb_8224 2006-12-08
  • 打赏
  • 举报
回复
弹出了模态窗口后,只能对这个模式窗口进行操作了,好象不能再对其他的窗口进行控制了,即使你发出了消息,也要等模式窗口关闭后才能响应!要完成这样的操作,可以换种其他的模式来完成
mynamelj 2006-12-08
  • 打赏
  • 举报
回复
当弹出模态窗口后所有权将在模态窗口上。
Elysium 2006-12-08
  • 打赏
  • 举报
回复
可以用消息是主程序弹出窗口B,先设置窗口A属性StayOnTop
CrazyAzreal 2006-12-08
  • 打赏
  • 举报
回复
有点不懂``你的模态窗口A既然已弹出,你的主程序的控制区就只在窗口A了,它还怎样弹出模态窗口B?还是这个窗口B是在窗口A上弹出?

用笨方法,比如你的窗口A要处理键盘或鼠标事件的,那么在窗口B的PreTranslateMessage里,将这个消息发送给窗口A,具体怎样发送,有多少方法,可以SendMessage,或者窗口A.PreTranslateMessage(pMsg);

如果是全部消息都要处理的话,那直接就在DefWindowProc里做这个转发过程`
JacksonFox 2006-12-08
  • 打赏
  • 举报
回复
线程解决。
UINT BeginKeyboard(LPVOID pParam)
{
KeyboardEvent* pKeyboardEvent = (KeyboardEvent*)pParam;

if (pKeyboardEvent->m_pDlg == NULL)
{
pKeyboardEvent->m_pDlg = new CQuestKeyboardDialog(pKeyboardEvent->m_pDoc);
pKeyboardEvent->m_pDlg->SetInputControl(pKeyboardEvent->m_pEdit);
pKeyboardEvent->m_pDlg->Create(IDD_DIALOG_KEYBOARD);
}

pKeyboardEvent->m_pDlg->ShowWindow(SW_SHOW);

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

return 0;
}

谢谢。
JacksonFox 2006-12-08
  • 打赏
  • 举报
回复
嗯。。对线程有点。。。呵。。
我尝试一下。。
dirdirdir3 2006-12-08
  • 打赏
  • 举报
回复
可以考虑为A窗口为创建一个新的线程(使用多线程界面),应该可以实现.
JacksonFox 2006-12-08
  • 打赏
  • 举报
回复
看来是有点异想天开,呵呵。
我在想想看。
其实原意是,A窗口是一个On-Screen的键盘,可是我又不想做一个新的EXE程序,所以想看看有没有什么办法。。
我再尝试一天,明天结贴。
olidyu 2006-12-08
  • 打赏
  • 举报
回复
A用非模态的,然后用SetWindowPos把它的顺序放到最上面。

只有这样试下了吧,不行估计就没戏
bjtwtx 2006-12-08
  • 打赏
  • 举报
回复
楼上的注意了,楼主要求A总在最上面的,非模态的能做到吗?
楼主基本上是在异想天开

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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