在父窗口的中间位置显示子窗口 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/





你可能感兴趣的:(编程)