MFC中如何使用OnPaint保持窗口中的内容在移动时不变

我遇到的问题是这样的:我要用CDC类在对话框中不断地绘制一些图形,并在过程中保持对话框中的内容在移动时不变。当前对话框中的图形是不确定的,因此我想有没有什么拷屏函数能将当... 我遇到的问题是这样的:
我要用CDC类在对话框中不断地绘制一些图形,并在过程中保持对话框中的内容在移动时不变。
当前对话框中的图形是不确定的,因此我想有没有什么拷屏函数能将当前对话框的内容整个获取,并用OnPaint维护显示?

第一次用MFC,一些术语不了解,问题描述得通俗了些。
希望各位高手能给出大致的写法,本人第一次接触MFC。

void CDisplayDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
m_DispManager.Draw();
}
else
{
是不是在这里进行一些操作???

CDialog::OnPaint();
}
}

谢谢~~
请问“小趴皮”,双缓冲有什么需要注意的吗?我按照
http://hi.baidu.com/krispan/blog/item/44c59ee9d339153ab90e2d70.html
写的。但是对话框始终保持底色不变。这是为什么?

我的意思是说无论我绘制什么都没有显示,对话框始终是空的。
展开
 我来答
小趴皮
2009-02-14 · 超过34用户采纳过TA的回答
知道答主
回答量:123
采纳率:0%
帮助的人:0
展开全部
使用双缓冲绘图,将你的图形画到一个内存DC中,然后再贴到对话框DC中就可以了。

请上网搜一下双缓冲绘图的相关内容。

改变对话框颜色,使用其他颜色的画刷填充背景就行了啊。
用FillRect函数

你看的哪个列子有错误:
去掉DrawSomething()函数中的
Invalidate();

OnPaint是重绘函数,Invalidate()是发送重绘消息,在重绘函数里再发送重绘消息,下面的dc.BitBlt...就不执行了,相当于没有把内存DC的内容贴到对话框DC中,所以就什么也没有了。

如果你要在其他操作时绘图,比如在按下一个按钮时,而不是在OnPaint函数里时,就要加上Invalidate()让窗口重绘。
6908270270
2009-02-14 · TA获得超过3427个赞
知道小有建树答主
回答量:1988
采纳率:0%
帮助的人:699万
展开全部
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
m_DispManager.Draw();
}
else
{
是不是在这里进行一些操作???

CDialog::OnPaint();
}

全删了后直接在里面用
CPaintDC dc(this);
然后绘制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jill0908
2009-02-15 · TA获得超过487个赞
知道小有建树答主
回答量:1169
采纳率:0%
帮助的人:441万
展开全部
你这个问题跟和OnPaint无关,而是你应该把那些要变的变量放到头文件去作为全局变量.
这样OnPaint每次才会画出你想要的效果来.否则你要是定义局部变量每次绘制都一样的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魔高丈
2009-02-14 · TA获得超过9506个赞
知道大有可为答主
回答量:2066
采纳率:0%
帮助的人:3452万
展开全部
小趴皮 现在厉害了啊 ↖(^ω^)↗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
XOopsy
2009-02-14 · 超过35用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:95万
展开全部
把你的自定义函数里面的坐标换成相对窗口坐标看看,我记得有个全局函数是可以直接转换坐标的。找找看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式