На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> А есть какой-нибудь простой способ вставить прозрачную картинку в меню?
    Видел вот это, но там жесть какая-то. У меня текст всей программы чуть ли не меньше, чем код создания этих менюшек.
    Пример картинки, которую хотелось бы вставить в пункт меню приложил. Могу конвертировать её в ico с прозрачностью или bmp.

    Пробовал просто вот так, но с прозрачными не работает:
    ExpandedWrap disabled
      m_Menu.SetMenuItemBitmaps(ID_MENU1, MF_BYCOMMAND, /*CBitmap*/ &m_Bitmap1, NULL);//bmp так отображаются, но некрасиво, вокруг белая рамка...

    Пример картинки
    Прикреплённая картинка
    Сообщение отредактировано: yasli -
      Цитата yasli @
      Могу конвертировать её в ico с прозрачностью или bmp.

      С альфой идут не bmp/ico, а png/gif. Пробовали смотреть в сторону этих форматов?

      Добавлено
      как пример с PNG
        Цитата yasli @

        насколько я помню картинки автоматом приатачиваются в меню если они заданы в тулбаре, не? :unsure:
          Цитата Cfon @
          Цитата yasli @

          насколько я помню картинки автоматом приатачиваются в меню если они заданы в тулбаре, не? :unsure:

          А можно чуть подробнее? В каком тулбаре?.. :huh:
            ну панелька управления с кнопками, там картинки :D
              У меня контекстное меню, создаю его программно, тулбара нет... И подозреваю, что в тулбаре тоже не было бы прозрачности.
              ExpandedWrap disabled
                m_Menu.CreatePopupMenu();
                m_Menu.AppendMenu(MF_STRING , ID_MENU1, L"text");


              Цитата VisualProg @
              как пример с PNG
              Там код нерабочий...


              Гугл подсказал такой способ с иконками... Вроде, работает.

              ExpandedWrap disabled
                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);//чистку в деструкторе класса делаю
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0388 ]   [ 17 queries used ]   [ Generated: 29.03.24, 15:49 GMT ]