Bitmapa - zaznaczanie menu

Bitmapa - zaznaczanie menu
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
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:

Kopiuj
 
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.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
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.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
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.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

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

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
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:

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

trzeba:

Kopiuj
	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ć:

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.