首先,我在对话框中加载了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提供的答案。 问题是:
这样的事情:
hbitmapglobal = (HBITMAP)CopyImage(hbitmap2, IMAGE_BITMAP, abs(width), abs(height), LR_COPYRETURNORG);
SendMessage(hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbitmapglobal);
CopyImage是制作HBITMAP副本的真正简单方法。考虑到这是一个样本,必须在某个时候释放hbitmapglobal。
答案 0 :(得分:0)
通常所有绘画都在WM_PAINT
处理程序中进行。
我建议在需要绘制第二个位图并使图片控件的矩形无效时设置(全局)变量。
检查WM_PAINT
处理程序中的变量并在那里进行绘画。