windows(对话框),screen(屏幕),client(dialog或者是控件)
1.对话框与其它两者的关系
//得到win的尺寸
this->GetWindowRect(&wndRect1);
//以client左上角为(0,0)为原点坐标 显示screen的坐标 所以有负值
this->ScreenToClient(&wndRect1);
//windows内的client 去边框后的值
this->GetClientRect(&wndRect2);
//以screen左上角(0,0)为原点坐标 显示client的值
this->ClientToScreen(&wndRect2);
GetWindowRect: {top=0 bottom=378 left=0 right=566}
ScreenToClient:{top=-25 bottom=353 left=-3 right=563}
GetClientRect: {top=0 bottom=350 left=0 right=560}
ClientToScreen:{top=25 bottom=375 left=3 right=563}
2.控件与其它两者的关系
/****再看控件的**********/
CRect ctrlRect1;
CRect ctrlRect2;
CStatic *pCtrl = (CStatic*)GetDlgItem(IDC_STC_TEST);
pCtrl->GetClientRect(&ctrlRect1);
pCtrl->ClientToScreen(&ctrlRect1);
pCtrl->GetWindowRect(&ctrlRect2);
pCtrl->ScreenToClient(&ctrlRect2);
//控件大小
GetClientRect: {top=0 bottom=170 left=0 right=285}
//以Screen左上角为原点 控件右移(127,73)
ClientToScreen: {top=127 bottom=297 left=73 right=358}
//以windows左上角为原点 控件在窗口中的坐标
GetWindowRect: {top=127 bottom=297 left=73 right=358}
//以控件左上角为原点
ScreenToClient: {top=0 bottom=170 left=0 right=285}
备注:程序一般的调用顺序是OnCreate()->OnSize()->OnDraw()
我实践的结果是在OnDraw()中>GetClientRect(rect); 才会有值,前面函数里调用时 rect都是0.