Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Ikonka "checked" w menu (winapi).

Ostatnio zmodyfikowano 2015-05-14 20:01
Autor Wiadomość
uzytkownik17
Temat założony przez niniejszego użytkownika
Ikonka "checked" w menu (winapi).
» 2015-05-14 20:01:45
Witam!

Czy ktoś może mi podać najprostszy sposób, jak znaczek "checked" zastąpić w menu przez wypełnioną elipsę w wybranym kolorze? Na portalu znalazłem opis, jak umieścić obrazek z pliku, a ja chciałbym wstawić znacznie prostszy rysunek. Tyle że nie wiem, jak to zrobić. Próbuję sztuczek z funkcją CreateCompatibleBitmap, a potem SetMenuItemBitmaps, ale u mnie to nie działa - obrazek jest cały czas czarny (z drobnymi "dziurawymi" prześwitami). Kod jest następujący:

C/C++
HWND okn = GetDesktopWindow();
HDC dco = GetDC( okn );
HDC dcz = CreateCompatibleDC( dco );
SIZE rzm = { GetSystemMetrics( SM_CXMENUCHECK ), GetSystemMetrics( SM_CYMENUCHECK ) };
HBITMAP hbm = CreateCompatibleBitmap( dcz, rzm.cx, rzm.cy );
HBITMAP bmz =( HBITMAP ) SelectObject( dcz, hbm );
PatBlt( dcz, 0, 0, rzm.cx, rzm.cy, WHITENESS );
HBRUSH pdl =( HBRUSH ) SelectObject( dcz, GetStockObject( NULL_BRUSH ) );
SelectObject( dcz, GetStockObject( DC_BRUSH ) ); SelectObject( dcz, GetStockObject( DC_PEN ) );
SetDCBrushColor( dcz, RBG( 0, 0, 255 ) ); SetDCPenColor( dcz, RBG( 0, 0, 255 ) );
Ellipse( dcz, 0, 0, rzm.cx, rzm.cy );
Ellipse( dcz, 2, 2, rzm.cx - 2, rzm.cy - 2 ); SelectObject( dcz, pdl );
SelectObject( dcz, bmz ); DeleteDC( dcz ); ReleaseDC( okn, dco );
SetMenuItemBitmaps( mnu_t,( 30 * M_MENU_T + 25 ), MF_BYCOMMAND, hbm, hbm );

Używam Dev-C++ pod Windows7. Na początku pliku musiałem umieścić dyrektywy

C/C++
#define NIIF_USER 0x00000004
#define _WIN32_IE 0x0600
#define _WIN32_WINNT 0x0500

w przeciwnym razie kompilator nie zna funkcji SetDCBrushColor i SetDCPenColor ani makr DC_BRUSH i DC_PEN.

Będę wdzięczny za pomoc, bo już nie wiem, co jeszcze mógłbym zrobić... Być może istnieje jakiś łatwiejszy sposób?

Z góry dziękuję za odpowiedź.
P-132269
« 1 »
  Strona 1 z 1