一个 MFC/Win32 控件似乎让我的整个桌面重绘

Posted

技术标签:

【中文标题】一个 MFC/Win32 控件似乎让我的整个桌面重绘【英文标题】:A single MFC/Win32 control seems to be making my whole desktop repaint 【发布时间】:2010-02-23 13:57:11 【问题描述】:

我有一个自定义控件,它拥有一个编辑框并可以移动它等等。编辑框通常使用如下代码进行修改:

edit.MoveWindow( &rc );
edit.SetWindowText( text );
edit.SetLimitText( N );
edit.ShowWindow(SW_SHOW);
edit.SetFocus();
edit.SetSel(0, CB_ERR);

RECT rc 在自定义控件的本地坐标中,编辑是使用自定义控件作为父控件创建的。我什至不确定这 是不是 绝对是问题,但是当触发此代码时,有时它很流畅,有时我的整个桌面似乎在闪烁,就像它正在重绘一样。我看不到我在任何地方都明确调用 Invalidate(Rect)。

有什么想法吗?

【问题讨论】:

如果您在应用程序中注释掉该代码,桌面还会闪烁吗? 'wodge' 是一个很酷的词,我将尝试将它融入我的日常词汇:) 【参考方案1】:

它不会是您向我们展示的任何代码。整个桌面闪存几乎总是在您的代码中调用InvalidateRect(NULL,...) 的某个位置,所以请继续挖掘。

其中几个调用将导致消息被发送到编辑的父窗口,很可能在处理该消息时发生 InvalidateRect。

如果我是一名赌徒,我会押注 SetFocus() 调用是触发重绘的调用。

【讨论】:

以上是关于一个 MFC/Win32 控件似乎让我的整个桌面重绘的主要内容,如果未能解决你的问题,请参考以下文章

ATL CLR MFC Win32 常规 的区别

无法理解普通 c++ 与 vc++、win32 编程、mfc、win32 api、CLI 之间的关系 [关闭]

用于 WPF 导航的窗口、页面和用户控件?

MFC:Win32-Dll及MFC-Dll编写调用

Win32:一个窗口在其整个生命周期中是不是具有相同的 HDC?

在 Win32 中子类化 MonthCal 控件