小弟最近开发了一个界面类似C++ Builder的程序。在开发过程中遇到了一个头疼的问题。那就是调用AfxMessageBox、MessageBox时弹出的对话框始终不能居中显示。因为我的主窗口位于屏幕的上部而且比较狭窄,所以弹出窗口也是位于屏幕的上部不是很协调。
    不知道那位高手有这方面的经验,指点一下小弟。
    先谢谢了!

解决方案 »

  1.   

    最好的办法就是自己写一个对话框来代替AfxMessageBox、MessageBox
      

  2.   

    用MessageBox()函数的时候将父窗口的句柄指定为DeskTopWindow的句柄呢!

    MessageBox(GetDesktopWindow(),"Center MessageBox","notice",MB_ICONINFORMATION | MB_OK);祝你成功!
      

  3.   

    谢谢各位的支持!
    不过对于以上同志的回答我还不能解决该问题。
    1)最好的办法就是自己写一个对话框来代替AfxMessageBox、MessageBox
    这两个倒是可以解决,可是想CFileDialog等的系统对话框就不是那么容易搞定了吧
    而且放着系统做好的不用是否有点对不起MS呢???
    2)用MessageBox()函数的时候将父窗口的句柄指定为DeskTopWindow的句柄呢!
    这种方法也尝试过了,只是这样的窗口不能堵塞主窗口的消息循环,假如用户依然采用同样的操作,就会弹出几个同样的提示窗口,是不是很糗啊!!!!希望斑竹和各位高手给小弟指个方向!!!
    万分彷徨中@^@
      

  4.   

    呵呵,我有个办法不知行不行:DoModal一个对话框,在它的OnInitDialog中隐藏它,然后MessageBox,之后EndDialog,可能需要一些函数封装。
      

  5.   

    osborn(osborn) 的想法很特别。
    我实验一下
      

  6.   

    我有个想法,先把你的主窗口居中,然后显示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(....)
      

  7.   

    我想rofole(假行僧)兄弟的想法不太好吧
    按这个思路的话,用户点击某个按扭后,主窗口将改变位置。
    这个可不好啊斑竹不在吗?
    给个思路好吗?
    愁死了!
      

  8.   

    呵呵,这样试试:BOOL CMyDlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    SetFocus(); AfxMessageBox(_T("e"));

    EndDialog(IDOK); return TRUE;
    }
      

  9.   

    osborn(osborn)兄弟的做法有个问题
    那就是我调用DoModal()显示窗口时,将不调用OnInitDialog()吧这个问题已经解决
    谢谢各位兄弟的大力支持解决的方法就是:
    1)设置显示窗口的父窗口为桌面
    2)在显示窗口前所定主窗口,显示结束后在解琐再次感谢大家的支持!!!