【发布时间】:2014-06-02 16:35:12
【问题描述】:
首先,我在对话框中加载了一个带有 bitmap1 的图片控件:
SendMessage(hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadImage(NULL, sbitmap1.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
其次,在某个时候,我使用 StretchBlt 在图片控件中绘制了一个 bitmap2。
hdcImage = GetDC(hWnd)
hMemDC = CreateCompatibleDC( hdcImage );
hOldbm = (HBITMAP)SelectObject( hMemDC, hbitmap2 );
SetStretchBltMode( hdcImage, COLORONCOLOR);
StretchBlt( hdcImage, left, top, width, height, hMemDC, 0, 0, w, h, SRCCOPY );
SelectObject( hMemDC, hOldbm );
bitmap2 绘制成功,但在某些情况下(例如当我最小化对话框时)图片控件不再显示 bitmap2 而是显示 bitmap1。
我认为问题在于重绘事件。有没有办法停止重绘事件或更改此事件要绘制的位图?
编辑:
感谢@Mark 和@Edward 的回答。 问题是这样的:
- 使用 StretchBlt 后,您需要执行 SendMessage STM_SETIMAGE
- 对于 SendMessage STM_SETIMAGE,使用全局 HBITMAP(最好)
类似这样的:
hbitmapglobal = (HBITMAP)CopyImage(hbitmap2, IMAGE_BITMAP, abs(width), abs(height), LR_COPYRETURNORG);
SendMessage(hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbitmapglobal);
CopyImage 是制作 HBITMAP 副本的真正简单方法。考虑到这是一个示例,必须在某个时候释放 hbitmapglobal。
【问题讨论】:
-
是否有什么阻止您再次发送
STM_SETIMAGE?那应该可以解决它。