在父窗体的中间位置显示子窗体 MFC

CRect rect;

GetWindowRect(rect);//该函数返回指定窗体的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。

//rect获得的坐标为当前窗口的坐标,对于显示器屏幕的最左上角为(0,0)点坐标,向下移动多少就加值多少

//如果要显示的对话框宽320,高140。(320,140)。left、right是X轴坐标,left-right则为宽父窗口的宽,同理top、bottom是Y轴的坐标。相减为父窗口的高。left ;top; right;bottom;分别表示该窗口的/左側/顶部/右側/底部坐标。

//要在窗口中心显示该对话框,则例如以下:

CRect rect_sub(rect.left/2 + rect.right/2 - 160,

                             rect.top/2 + rect.bottom/2 -70,

                             rect.left/2 + rect.right/2 + 160,

                              rect.top/2 + rect.bottom/2 +70);

m_SaveDlg.MoveWindow(rect_sub);

m_SaveDlg.ShowWindow(SW_SHOW);


显示完毕。

PS:

1、事实上另一种特别简单的函数,直接m_SaveDlg.CenterWindow()就ok了。。。后来才发现的。。。

2、与GetClientRect不同,GetClientRect是获取客户区的坐标,客户区坐标指定客户区的左上角和右下角。因为客户区坐标是相对窗体客户区的左上角而言的,因此左上角坐标为(0,0)。

3、坐标包括两种:屏幕坐标与客户区坐标屏幕坐标系和窗体客户区坐标系最明显的差别在于坐标原点。屏幕坐标系的坐标原点在整个屏幕的左上角。而窗体客户区坐标系的坐标原点在窗体客户区的左上角。通常这两个点是不重合的。

窗体客户区能够參考这个:http://bigchaochao.blog.163.com/blog/static/10366545820113691726384/





原文地址:https://www.cnblogs.com/wgwyanfs/p/6756286.html