[英]win32 picture control stop repainting
首先,我在對話框中加載了一個帶有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。
通常,所有繪制都發生在WM_PAINT
處理程序中。
我建議在需要繪制第二個位圖並使圖片控件的矩形無效時設置(全局)變量。
在WM_PAINT
處理程序中檢查變量,並在那里進行繪制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.