Я пробовал каждый источник заменить фон кнопки подклассом реализации.
Когда я меняю фон, я получаю квадратную форму и невозможно щелкнуть по ней. кто-нибудь может поделиться хорошим учебником или образцом кода?
во всяком случае, это мой код:
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
. - person Remy Lebeau   schedule 24.11.2013WM_DRAWITEM
будет отправлено в родительское окно кнопки, а не в окно кнопки. - person Remy Lebeau   schedule 25.11.2013