我有一个自定义控件,它拥有一个编辑框并将其四处移动等。编辑框通常使用如下代码进行修改:
edit.MoveWindow( &rc );
edit.SetWindowText( text );
edit.SetLimitText( N );
edit.ShowWindow(SW_SHOW);
edit.SetFocus();
edit.SetSel(0, CB_ERR);
RECT rc 在自定义控件的本地坐标中,编辑是用自定义控件作为父控件创建的。我什至不确定这 是否绝对是问题所在,但是当触发此代码时,有时它很好而且很流畅,有时我的整个桌面似乎在闪烁,就像正在重绘一样。我看不到我在任何地方显式调用 Invalidate(Rect)。
有什么想法吗?
最佳答案
它不会是您向我们展示的任何代码。整个桌面闪存几乎总是在调用 InvalidateRect(NULL,...)
的代码中的某处,因此请继续挖掘。
这些调用中的几个将导致消息被发送到编辑的父窗口,很可能在处理该消息时发生了 InvalidateRect。
如果我敢打赌,我会打赌 SetFocus() 调用会触发重绘。
关于c++ - 单个 MFC/Win32 控件似乎让我的整个桌面重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2318613/