c/c++/winapi
[winapi]OWNER DRAW로 여러 버튼 그려주기
밀크빵
2012. 12. 13. 10:25
버튼 선택 후 클릭 상태 유지 & 다른 버튼 클릭 시 버튼 다시 그려줌
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);