说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

专家们:我如何改变对话框的显示位置

编辑:说三道四文库 发布时间:2018-06-18 06:25
HTML文档下载 WORD文档下载 PDF文档下载
我希望打开的对话框在右上角显示,于是我这样写代码:
{
......
CMyDlg dlg;
dlg.DoModal ();
dlg.MoveWindow(400,0,100,50,TRUE);
}//这不仅不能改变对话框的默认位置,反而在关闭对话框时程序出错!!!
BOOL CXXXDlg::OnInitDialog()
{
...
MoveWindow(400,0,100,50,TRUE);
return TRUE;  // return TRUE  unless you set the focus to a control
}
DoModal返回时对话框已经Destroy,所以关闭时出错.可以用IsWindow判断是否是有效的窗口.
可以用CenterWindow(HWND hWndCenter = NULL )来居中
DoModal()返回后已经调用EndDialog(),不能再来对对话框窗口控制了  
SetWindowPos.
SetWindowPos()
我记得好像在对话框的属性中可以直接设置他的位置和大小
BOOL CAboutDlg::OnInitDialog() 
{
CDialog::OnInitDialog();
    CRect rcDeskTop;
    HWND hWnd = ::GetDesktopWindow();
    ::GetClientRect(hWnd, &rcDeskTop);
    CRect rcDlg;
    GetWindowRect(&rcDlg);
    CRect rc;
    rc.left = rcDeskTop.right - rcDlg.Width();
    rc.top = rcDeskTop.top;
    rc.right = rcDeskTop.right;
    rc.bottom = rcDlg.Height();;
    MoveWindow(&rc);   

return TRUE;  
             
}
在OnInitDialog()函数中:

int x=0;
int y=0;
RECT rect;
GetWindowRect(&rect);
CWnd::SetWindowPos(NULL,x,y,(rect.right-rect.left),                (rect.bottomrect.top),SWP_SHOWWINDOW);
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘