ting_s 2015-01-20 07:58 采纳率: 0%
浏览 1834

mfc文本框图形重叠问题

 void CVisionTest::OnPaint()
{
//CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
UpdateWindow();
m_userDirection=m_direction;
CRect dlgRect,staticRect,groupRect;
this->GetWindowRect (&dlgRect);
CStatic  *pStatic=(CStatic  *) GetDlgItem( IDC_STATIC1);
CStatic *pGroup=(CStatic  *)GetDlgItem(IDC_STATIC2);
//CStatic *pDlg=(CStatic  *)GetDlgItem(IDD_TEST_DIALOG);
//pDlg->GetWindowRect(&dlgRect);
pGroup->GetClientRect(&groupRect);
pStatic->GetClientRect(&staticRect);//得到静态文本框的尺寸
int x,y,z;
x=dlgRect.Width();
y=dlgRect.Height ();
z=groupRect.Width();
       pStatic->MoveWindow(CRect((x-z-staticWidth)/2,(y-staticHeight)/2,staticWidth,staticHeight));   
       CDC* pDC=pStatic->GetDC();//获得当前DC
CBitmap bitmap;
bitmap.LoadBitmap(m_bmpId);//将位图对象加载到bitmap对象中
BITMAP bmp;//位图结构,位图的数据,包括大小等
bitmap.GetBitmap(&bmp);//得到位图的数据
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);//创建一个与当前DC兼容的DC,与位图相关的信息保存到dcCompatible中了,要显示的目标区域则由当前DC:pDC所指示出来
CBitmap   *pOldbitmap = dcCompatible.SelectObject(&bitmap);
dcCompatible.FillSolidRect(0,0,bmp.bmWidth,bmp.bmHeight,RGB(255,255,255));//将背景设为白色
dcCompatible.SelectObject(&bitmap);
pDC->StretchBlt(0,0,staticWidth,staticHeight , &dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);//加载图片
//绘图完成后的清理   
       dcCompatible.SelectObject(pOldbitmap);    
       bitmap.DeleteObject();
Invalidate();
       ReleaseDC(pDC);
}

背景抑制是白色的,可是我已经重画图了

  • 写回答

2条回答 默认 最新

  • threenewbee 2015-01-21 06:22
    关注

    你要做什么?往文本框里面画图?那需要subclass这个文本框,否则windows也会往里面绘制白色背景和边框,和你的代码就打架了。

    评论

报告相同问题?

悬赏问题

  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?