+ -
当前位置:首页 → 问答吧 → 画图问题

画图问题

时间:2011-12-10

来源:互联网

我在void CInput1::OnPaint() 
{
CPaintDC dc(this); // device context for painting
  Draw_Bk_Text(&dc);

// TODO: Add your message handler code here

// Do not call CDialog::OnPaint() for painting messages
}
函数里调用的Draw_Bk_Text(&dc);这个函数,由于onpaint()里画的太多了我就另外定义一个函数Draw_Bk_Text(&dc);
Draw_Bk_Text(&dc);函数如下
C/C++ code

void CInput1::Draw_Bk_Text(CPaintDC*dc)
{
    
    CDC  CompatibleDc;    
    CRect rect;
    GetClientRect(&rect);
    rect.top+=330;//下半部分的高度
    CompatibleDc.CreateCompatibleDC(dc);
    CBitmap CompatiblebitMap;
    CompatiblebitMap.CreateCompatibleBitmap(dc,rect.Width(),rect.Height());//创建兼容位图将来要画的东西就往这上面画
    CBitmap*pcompatible=CompatibleDc.SelectObject(&CompatiblebitMap);
    CompatibleDc.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(94,96,97));//填充这块画布的背景色
    //这里写下半要画的

    CPen pen(PS_SOLID,3,RGB(255,0,0));
    CPen*pOldpen=CompatibleDc.SelectObject(&pen);
    CompatibleDc.MoveTo(140,338);
    CompatibleDc.LineTo(140,520);
    dc->BitBlt(0,335,rect.Width(),rect.Height(),&CompatibleDc,0,0,SRCCOPY);
    CompatiblebitMap.DeleteObject();
    ReleaseDC(&CompatibleDc);
     CompatibleDc.SelectObject(pOldpen);

 //    CompatibleDc.SelectObject(pOldbrush);

}

怎么 这条直线就不显示呢?请高手指点 谢谢

作者: ganggangban   发布时间: 2011-12-10

你尝试下这样:

rect.top += 330; 不使用这样兼容位图的大小和窗口大小不一致的方式,否则来回转换坐标可能会让你有点搞糊涂,比如你这样加上top加上330后,还需要确定rect的高度包含你MoveTo和LineTo的坐标在内;简单点,目标和源DC的位图一样大小,一样坐标;

另外,删除兼容DC,使用DeleteDC,而且CompatibleDc.SelectObject(pOldpen)在删除兼容DC之前操作。

作者: dream0411   发布时间: 2011-12-10