MessageDlg 窗口被擋住

勉励前行 2010-03-22 05:20:43
程序在一個fsStayOnTop的Form中用 MessageDlg 窗口提示用戶,
Form1->FormStyle = fsStayOnTop ;
if(MessageDlg("請確認刪除?",mtConfirmation ,TMsgDlgButtons()<<mbYes<<mbNo, 0,mbNo)
!= mrYes)
{...}

在很多電腦上均正確顯示,也就是Message會在Form1的前面。
但發現有一台電腦該Message提示總被Form1擋住,Message窗口在Form1的後面去了。

如果說是程序的問題,為何大部分電腦正常,如果說是操作系統的問題,可發現電腦上裝的都是WINXP SP3 。

不知何原因。如何解決。


...全文
155 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
周药师 2010-03-24
  • 打赏
  • 举报
回复
如果是线程里就用Application->MessageBox
但看lz 的样子好像跟线程无关的
ydlchina 2010-03-24
  • 打赏
  • 举报
回复
换成MessageBox
cptang 2010-03-23
  • 打赏
  • 举报
回复
设置窗口的position为默认
我估计你设置了这个position了
我以前也遇到过这个问题
regersubadm 2010-03-23
  • 打赏
  • 举报
回复
这样肯定是没有问题的。因为在ShowModal后,其它窗口都被disabled掉了,只有当前窗口可用.
勉励前行 2010-03-23
  • 打赏
  • 举报
回复
而且是,一旦出現這問題,就每次都被擋住,就不再是偶然了。

現在我干脆更改代碼,改成:(...是參數,太長,懶得寫了)

#define MessageDlg(...) MyMessageDlg(....)

int MyMessage(...)
{
TForm *p = CreateMessageDlg(...);
p->ShowModal();
int R = p->ModalResult ;
delete p ;
return R ;
}

不知道行不行。要檢驗行不行,要等幾個星期的試用才知道。
shenhua1220 2010-03-23
  • 打赏
  • 举报
回复
会不是会是 显卡 或者屏幕分辨率 的设置有关系
勉励前行 2010-03-23
  • 打赏
  • 举报
回复
未清楚什麼原因。確認的情況是:在長時間使用後,偶然會出現 MessageDlg的那个窗口被 擋住。

e_board 2010-03-23
  • 打赏
  • 举报
回复
在线程中调用ShowMessage有时会出现异常。不知道MessageDlg会不会。
出现时,会把ShowMessage的窗口变得无限长,或无限宽。
truelove7283159 2010-03-23
  • 打赏
  • 举报
回复
fsStayOnTop的Form 是不是在showmessage以后发生了一个事件,或者FOCUS 等类似事情.
regersubadm 2010-03-22
  • 打赏
  • 举报
回复
你要确认真一下,挡隹你MessageDlg的那个窗口是不是MessageDlg的parent或owner只有这两个情况下才会出现这种情况。
明朝2013 2010-03-22
  • 打赏
  • 举报
回复
观望结果~~

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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