MFC 在图片控件上 bmp位图和 CRectTracker 橡皮筋不能同时画

wangjian8855 2012-10-24 07:45:37
问下大家一个问题,困扰好几天了。 我在picture控件上,pDC->StretchBlt(...)将位图显示在picture控件上。 之后要用橡皮筋来选择一部门位图区域。
加载位图过程:(按钮事件,在OnPaint()里也加载了一遍)
1、onbtbOpenBmp()
{
HBITMAP OldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
OldBitmap=(HBITMAP)MemDC.SelectObject(m_hBitmap); //m_hBitmap 全局变量,是动态加载的位图。

CBitmap* pBitmap = CBitmap::FromHandle(m_hBitmap);
if(m_bmW == 0 || m_bmH == 0)
return ;
CRect rect;
GetDlgItem(IDC_STATIC_PIC)->GetWindowRect(&rect);
ScreenToClient(&rect);
/**//*str.Format("%d %d", rect.Width(),rect.Height());
MessageBox(str);*/
// pDC->BitBlt(x,y,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
pDC->SetStretchBltMode(HALFTONE);
pDC->StretchBlt(x,y,rect.Width(),rect.Height(),&MemDC,0,0,m_bmW,m_bmH,SRCCOPY);
//GetRGB(MemDC);

MemDC.SelectObject(OldBitmap);


}

2、 橡皮筋是 OnLButtonDown 事件。 因为里边有Invalidate(true);所以每次鼠标按下时,picture里边的位图就消失不见了。

我要怎么处理呢,位图是动态选择加载进来的,要怎样才能Invalidate时对控件上的位图没影响,也就是能看见
...全文
235 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-03-25
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
wangjian8855 2012-10-25
  • 打赏
  • 举报
回复
To VisualEleven
现在可以在Picture控件位图使用橡皮筋类圈矩形了。 但是新的问题出来了,每次鼠标点下画矩形的时候,图片都都要闪烁一下,这是什么情况啊
傻X 2012-10-25
  • 打赏
  • 举报
回复
onbtbOpenBmp()放到WM_PAINT消息中OnPaint函数中不就可以了么?

自己加控制,啥时候需要OnPaint的时候调用
Eleven 2012-10-24
  • 打赏
  • 举报
回复
重写CStatic控件,OnPaint函数中StretchBlt()贴图,这样在Picture贴图比较好

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧