[winapi]OWNER DRAW로 여러 버튼 그려주기

버튼 선택 후 클릭 상태 유지 &  다른 버튼 클릭 시 버튼 다시 그려줌 

InvalidateRect()는 WM_PAINT 뿐만 아니라 WM_DRAWITEM도 호출한당




case WM_DRAWITEM:

lpdis = (LPDRAWITEMSTRUCT)lParam;

memDC=CreateCompatibleDC(lpdis->hDC);


switch(lpdis->CtlID)

{

case IDC_BUTTON1:

if(lpdis->itemState & ODS_SELECTED || nDownTab == 1)

SelectObject(memDC, hBitmapDown[0]);

else

SelectObject(memDC, hBitmap[0]);

break;


case IDC_BUTTON2:

if(lpdis->itemState & ODS_SELECTED || nDownTab == 2)

SelectObject(memDC, hBitmapDown[1]);

else

SelectObject(memDC, hBitmap[1]);

break;

}

BitBlt(lpdis->hDC,0,0,150,140,memDC, 0,0,SRCCOPY);

DeleteDC(memDC);

break;




버튼 클릭 시 설정 해주는 부분

case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BUTTON1:
// 다이얼로그 생성
InvalidateRect( hDlg, &rt, false ); 
nDownTab = 1;
break;

case IDC_BUTTON2:
// 다이얼로그 생성
InvalidateRect(hDlg,&rt, false ); 
if(nDownTab == 2)
break;
break;
}
break;

다이얼 로그 초기화 부분에서 버튼 크기의 RECT 설정 후 
버튼 누를때마다 버튼 부분 다시 그려줌 

SetRect(&rt,0,35,120,300);