API :: WM_DRAWITEM 에서 컨트롤 이미지 처리, 롤 오버 버튼
루리
{
RECT rt[6]={{654,402,72,71},{540,478,75,27},{644,478,75,27},{419,507,99,42},{523,507,99,42},{626,507,99,42}};
LPDRAWITEMSTRUCT lpdis=(LPDRAWITEMSTRUCT)lParam;
HDC hMemDC=CreateCompatibleDC(lpdis-hDC), hBitDC=CreateCompatibleDC(lpdis-hDC);
HBITMAP hBit, hOldBit, hMemBit, hOldMemBit;
hMemBit=CreateCompatibleBitmap(lpdis-hDC, rt[(lpdis-CtlID%30000)-1].right, rt[(lpdis-CtlID%30000)-1].bottom);
hOldMemBit=(HBITMAP)SelectObject(hBitDC, hMemBit);
SetBkMode(hBitDC, TRANSPARENT);SetBkMode(hMemDC, TRANSPARENT);
FillRect(hBitDC, &rt[(lpdis-CtlID%30000)-1], GetSysColorBrush(COLOR_WINDOW));
if(lpdis-hwndItem == hButton[Login_Login] || lpdis-hwndItem == hButton[Login_EmailLost] || lpdis-hwndItem == hButton[Login_PasswdLost] || lpdis-hwndItem == hButton[Login_New] || lpdis-hwndItem == hButton[Login_HomePage] || lpdis-hwndItem == hButton[Login_Quit]) {
hBit=(HBITMAP)LoadImage(g_hInst, MAKEINTRESOURCE(201+((lpdis-CtlID%30000)-1)*10), IMAGE_BITMAP, rt[(lpdis-CtlID%30000)-1].right, rt[(lpdis-CtlID%30000)-1].bottom, NULL);
hOldBit=(HBITMAP)SelectObject(hMemDC, hBit);
TransparentBlt(hBitDC, 0, 0, rt[(lpdis-CtlID%30000)-1].right, rt[(lpdis-CtlID%30000)-1].bottom, hMemDC, 0, 0, rt[(lpdis-CtlID%30000)-1].right, rt[(lpdis-CtlID%30000)-1].bottom, RGB(255,255,255));
BitBlt(lpdis-hDC, 0, 0, rt[(lpdis-CtlID%30000)-1].right, rt[(lpdis-CtlID%30000)-1].bottom, hBitDC, 0, 0, SRCCOPY);
DeleteObject(SelectObject(hMemDC, hOldBit));
DeleteObject(SelectObject(hBitDC, hOldMemBit));
}
DeleteDC(hMemDC);
DeleteDC(hBitDC);}
//CreateWindow
RECT rt[6]={{654,402,72,71},{540,478,75,27},{644,478,75,27},{419,507,99,42},{523,507,99,42},{626,507,99,42}};
for(int i=IDB_WS_LOGIN_Login_normal,j=ID_Button_Login_Login;i=IDB_WS_LOGIN_Quit_normal&&j=ID_Button_Login_Quit;i+=10,j++) {
hButton[j-ID_Button_Login_Login]=CreateWindow(Lbutton, L, WS_CHILD | WS_VISIBLE | BS_BITMAP | BS_OWNERDRAW, rt[j-ID_Button_Login_Login].left, rt[j-ID_Button_Login_Login].top, rt[j-ID_Button_Login_Login].right, rt[j-ID_Button_Login_Login].bottom, hWnd, (HMENU)j, g_hInst, NULL);
//HBITMAP hBit=(HBITMAP)LoadImage(g_hInst, MAKEINTRESOURCE(i), IMAGE_BITMAP, rt[j-ID_Button_Login_Login].right, rt[j-ID_Button_Login_Login].bottom, NULL);
//SendMessage(hButton[j-ID_Button_Login_Login], BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBit);
SetClassLong(hButton[j-ID_Button_Login_Login], GCL_HCURSOR,(LONG)LoadCursor(NULL, MAKEINTRESOURCE(IDC_HAND)));
}
그림이 계속 깜빡입니다;;
ps. 마우스 롤 오버 버튼 구현방법좀;..