Bitmapa - zaznaczanie menu

0

Cześć, mam sobie menu kontekstowe. Chcę, żeby przy zaznaczaniu menu (menu check) pojawiała się moja bitmapa. Jest to normalne zachowanie WinApi i MFC.
Więc napisałem sobie coś takiego:


HBITMAP hbmpCheck = LoadBitmap(NULL, MAKEINTRESOURCE(IDB_MY_CHECK));
HBITMAP hbmpUncheck = LoadBitmap(NULL, MAKEINTRESOURCE(IDB_MY_UNCHECK));

pContextMenu->AppendMenu(MF_STRING, MENU_CMD_WORK, "Blabla");
SetMenuItemBitmaps(pContextMenu->GetSafeHmenu(), 0, MF_BYPOSITION, hbmpCheck, hbmpUncheck);

pContextMenu->CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED);

Efektem tego kodu jest, że element jest zaznaczony, ale standardowym ptaszkiem. Próbowałem też bezpośrednio z MFC (za pomocą CBitmap), ale efekty są te same. LoadBitmap kończy się powodzeniem. Generalnie wszystko kończy się powodzeniem i hbmpCheck i hbmpUncheck faktycznie są wypełnione poprawnymi wartościami (wiem to, ponieważ są != NULL, są różne niż początkowe wartości, a GetLastError zwraca 0)

Czemu mi to nie chce zadziałać? Czy są jakieś wymagane magiczne parametry, jakie taka bitmapa musi spełnić? Próbowałem z różnymi wariantami, ale niczego nie uzyskałem.

0
SetMenuItemBitmaps(pContextMenu->GetSafeHmenu(), 0, MF_BYPOSITION, hbmpCheck, hbmpUncheck);

Może „position” wcale nie jest 0?
Daj MF_BYCOMMAND i MENU_CMD_WORK w miejsce zera.

0

Też tak próbowałem. Poza tym, gdyby position nie było 0, to CheckMenuItem by nie zadziałało.

0

Z tego co można wyczytać w helpie to powinna być monochromatyczna inaczej wynik może być niepożądany (ale tu chyba mają na myśli nieprawidłowe wyświetlanie a nie jego brak) poza tym nic nie ma.

0

Monochromatyczna też nie daje rady. Nikt nie ma jeszcze jakiegoś pomysłu?

0

daj jakiś większy kawałek, który można skompilować... (byle nie za duży, okno i menu i nic więcej)

0

Zrobiłem test i u mnie na początku nie działało ale okazało się że w ogóle nie działa takie ładowanie bitmap:

    HBITMAP hbmpCheck = LoadBitmap(NULL, MAKEINTRESOURCE(IDB_MY_CHECK));
    HBITMAP hbmpUncheck = LoadBitmap(NULL, MAKEINTRESOURCE(IDB_MY_UNCHECK));

trzeba:

    HBITMAP hbmpCheck = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_MY_CHECK));
    HBITMAP hbmpUncheck = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_MY_UNCHECK));

Ponad to masz błąd w kolejności parametrów powinno być:

SetMenuItemBitmaps(pContextMenu->GetSafeHmenu(), 0, MF_BYPOSITION, hbmpUncheck, hbmpCheck);

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0