MFC에서는 LoadBitmaps로 하면 될 것 같은데 (해보진 않아서 모름)
API에서는 몇가지 방법이 있다.
첫번째 방법은 SendMessage
해당 버튼 윈도우로핸들로
SendMessage( hWnd, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hbmp); //hbmp = HBITMAP
를 하면 되는데, 문제는 이 경우...
EnableButtons을 하면 이미지가 요상하게 변한다.
이런 경우 WM_DRAWITEM에서 draw를 처리해주면 된다.
LRESULT CALLBACK wndproc( params)
{
switch(msg)
{
...
case WM_DRAWITEM:
DrawBtn(hWnd, wParam, lParam);
...
}
void DrawBtn(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
/* hwnd = 버튼의 핸들
wParam = 버튼의 ID
lParam = LPDRAWITEMSTRUCT */
LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)lParam;
hMemDC = CreateCompatibleDC( lpdis->hDC);
lpdis->itemState : 여기에 상태값이 있다. 나의 경우... DISABLE시에 다른 버튼을 올려야 하므로,
if( wParam == IDOK)
{
if( (lpdis->itemState & ODS_DISABLED) == ODS_DISABLED)
{
SelectObject( memDC, hDisableBmp); //이 HBITMAP들은 미리 로딩해 두었다.
}
else
{
SelectObject(memDC, hEnableBmp);
}
}
BitBlt(lpdis->hDC, ... );
//DC들 정리
}
댓글