MFC showwindow 问题

xiuhao1011 2012-12-05 07:36:48
在对话框中显示一幅位图,在位图上每个一段时间在指定位置描点(OnPaint)。但是我对对话框设置了隐藏/显示功能,每当对话框隐藏之后再显示,已经瞄过的点会消失,应该怎么办才能使隐藏之后的对话框上的点不消失啊???谢谢!
...全文
197 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤客天涯 2012-12-06
  • 打赏
  • 举报
回复
用双缓冲,你所有描点只是在内存CDC中处理,OnPaint()中,你把内存CDC的图贴到你设备DC上来
孤客天涯 2012-12-06
  • 打赏
  • 举报
回复
你画图代码放OnPaint(),或OnDraw()中,窗口重绘时会调用OnPaint()
xiuhao1011 2012-12-06
  • 打赏
  • 举报
回复
自己顶,顶顶顶!!!!!!!
xiuhao1011 2012-12-06
  • 打赏
  • 举报
回复
靠,成功了。改为全局dc就可以了。
schlafenhamster 2012-12-06
  • 打赏
  • 举报
回复
在对话框中画控件。 首先要 要 对话框 本身 画完。 然后 叫 控件 客户区 有效 (invalidate) 取控件的 DC 和 rect 画。。。
孤客天涯 2012-12-06
  • 打赏
  • 举报
回复
如果你是在一个对话框上放一个位图控件,在控件上绘图这就不一样了,你最好控件由一个CWnd派生一个类,比如class CWndEx : public Cwnd,然后在CWndEx 中的OnPaint()中绘图,不要在CBMPDlg中的OnPaint()中绘图
xiuhao1011 2012-12-06
  • 打赏
  • 举报
回复
引用 9 楼 jason_wentzel 的回复:
CDC *m_pMemDC; void CBMPDlg::OnPaint() { CPaintDC dc(this); // 此处加你的画图代码 // 你的画图操作,只对m_pMemDC操作, dc.BitBlt(0,0,360,180,m_pMemDC,0,0,SRCCOPY);然后从m_pMemDC中贴到dc中,此处的dc才是你的设备dc
我晕说不清楚了。楼上的dc是对话框的,但是我要在picture控件的位图上绘图,需要用 CDC *cdc=m_BMP.GetDC(); 应该就是变量的问题。但是我不知道怎么改成全局的。晕
孤客天涯 2012-12-06
  • 打赏
  • 举报
回复
CDC *m_pMemDC; void CBMPDlg::OnPaint() { CPaintDC dc(this); // 此处加你的画图代码 // 你的画图操作,只对m_pMemDC操作, dc.BitBlt(0,0,360,180,m_pMemDC,0,0,SRCCOPY);然后从m_pMemDC中贴到dc中,此处的dc才是你的设备dc
xiuhao1011 2012-12-06
  • 打赏
  • 举报
回复
引用 7 楼 jason_wentzel 的回复:
void CBMPDlg::OnPaint() { CPaintDC dc(this); CBitmap bitmap; CDC dcCompatible;//你这是一个临时变量呀 bitmap.LoadBitmap(IDB_BMP); CDC *cdc=m_BMP.GetDC(); dcCompatible.CreateCo……
我知道,原理是这样,我试过用全局变量,但是效果还是不对,可能是下面这一句不对? cdc->BitBlt(0,0,360,180,&dcCompatible,0,0,SRCCOPY);你这只是从临时DC中把图贴去???? 什么叫临时把DC图贴去 什么叫临时
孤客天涯 2012-12-06
  • 打赏
  • 举报
回复
void CBMPDlg::OnPaint() { CPaintDC dc(this); CBitmap bitmap; CDC dcCompatible;//你这是一个临时变量呀 bitmap.LoadBitmap(IDB_BMP); CDC *cdc=m_BMP.GetDC(); dcCompatible.CreateCompatibleDC(cdc); dcCompatible.SelectObject(&bitmap); dcCompatible.SetPixel(i,j,RGB(255,0,0)); cdc->BitBlt(0,0,360,180,&dcCompatible,0,0,SRCCOPY);你这只是从临时DC中把图贴过去
我才是心翼 2012-12-06
  • 打赏
  • 举报
回复
OnPrepareDC处理下?
xiuhao1011 2012-12-06
  • 打赏
  • 举报
回复
引用 3 楼 jason_wentzel 的回复:
你画图代码放OnPaint(),或OnDraw()中,窗口重绘时会调用OnPaint()
我用双缓存试过,不行,应该是我的代码有问题。帮忙看一下吧,应该怎么弄啊?这个描点的坐标是实时接收的。
  
void CBMPDlg::OnPaint() 
{
	CPaintDC dc(this);
        CBitmap bitmap;
	CDC dcCompatible;
	bitmap.LoadBitmap(IDB_BMP);
	CDC *cdc=m_BMP.GetDC();
	dcCompatible.CreateCompatibleDC(cdc);
	dcCompatible.SelectObject(&bitmap);
	dcCompatible.SetPixel(i,j,RGB(255,0,0));
	cdc->BitBlt(0,0,360,180,&dcCompatible,0,0,SRCCOPY);
	
这样弄的话,每次只显示一个点。晕,应该怎么改呀?
xiuhao1011 2012-12-05
  • 打赏
  • 举报
回复
上述是基于MFC创建的非模态对话框的显示与隐藏。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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