簡體   English   中英

win32圖片控件停止重繪

[英]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的回答。 問題是這樣的:

  1. 使用StretchBlt之后,您需要執行SendMessage STM_SETIMAGE
  2. 對於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。

通常,所有繪制都發生在WM_PAINT處理程序中。

我建議在需要繪制第二個位圖並使圖片控件的矩形無效時設置(全局)變量。

WM_PAINT處理程序中檢查變量,並在那里進行繪制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM