谁能告诉我在使用 STM_SETIMAGE 消息更改位图后静态控件不使其区域无效是否正常?
我用的是一个SS_BITMAP风格的静态控件,我用下面的代码设置了它的图片
HBITMAP DestBmp;
// Paint on DestBmp...
HBITMAP hOldBmp = (HBITMAP) ::SendMessage(hStatic, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) DestBmp);
if (hOldBmp)
DeleteObject(hOldBmp);
// *** Why do I need this? ***
::InvalidateRect(hStatic, NULL, FALSE);
如果我不调用 InvalidateRect,则静态控件不会重新绘制自身。这是 STM_SETIMAGE 的正常行为,还是我做错了什么?MSDN上的文档没有提到需要在 STM_SETIMAGE 之后调用 InvalidateRect 的任何内容,而且这很奇怪,例如,您不需要在 SetWindowText 之后调用 InvalidateRect。这让我觉得我的代码可能有问题。
更新
这就是在我的 .rc 文件中定义控件的方式
CONTROL "",IDC_IMAGE_PREVIEW,"Static",SS_BITMAP | NOT WS_VISIBLE,29,293,15,13
NOT WS_VISIBLE
标志不是问题,稍后我使控件可见ShowWindow(SW_SHOW);
。