InBlock.gif关于逻辑坐标(LP - Logical Point)和设备坐标(DP – Device Point)    
InBlock.gif        对于屏幕,逻辑坐标的原点在最左下角,让整个屏幕在坐标轴的第一象限。设备坐标是在输出设备上定点绘制图形对象是用的,它采用笛卡尔坐标系,原点在屏幕的最左上角,x轴的值自左向右增加,y轴自右向左增加,单位为像素(设备单位)。另外设备坐标是绝对的,逻辑坐标是相对的,可以根据窗口的位置变化来变化的,引用逻辑坐标,就是为了更加直观的来表示屏幕的坐标。还有一种物理坐标,实际上就是设备坐标。
InBlock.gif
InBlock.gif关于逻辑坐标和设备坐标的转换
InBlock.gif逻辑坐标转换成设备坐标的函数:
InBlock.gif函数原型:
InBlock.gifBOOL LptoDP(
InBlock.gifLPPOINT lpPoints, 指向POINT结构数组的指针,每一个POINT结构中的X坐标和Y坐标将被转换
InBlock.gif int nCount, //指定数组中点的数目,不写则为1
InBlock.gifHDC hdc //指向设备环境的句柄。我在写程序的时候,似乎没有写哦,不过也通过了,会不会又是因为写在了CView类里面的原因呢?
InBlock.gif);
InBlock.gif        如果函数调用成功,返回值为非零值。否则为零。
InBlock.gif使用:
InBlock.gifCPoint pt(0, 0);
InBlock.gifpDC->LPtoDP(&pt);
InBlock.gif
InBlock.gif逻辑坐标转换成设备坐标的函数:
InBlock.gif函数原型:
InBlock.gifBOOL DptoLP(
InBlock.gifHDC hdc, //指向设备环境的句柄。还是没有写过……-_-!!!...
InBlock.gifLPPOINT lpPoints, //指向POINT结构数组的指针,每个POINT结构中的X和Y坐标将被转换
InBlock.gif int nCount, //规定数组中点的数目,不写则为1
InBlock.gif);
InBlock.gif        如果函数调用成功,返回值为非零值。否则为零。
InBlock.gif使用:
InBlock.gifCPoint pt(0, 0);
InBlock.gifpDC->DPtoLP(&pt);
InBlock.gif注意,里面接的参数不是矩形,而是CPoint类。
 
 
 
补充一下
 
GetClientRect的CRect是相对它的窗口的客户区的原点而言的,即它的左上角坐标总是(0,0),大小总是客户区的长宽。GetWindowRect得到的CRect则是相对于屏幕坐标而言的,它的左上角坐标就是窗口在屏幕上的左上角坐标,它的大小就是整个窗口的大小。
ClientToScreen,可以把一个CPoint对象或CRect对象的坐标从客户区坐标系(以客户区左上角为原点)变换为屏幕坐标系(以屏幕左上角为原点)。
如:
// 把对话框的大小变成客户区的大小
void CAboutDlg::OnButton1()
{
CRect myRect;
GetClientRect(&myRect);//取得客户区的大小

ClientToScreen(myRect);//转换为屏幕坐标
MoveWindow(myRect.left, myRect.top,
myRect.Width(), myRect.Height());//MoveWindow使用的是屏幕坐标
}

ScreenToClient,则可以把一个CPoint对象或CRect对象的坐标从屏幕坐标系变换为客户区坐标系。
例如:
CPoint pos( ::GetMessagePos() ); //::GetMessagePos() 得到发生事件时鼠标的屏幕坐标
ScreenToClient(&pos);//把它转换为客户区坐标以便随后在绘图时使用
...
使用以下代码,可以把对话框移到刚好覆盖的地方:
CRect rcTab; // 整个Tab
CRect rcItem; // Tab上方的按钮

// 取得并计算要移动的矩形框
m_tab1.GetWindowRect(&rcTab); // 屏幕坐标
ScreenToClient(rcTab); // 化成父窗口的客户区坐标
m_tab1.GetItemRect(0, &rcItem); // 取得Tab上方按钮的大小
rcTab.DeflateRect(0,rcItem.bottom+1,0,0); // 缩小Tab的矩形

// 把对话框移动到这个矩形框上
m_Page1->MoveWindow(rcTab); // 相对于父窗口的客户区移动

补充:
关于这些函数的最权威、最详细的描述,请参看MSDN。
GetClientRect(),GetWindowRect()这两个函数都是CWnd类的成员函数,或称为方法(Method)。所以调用它们得到的矩形都是属于调用它们的那个CWnd对象的窗口的,如m_tab1.GetWindowRect(&rcTab); 得到的矩形rcTab就是Tab控件的窗口大小和位置(屏幕坐标系)。"它的大小就是整个窗口的大小"这句话中说的窗口就是发出GetWindowRect()调用的这个CWnd窗口。