Ikonka "checked" w menu (winapi).
Ostatnio zmodyfikowano 2015-05-14 20:01
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: 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 #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ź. |
|
« 1 » |