AfxMessageBox、MessageBox居中显示问题 小弟最近开发了一个界面类似C++ Builder的程序。在开发过程中遇到了一个头疼的问题。那就是调用AfxMessageBox、MessageBox时弹出的对话框始终不能居中显示。因为我的主窗口位于屏幕的上部而且比较狭窄,所以弹出窗口也是位于屏幕的上部不是很协调。 不知道那位高手有这方面的经验,指点一下小弟。 先谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好的办法就是自己写一个对话框来代替AfxMessageBox、MessageBox 用MessageBox()函数的时候将父窗口的句柄指定为DeskTopWindow的句柄呢!如MessageBox(GetDesktopWindow(),"Center MessageBox","notice",MB_ICONINFORMATION | MB_OK);祝你成功! 谢谢各位的支持!不过对于以上同志的回答我还不能解决该问题。1)最好的办法就是自己写一个对话框来代替AfxMessageBox、MessageBox这两个倒是可以解决,可是想CFileDialog等的系统对话框就不是那么容易搞定了吧而且放着系统做好的不用是否有点对不起MS呢???2)用MessageBox()函数的时候将父窗口的句柄指定为DeskTopWindow的句柄呢!这种方法也尝试过了,只是这样的窗口不能堵塞主窗口的消息循环,假如用户依然采用同样的操作,就会弹出几个同样的提示窗口,是不是很糗啊!!!!希望斑竹和各位高手给小弟指个方向!!!万分彷徨中@^@ 呵呵,我有个办法不知行不行:DoModal一个对话框,在它的OnInitDialog中隐藏它,然后MessageBox,之后EndDialog,可能需要一些函数封装。 osborn(osborn) 的想法很特别。我实验一下 我有个想法,先把你的主窗口居中,然后显示AfxMessageBox(),最后付位主窗口。 GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 4; GetWindowRect(rectWnd); SetWindowPos(NULL, x,y,rectWnd.Width(),rectWnd.Height()-height,SWP_NOZORDER | SWP_NOACTIVATE);AfxMessageBox();SetWindowPos(....) 我想rofole(假行僧)兄弟的想法不太好吧按这个思路的话,用户点击某个按扭后,主窗口将改变位置。这个可不好啊斑竹不在吗?给个思路好吗?愁死了! 呵呵,这样试试:BOOL CMyDlg::OnInitDialog() { CDialog::OnInitDialog(); SetFocus(); AfxMessageBox(_T("e")); EndDialog(IDOK); return TRUE;} osborn(osborn)兄弟的做法有个问题那就是我调用DoModal()显示窗口时,将不调用OnInitDialog()吧这个问题已经解决谢谢各位兄弟的大力支持解决的方法就是:1)设置显示窗口的父窗口为桌面2)在显示窗口前所定主窗口,显示结束后在解琐再次感谢大家的支持!!! vc访问webservice,编译出错,急求帮助 如何为指向二维数组的指针分配内存呢? 请问如何实现自动关机? 一句翻译. 卸载VC++后不能安装 为什么啊?? 不规则形状位图按钮制作时遇到的疑问??高手帮忙!!附源代码!! 菜鸟问题,分不够可以再加 在哪里可以找到完整的全球IP分配数据库? 求助vc画线的 谢谢 请问个位大虾,有何方法提高链表的遍历速度 打开文件的小问题 MFC简体问题三个
如
MessageBox(GetDesktopWindow(),"Center MessageBox","notice",MB_ICONINFORMATION | MB_OK);祝你成功!
不过对于以上同志的回答我还不能解决该问题。
1)最好的办法就是自己写一个对话框来代替AfxMessageBox、MessageBox
这两个倒是可以解决,可是想CFileDialog等的系统对话框就不是那么容易搞定了吧
而且放着系统做好的不用是否有点对不起MS呢???
2)用MessageBox()函数的时候将父窗口的句柄指定为DeskTopWindow的句柄呢!
这种方法也尝试过了,只是这样的窗口不能堵塞主窗口的消息循环,假如用户依然采用同样的操作,就会弹出几个同样的提示窗口,是不是很糗啊!!!!希望斑竹和各位高手给小弟指个方向!!!
万分彷徨中@^@
我实验一下
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 4;
GetWindowRect(rectWnd);
SetWindowPos(NULL, x,y,rectWnd.Width(),rectWnd.Height()-height,SWP_NOZORDER | SWP_NOACTIVATE);
AfxMessageBox();SetWindowPos(....)
按这个思路的话,用户点击某个按扭后,主窗口将改变位置。
这个可不好啊斑竹不在吗?
给个思路好吗?
愁死了!
{
CDialog::OnInitDialog();
SetFocus(); AfxMessageBox(_T("e"));
EndDialog(IDOK); return TRUE;
}
那就是我调用DoModal()显示窗口时,将不调用OnInitDialog()吧这个问题已经解决
谢谢各位兄弟的大力支持解决的方法就是:
1)设置显示窗口的父窗口为桌面
2)在显示窗口前所定主窗口,显示结束后在解琐再次感谢大家的支持!!!