我在MyColorDlg中定义了变量CRect rect;
 在OnPaint()中的一部分代码如下:
                  left = rect.left ;
itoa(left,s,10);
AfxMessageBox(s);
pNewBrush.DeleteObject();
pNewBrush.CreateSolidBrush(RGB(128,0,0));
pOldBrush = dc.SelectObject(&pNewBrush);
dc.Rectangle(&rect);
         dc.SelectObject(pOldBrush);在OnButton1()的中定义了rect,代码如下:
   CWnd *t;
   CDC *pDC;
   t = CWnd::GetDlgItem(IDC_Color);
   pDC = t->GetDC();
   t->GetWindowRect(&rect);
   h = rect.left;
   itoa(h,s,10);
   AfxMessageBox(s);
   Invalidate();
我想知道为什么两个函数的rect的值会不同呢?

解决方案 »

  1.   

    GetWindowRect得到的是屏幕坐标吧,CWnd::ScreenToClient转换下试试。
      

  2.   

    OnButton1()的Rect是控件IDC_Color的大小.OnPaint()的Rect是重绘窗口的大小,不是一个窗口.
      

  3.   

    一个是屏幕坐标
    一个是对话框坐标http://www.yesky.com/467/173467.shtml
      

  4.   

    OnPaint()是对整个窗口重画,但是可是通过rect变量传值的呀,
    通过OnButton1()函数给rect赋值,在通过OnPaint()画整个窗口,
    应该不存在什么问题呀?
    请大师能给我比较详细的解答,非常感谢!