Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.238.118.192] |
|
Сообщ.
#1
,
|
|
|
Видел вот это, но там жесть какая-то. У меня текст всей программы чуть ли не меньше, чем код создания этих менюшек.
Пример картинки, которую хотелось бы вставить в пункт меню приложил. Могу конвертировать её в ico с прозрачностью или bmp. Пробовал просто вот так, но с прозрачными не работает: m_Menu.SetMenuItemBitmaps(ID_MENU1, MF_BYCOMMAND, /*CBitmap*/ &m_Bitmap1, NULL);//bmp так отображаются, но некрасиво, вокруг белая рамка... Пример картинки
|
Сообщ.
#2
,
|
|
|
Цитата yasli @ Могу конвертировать её в ico с прозрачностью или bmp. С альфой идут не bmp/ico, а png/gif. Пробовали смотреть в сторону этих форматов? Добавлено как пример с PNG |
Сообщ.
#3
,
|
|
|
Цитата yasli @ насколько я помню картинки автоматом приатачиваются в меню если они заданы в тулбаре, не? |
Сообщ.
#4
,
|
|
|
Цитата Cfon @ Цитата yasli @ насколько я помню картинки автоматом приатачиваются в меню если они заданы в тулбаре, не? А можно чуть подробнее? В каком тулбаре?.. |
Сообщ.
#5
,
|
|
|
ну панелька управления с кнопками, там картинки
|
Сообщ.
#6
,
|
|
|
У меня контекстное меню, создаю его программно, тулбара нет... И подозреваю, что в тулбаре тоже не было бы прозрачности.
m_Menu.CreatePopupMenu(); m_Menu.AppendMenu(MF_STRING , ID_MENU1, L"text"); Цитата VisualProg @ Там код нерабочий... как пример с PNG Гугл подсказал такой способ с иконками... Вроде, работает. Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::GdiplusStartup(&m_GDIplusToken, &gdiplusStartupInput, NULL); BITMAPV5HEADER bi; void *lpBits; ZeroMemory(&bi, sizeof(BITMAPV5HEADER)); bi.bV5Size = sizeof(BITMAPV5HEADER); bi.bV5Width = 16; bi.bV5Height = 16; bi.bV5Planes = 1; bi.bV5BitCount = 32; bi.bV5Compression = BI_BITFIELDS; bi.bV5RedMask = 0x00FF0000; bi.bV5GreenMask = 0x0000FF00; bi.bV5BlueMask = 0x000000FF; bi.bV5AlphaMask = 0xFF000000; HDC hDC = ::GetDC(NULL); HBITMAP hbm = CreateDIBSection(hDC, (BITMAPINFO *)&bi, DIB_RGB_COLORS, (void **)&lpBits, NULL, (DWORD)0); HDC hMemDC = CreateCompatibleDC(hDC); ::ReleaseDC(NULL, hDC); HBITMAP hOldb = (HBITMAP)SelectObject(hMemDC, hbm); PatBlt(hMemDC, 0, 0, 16, 16, WHITENESS); DWORD *lpdwPixel; lpdwPixel = (DWORD *)lpBits; DWORD x, y; for (x = 0; x < 16; x++) for (y = 0; y < 16; y++) { // Clear the alpha bits *lpdwPixel &= 0x00FFFFFF; // Set the alpha bits to 0x9F (semi-transparent) //*lpdwPixel |= 0x9F000000; lpdwPixel++; } DrawIconEx(hMemDC, 0, 0, AfxGetApp()->LoadIcon(IDR_GROUP), 16, 16, 0, NULL, DI_NORMAL); SelectObject(hMemDC, hOldb); Gdiplus::Bitmap TranspBitmap(16, 16, 16 * 4, PixelFormat32bppARGB, (BYTE*)lpBits); TranspBitmap.RotateFlip(Gdiplus::Rotate180FlipX); HBITMAP handle = NULL; TranspBitmap.GetHBITMAP(0, &handle); m_Bitmap1.Attach(handle); m_Menu.SetMenuItemBitmaps(ID_MENU1, MF_BYCOMMAND, &m_Bitmap1, NULL); DeleteDC(hMemDC); DeleteObject(hOldb); DeleteObject(hbm); Gdiplus::GdiplusShutdown(m_GDIplusToken);//чистку в деструкторе класса делаю |