一个 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 控件似乎让我的整个桌面重绘的主要内容,如果未能解决你的问题,请参考以下文章
无法理解普通 c++ 与 vc++、win32 编程、mfc、win32 api、CLI 之间的关系 [关闭]