void CHistogram::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here CString str;
CWnd *pWnd = GetDlgItem(IDC_HISTOGRAM); // IDC_HISTOGRAM为对话框的一个TEXT控件
CDC *pDc = pWnd->GetDC();
RECT rect;
pWnd->GetClientRect(&rect);
CPen* pRedPen = new CPen;
pRedPen->CreatePen(PS_SOLID,1,RGB(255,0,0));  // 红色画笔
CPen* pOldPen = pDc->SelectObject(pRedPen);
pDc->Rectangle(&rect); pDc->SelectObject(pOldPen);

delete pRedPen;
}为什么上面的程序无法绘制出矩形呢?

解决方案 »

  1.   

    我不明白,如果你准备将矩形画在text控件中,那么直接去text控件的onpaint中执行类似操作即可如果是在准备在dialog画矩形,那就可以在dialog中的onpaint中执行画矩形操作另外,我看你的类名CHistogram,也没看出来他到底是dialog还是text控件
      

  2.   

    CHistogram是一个dialog对应的类,IDC_HISTOGRAM是里面的一个TEXT控件,我是只想在这个控件里面绘图
      

  3.   

    只想在控件中绘图就重载控件类在其中的OnPaint中来绘制;但是最好不要重载Edit控件,用Static就可以了,或者直接从CWnd继承。
      

  4.   

    哈哈,这样不是没绘出来,应该是被你的Edit遮住了吧
      

  5.   

    顺便提醒一下,你在OnPaint内,其dc本身就已经够用了,GetDC是多余的,用如下代码试试看void CHistogram::OnPaint() 

    CPaintDC dc(this); // device context for painting CWnd *pWnd = GetDlgItem(IDC_HISTOGRAM); // IDC_HISTOGRAM为对话框的一个TEXT控件 
    //CDC *pDc = pWnd->GetDC(); //们必要的这句
    RECT rect; 
    pWnd->GetClientRect(&rect); 
    CRect NewRect(rect.left+5,rect.top+5, rect.right-5,rect.bottom-5);//新建一个矩形进行绘图,
    //其尺寸比控件小一点。
    CPen* pRedPen = new CPen; 
    pRedPen->CreatePen(PS_SOLID,1,RGB(255,0,0));  // 红色画笔 
    CPen* pOldPen = dc.SelectObject(pRedPen); 
    dc.Rectangle(&rect); dc.SelectObject(pOldPen); delete pRedPen; 

      

  6.   

    不好意思,楼上漏改一处:
    dc.Rectangle(&rect);
    改为
    dc.Rectangle(&NewRect);
      

  7.   

    问题并不在这里,我发觉是重绘的问题,如果加上UpdateWindow();就可以解决这个问题,我不明白的是为什么要加上UpdateWindow()呢?在对话框从无到有的过程中不是已经发送了一个WM_PAINT,为什么还需要对其重绘呢?(至少此时窗口并没有变为无效啊)
      

  8.   


    先排除另外一种可能先,试试看 矩形区域不和 text 文本重叠 时候是什么图像。
    pWnd->GetClientRect(&rect); 
    CRect NewRect(rect.left-5,rect.top-5, rect.right-5,rect.bottom-5);

    //新建一个矩形进行绘图, 
    //往左上方偏移5个单位如果通过以上代码发现红色区域出来了,只是被控件遮挡了。那么可以肯定,
    在对话框第一次出来的时候,如果没有UpdateWindow,这个区域应该会处于背景之上,控件之下。

    如果发现红色区域还没出来,那估计就是我们对这个重绘机制还不够了解,和你一起学习了!