gpt4 book ai didi

c++ - 如何避免控件在 CDialog 中闪烁(MFC C++)

转载 作者:行者123 更新时间:2023-12-05 05:44:57 24 4
gpt4 key购买 nike

你好我这几天一直在寻找如何避免控件本身在 CDialog 中闪烁。

我正在使用 CMemDC 并删除背景以使用 GDI+ 绘制一些基本形状

void CCustomDialog::OnPaint()
{
CPaintDC pDC(this);
CMemDC dc(&pDC);

Gdiplus::Graphics graphics(dc.GetSafeHdc());

CRect clip;
dc.GetClipBox(&clip);
dc.FillSolidRect(clip, GetSysColor(COLOR_WINDOW));

DefWindowProc(WM_PAINT, (WPARAM)dc->m_hDC, (LPARAM)0);
Gdiplus::Pen pen(Gdiplus::Color(150, 125, 255, 100), 5.0);
graphics.DrawEllipse(&pen, 200, 50+m_interator, 100, 100);
}

这个类继承自CDialog,然后它本身将作为其他对话框的基类来控制“主题”。

但是当我在鼠标移动事件上使窗口无效然后更新时

void CCustomDialog::OnMouseMove(UINT nFlags, CPoint point)
{
m_interator++;
Invalidate();
UpdateWindow();
CDialog::OnMouseMove(nFlags, point);
}

Ellipse 根本不会闪烁,但所有其他按钮、标签和编辑控件会闪烁。

我还没有找到任何方法来避免这种情况,而且我自己对 MFC 的了解还不够多,无法避免这种情况。

有什么想法吗?

我在想也许我可以将控件的 DC 设置为相同的 CMemDC,但我还不确定该怎么做,如果我弄清楚了会在这里发布。

最佳答案

您可以在对话框资源中设置样式WS_CLIPCHILDREN,例如:

IDD_STEP_DLG DIALOGEX 0, 0, 344, 215
// here:
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MAXIMIZEBOX | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Static",IDC_PREP_HISTOGRAM_PLACE,0,0,343,214,SS_NOTIFY | WS_TABSTOP
END

关于c++ - 如何避免控件在 CDialog 中闪烁(MFC C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71496512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com