- HOME
- Post in | c/c++/winapi
- Post at | 2012. 12. 13. 10:25 | by 밀크빵.
- View comment
[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);
'c/c++ > winapi' 카테고리의 다른 글
활성화된 화면 캡쳐 ScreenCapture (0) | 2013.02.15 |
---|---|
[winapi] 파일 선택 다이얼로그 띄우기 (0) | 2012.12.17 |
HINSTANCE HWND 차이 (0) | 2012.11.26 |
메시지 박스 최상위로 뜨게 (0) | 2012.11.21 |
[WINAPI] 콘솔 창 띄우고 싶을 때 (0) | 2012.10.18 |