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

2025-02-26 07:41:12
推荐回答(5个)
回答1:

使用双缓冲绘图,将你的图形画到一个内存DC中,然后再贴到对话框DC中就可以了。

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

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

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

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

如果你要在其他操作时绘图,比如在按下一个按钮时,而不是在OnPaint函数里时,就要加上Invalidate()让窗口重绘。

回答2:

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);
然后绘制

回答3:

你这个问题跟和OnPaint无关,而是你应该把那些要变的变量放到头文件去作为全局变量.
这样OnPaint每次才会画出你想要的效果来.否则你要是定义局部变量每次绘制都一样的.

回答4:

小趴皮 现在厉害了啊 ↖(^ω^)↗

回答5:

把你的自定义函数里面的坐标换成相对窗口坐标看看,我记得有个全局函数是可以直接转换坐标的。找找看。