구현의 서브 클래 싱으로 버튼의 배경을 바꾸기 위해 모든 소스를 시도했다.나는 그에게 배경을 바꿀 때 버튼의 기능을 잃는다.
배경을 바꿀 때 사각형 모양이 생기고 그것을 클릭 할 수 없습니다. 누군가가 좋은 자습서 나 코드 샘플을 공유 할 수 있습니까? 어쨌든
, 이 내 코드입니다 :
LRESULT CALLBACK DrawPushButton(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdcMem;
HBITMAP hbmMem;
HANDLE hnd;
PAINTSTRUCT ps;
HDC hdc;
int win_width=100;
int win_height=50;
switch(uMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
hdcMem = CreateCompatibleDC(hdc);
hbmMem = CreateCompatibleBitmap(hdc, win_width, win_height);
hnd = SelectObject(hdcMem, hbmMem);
BitBlt(hdc, 0, 0, win_width, win_height, hdcMem, 0, 0, SRCCOPY);
EndPaint(hwnd, &ps);
return 0;
break;
}
return CallWindowProc (OldWndProc, hwnd, uMsg, wParam, lParam);
}
편집 : 내가 버튼에 BS_OWNERDRAW 창 스타일을 추가 :
HWND hWndButton=CreateWindowEx(NULL,L"BUTTON",L"OK",WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON|BS_OWNERDRAW,50,220,100,24,hWnd,(HMENU)IDC_MAIN_BUTTON,GetModuleHandle(NULL),NULL);
그리고 난 콜백을 변경하지만, WM_DRAWITEM하지 않았다 전화 :
LRESULT CALLBACK DrawPushButton(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_DRAWITEM:
HDC hdc = GetDC(hwnd);
TextOut(hdc,0,0,L"itay",4);
break;
}
return 0;
}
사용자 정의 버튼을 그리려면, 당신은 그것에게'BS_OWNERDRAW' 창 스타일을 제공하고'WM_DRAWITEM' 메시지를 처리해야합니다. –
버튼을 칠할 때마다 * 만들고있는 DC 및 비트 맵을 삭제해야한다고 생각하지 않습니까? –
@RemyLebeau BS_OWNERDRAW를 추가했지만 프로그램을 디버깅 할 때 WM_DRAWITEM이 호출하지 않았습니다. 위의 내 의견을 참조하십시오. –