有人能告诉我,当使用STM_SETIMAGE消息更改位图后,静态控件不使其区域失效是否正常吗?
我使用带有SS_BITMAP样式的静态控件,并使用以下代码设置其图片。
如果我不调用InvalidateRect,静态控件就不会重绘。这是STM_SETIMAGE的正常行为吗,还是我做错了什么?MSDN文档没有提到需要在STM_SETIMAGE之后调用InvalidateRect,而且这很奇怪,例如在调用SetWindowText之后,你不需要调用InvalidateRect。这让我觉得我的代码可能有问题。
更新:
这是在我的 .rc 文件中定义控件的方式。
“NOT WS_VISIBLE”标志不是问题,我稍后使用“ShowWindow(SW_SHOW);”使控件可见。
我使用带有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);”使控件可见。