J
Hallo.
STM_SETIMAGE ist für Statics, das sind Steuerelemente, die nur Text oder Bitmaps anzeigen, für Beschriftungen. Man kann sie aber nicht anklicken!
Dir scheint nicht klar zu sein, was BS_OWNERDRAW bedeutet. Ein Ownerdraw Button zeichnet nichts, deshalb siehst Du auch nichts. Er sendet nur eine WM_DRAWITEM Nachricht an sein Elternfenster. Das übernimmt die Darstellung des Buttons. Anders ausgedrückt: Du mußt den Button selbst zeichnen, Bild und Rahmen, wie Jim schon sagte.
Beispiel, nicht unter Windows CE getestet:
HBITMAP hBmp = LoadImage(hInst, MAKEINTRESOURCE(IDB_BKGND2), IMAGE_BITMAP, 16, 16, LR_LOADMAP3DCOLORS);
...
void DrawButton(UINT idCtl, LPDRAWITEMSTRUCT di)
{
RECT rc;
if ((di->itemAction & ODA_DRAWENTIRE) || (di->itemAction & ODA_SELECT)) {
GetClientRect(di->hwndItem, &rc);
DrawFrameControl(di->hDC, &rc, DFC_BUTTON,
((di->itemState & ODS_SELECTED) ? DFCS_PUSHED : 0) | DFCS_BUTTONPUSH | DFCS_ADJUSTRECT);
if (di->itemState & ODS_SELECTED) {
rc.top++; rc.left++;
}
DrawState(di->hDC, NULL, NULL, (DWORD)hBmp, 0L, rc.top, rc.left, 0, 0, DST_BITMAP);
}
}
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg) {
case WM_DRAWITEM:
DrawButton((UINT)wParam, (LPDRAWITEMSTRUCT)lParam);
return 0;
case WM_COMMAND:
...
}