一个基于对话框的工程,我要在对话框的一个STATIC控件上画图(IDC_TEXT)
OnPaint里代码如下:
....
else
{
    if (m_bHis == true)
    {
PaintHis();
    }
    CDialog::OnPaint();
}
PaintHis()代码如下:
         CDC*  pDC  = GetDlgItem(IDC_TEXT)->GetDC();
HWND  hWnd = GetDlgItem(IDC_TEXT)->GetSafeHwnd();
  CPen  pen,cpen;
pen.CreatePen(PS_SOLID,3,RGB(0,0,0));
cpen.CreatePen(PS_SOLID,1,RGB(0,0,255));
pDC->SelectObject(&pen);
GetDlgItem(IDC_TEXT)->GetClientRect(m_rectHis);
  pDC->MoveTo(281,323); //m_rectHis.bottom = 323 ,m_rectHis.right = 281
  pDC->LineTo(0,0);
ReleaseDC(pDC);
ValidateRect(m_rectHis);
按下按钮后
 m_bHis = true;
就是奇怪为什么按下按钮后在静态框里显示的只是直线的一部分,麻烦大侠们帮我看看,十分感谢!

解决方案 »

  1.   

    要用GetDlgItem(IDC_TEXT)->GetWindowRect(&rect)函数获得图片框的大小,不要用pDC->MoveTo(281,323);这样很容易超过图片框的范围,所以会显示一部分
      

  2.   

    就是不要用pDC->MoveTo(281,323);里面的这种固定的数据,用上面获得的rect的位置绘图
      

  3.   

    GetClientRect(m_rectHis)得到的是控件的相对坐标,m_rectHis的left和top都是0.而MoveTo(281,323)这里的左边是相对于屏幕的绝对坐标,用GetWindowRect(&rect)可以获得你想要的坐标,同意一楼的说法,不要写281,232,调用rect.right,rect.bottom要方便得多。而且,如果你的静态图片控件是在对话框里,最好先GetWindowRect(&rect)获得对话框的绝对坐标,然后再计算图片控件的坐标
      

  4.   

    问题已经解决了。。主要还是自己Invalidata、ValidataRect等几个函数没搞清楚,不过还是谢谢楼上各位,分也加上~