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

如何改变对话框的位置?

编辑:说三道四文库 发布时间:2018-05-26 06:53
HTML文档下载 WORD文档下载 PDF文档下载
用MFC向导直接创建出来的对话框,是默认居中的
如何让他显示在屏幕的左上角?

我在初始化函数中这样写:
CRect rectDlg;
GetDlgItem(IDD_ROLEHURTCOUNT_DIALOG)->GetClientRect(&rectDlg); //想得到居中的时候对话框的位置坐标
为什么会报错?

我知道用MoveWindow或SetWindowPos
问题是,我都得不到现在居中的时候对话框的位置坐标,怎么去调整呢?
再用ClientToScreen()
用钩子,或者自己做个窗体来替换
引用 2 楼 little_sand 的回复:
用钩子,或者自己做个窗体来替换


要这么复杂阿。。。。
首先你的确认获取到的对话框句柄是否是有效的,然后再来设置位置
取得屏幕坐标再移动。
	CRect rect;
GetClientRect(&rect);
ClientToScreen(&rect);
rect.left = 0;
rect.top = 0;
SetWindowPos(this, 0, 0, rect.right, rect.bottom, SWP_SHOWWINDOW );

这样做为什么没变化阿
还是居中!
    CRect rect;
    GetClientRect(&rect);
    ClientToScreen(&rect);
    rect.left = 0;
    rect.top = 0;
    SetWindowPos(this, 0, 1, rect.right, rect.bottom, SWP_SHOWWINDOW );
    或者
    SetWindowPos(this, 1, 0, rect.right, rect.bottom, SWP_SHOWWINDOW );
引用 7 楼 byxdaz 的回复:
    CRect rect; 
    GetClientRect(&rect); 
    ClientToScreen(&rect); 
    rect.left = 0; 
    rect.top = 0; 
    SetWindowPos(this, 0, 1, rect.right, rect.bottom, SWP_SHOWWINDOW ); 
    或者 
    SetWindowPos(this, 1, 0, rect.right, rect.bottom, SWP_SHOWWINDOW );


好奇怪,这样写,我调试的rect是top=0 bottom=322 left=0 right=483
为什么还是居中显示,而不是左上角呢?
在OnInitDialog()中加入如下代码:

::SetWindowPos(this->m_hWnd,0,0,0,300,400,SWP_SHOWWINDOW);


代码经本人测试有效
报的什么错误?
SetWindowPos(this, 0, 0, rect.right, rect.bottom, SWP_SHOWWINDOW );
这句中的 this是什么,他只是类的实例罢了,
而 SetWindowPos 需要的是 窗口句柄。
所以应该用this的 m_hWnd,这才是句柄。
还有如果移动的是其他窗体的位置,可以用 FindWindow来查找句柄,之后再移动。
引用 7 楼 byxdaz 的回复:
    CRect rect; 
    GetClientRect(&rect); 
    ClientToScreen(&rect); 
    rect.left = 0; 
    rect.top = 0; 
    SetWindowPos(this, 0, 1, rect.right, rect.bottom, SWP_SHOWWINDOW ); 
    或者 
    SetWindowPos(this, 1, 0, rect.right, rect.bottom, SWP_SHOWWINDOW );


SetWindowPos(this, 0, 1, rect.right, rect.bottom, SWP_SHOWWINDOW ); 
为什么是(0,1)不是(0,0)?
CRect rectDlg;
GetClientRect(&rectDlg);
ClientToScreen(&rectDlg);
LONG lWeight1 = rectDlg.right - rectDlg.left;
LONG lHeight1 = rectDlg.bottom - rectDlg.top;

//如果不加50的话,对话框的下边和右边就会被裁掉一部分
::SetWindowPos(this->m_hWnd, 0, 0, 0 , rectDlg.right-rectDlg.left+50, rectDlg.bottom-rectDlg.top+50, SWP_SHOWWINDOW);


请问这是怎么回事啊?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘