几种rect和position总结

CRect rtPic;
m_ctlPicture.GetClientRect( &rtPic );     {top=0 bottom=538 left=0 right=1037} 只取得本身区域的大小,top和left都是零,其实只拿到了宽度和高度
rtPic.NormalizeRect();
m_ctlPicture.ClientToScreen( &rtPic );     {top=131 bottom=669 left=156 right=1193}  这屏幕左上角为坐标原点,而计算出来的坐标
ScreenToClient( &rtPic );     {top=119 bottom=657 left=0 right=1037}    以客户端(其父窗口)的左上角为坐标原点,而计算出来的坐标(客户坐标)
GetClientRect()

GetWindowRect()    (该尺寸以相对于屏幕坐标左上角的屏幕坐标给出

SetWindowPos()   (客户坐标
事实证明:
GetWindowRect的效果等于先GetClientRect再ClientToScreen

模态对话框生成后指定其在父窗口中的位置

1.首先,不管是模态对话框还是非模态对话框,生成的时候都得指定其父窗口,这个很重要:
CDialog1  dialog1(this);   dialog1.DoModal();
CDialog2  *pDialog2;
pDialog2 = new CDialog2;
pDialog2->Create(IDD_DIALOG2, this);

2.模态对话框的构造函数中可以拿到父类的rect
pParent->GetWindowRect(&rectParent);
然后在OnInitDialog()中设定位置
SetWindowPos( NULL, (rectParent.left+rectParent.right)/2 – 637/2, (rectParent.top+rectParent.bottom)/2 – 416/2, 636, 416, SWP_SHOWWINDOW);