2013-01-03 2 views
0

목표는 메모리에 비트 맵을 생성하고 핸들을 BM_SETIMAGE 메시지 (버튼의 비트 맵을 설정하는 메시지)의 매개 변수로 사용하는 것입니다.비트 맵을 메모리에 만들고 사용하십시오.

다음은 내 코드입니다 :

........ 

     HDC hdc = GetDC(hwnd); 
     HDC memDC = CreateCompatibleDC(hdc); 
     HBITMAP hMemBmp = CreateCompatibleBitmap(hdc, 100, 100); 
     HBITMAP hOldBmp = (HBITMAP)SelectObject(memDC, hMemBmp); 
     Rectangle(memDC, 0, 0, 100, 100); 

     HBRUSH brush = CreateSolidBrush(RGB(0xff, 0xff, 0x00)); 

     RECT rc; 
     rc.left = 0; 
     rc.top = 0; 
     rc.right = 100; 
     rc.bottom = 100; 
     FillRect(memDC, &rc, brush); 

     SendMessage(GetDlgItem(hDlg, IDC_SET_START_PAGE_BG), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hMemBmp); 

........ 

하지만 내 버튼을, 난 그냥있어 검은 색을 작동하지 않습니다.

질문 :

  1. FillRect(memDC, &rc, brush)이 hMemBmp의 내용을 수정할 수 있습니까? 그렇지 않은 경우이 두 객체에 대해 SelectObject(memDC, hMemBmp)이 수행 한 작업은 무엇입니까?

  2. CreateCompatibleBitmap 대신 CreateBitmap을 사용해야합니까?

답변

2

메시지를 보내기 전에 DC로 이전 비트 맵을 다시 선택해야합니다. According to MSDN 비트 맵은 한 번에 하나의 DC로만 선택할 수 있습니다.

+0

감사합니다. 작동합니다. SelectObject (memDC, hOldBmp) 다음에 hMcBmp가 hdc로 선택되고 hOldBmp가 memDC로 선택됩니다. 그렇습니까? – user565739

+2

@ user565739 : 아니요, 아무도 'hdc'에 아무것도 선택하지 않습니다. 그 라인'hMemBmp'가 어떤 DC와도 분리되어있을 것이고 내부에 이미지가있을 것입니다. 정확히 BM_SETIMAGE가 기대하는 것입니다, 당신의 이미지를 담고있는 연결되지 않은 비트 맵입니다. –

관련 문제