为什么弹出的模式对话框会被父窗口遮住(没显示),但焦点在模式对话框上?按一次Alt+Tab 模式对话框才显示在父窗口前面。

ljooo 2008-07-04 10:20:12
我按F5,正常是弹出一个模式对话框,但没任何反应,就是没有显示对话框,但焦点在模式对话框上,因为键盘事件被模式对话框接收了。如果按一次Alt+Tab,或切换到其他窗口再切换回来,那个对话框就显示了。
在我的自己电脑上运行没有这个问题,即有显示该对话框。但在别人的电脑运行就会出现这种情况。
...全文
271 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljooo 2008-07-07
  • 打赏
  • 举报
回复
我找到原因了。

我使用了一个计时器,每100毫秒刷新一次界面。
即主窗口初始化里 SetTimer(4, 100, NULL);
OnTimer里调用OnPaint。

初始化AdminDlg对话框时,跟父窗口计时器刷新界面产生冲突,导致只显示父窗口,没显示弹出框。这个问题在个别类型的显卡才出现,这就是为什么有些电脑会,有些不会。

最后解决:
KillTimer(4);//先停止计时器
AdminDlg adminDlg;
SetTimer(4, 100, NULL);//初始化后再启动计时器。
adminDlg.DoModal();

cnzdgs 2008-07-04
  • 打赏
  • 举报
回复
再这样试一下,把AdminDlg adminDlg改为:
AdminDlg adminDlg(GetActiveWindow());
cnzdgs 2008-07-04
  • 打赏
  • 举报
回复
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE ¦ ¦SWP_NOSIZE);
SetForegroundWindow();
把这两行注释掉有问题吗?
另外,主窗口是不是TopMost?
ljooo 2008-07-04
  • 打赏
  • 举报
回复
有WS_EX_APPWINDOW
我按照你的方式做了。问题依然存在。

主对话框是全屏,无边框,禁止运行第二个实例。背景是一张图,在OnEraseBkgnd绘图,没在OnPaint里绘图。
zgl7903 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 ljooo 的帖子:]
我按F5,正常是弹出一个模式对话框,但没任何反应,就是没有显示对话框,但焦点在模式对话框上,因为键盘事件被模式对话框接收了。如果按一次Alt+Tab,或切换到其他窗口再切换回来,那个对话框就显示了。
在我的自己电脑上运行没有这个问题,即有显示该对话框。但在别人的电脑运行就会出现这种情况。
[/Quote]
估计LZ的对话框具有 WS_EX_APPWINDOW 属性

文本方式打开.rc文件
删除对话框资源的 EXSTYLE WS_EX_APPWINDOW 一行
或是在 OnInitDialog() 中加入 ModifyStyleEx(WS_EX_APPWINDOW,0);试试看
ljooo 2008-07-04
  • 打赏
  • 举报
回复
单线程,AdminDlg上有几个Button,分别弹出几个不同的下一级对话框。所以虽然看不见AdminDlg,按回车能弹出下一级对话框。除了Button本身的单击(鼠标和键盘回车),没响应其它事件。
ljooo 2008-07-04
  • 打赏
  • 举报
回复
//主对话框
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)

if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_F5:
AdminDlg adminDlg;
adminDlg.DoModal();
return true;
}
}
}

//AdminDlg的初始化

BOOL AdminDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE||SWP_NOSIZE);
SetForegroundWindow();
return TRUE;
}

AdminDlg对话框属性Topmust 设置为true了
cnzdgs 2008-07-04
  • 打赏
  • 举报
回复
怎么创建和显示的对话框?响应了哪些消息?是否多线程?
skinfeature 2008-07-04
  • 打赏
  • 举报
回复
把AdminDlg adminDlg改为:
AdminDlg adminDlg(GetActiveWindow());
ljooo 2008-07-04
  • 打赏
  • 举报
回复
还是不行。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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