您好,我這幾天一直在尋找如何避免控制元件本身在 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,但我不知道該怎么做,如果我弄明白了會在這里發布。
uj5u.com熱心網友回復:
您可以在對話框資源中設定樣式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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/445348.html
下一篇:為什么這個回圈會運行?
