Как добавить изображение к кнопке в C ++ WinAPI (без MFC)?

Хорошо, я хочу добавить изображение к кнопке ВМЕСТЕ С ТЕКСТОМ не делая кнопку в моем файле RC. Это вообще возможно, или я НЕОБХОДИМОСТЬ использовать RC-файл, чтобы кнопка была в состоянии вставить в нее изображение? Мое изображение #defined в «resource.h», а изображение объявлено в «resources.rc». И main.cpp, и resources.rc содержат заголовок resource.h. Я действительно не хочу делать кнопки, используя ресурсы, но если это
единственный способ сделать кнопку с изображением А ТАКЖЕ текст, тогда я сделаю это. Все, что мне нужно знать, это как вставить изображение в кнопку в WinAPI.

0

Решение

ОБНОВИТЬ:

  1. Добавьте файл манифеста в ваше приложение, файл манифеста должен быть назван YourApp.exe.manifest

  2. Добавьте это в свой файл манифеста (подробнее о файле манифеста здесь http://msdn.microsoft.com/en-us/library/bb773175%28VS.85%29.aspx):

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
    version="1.0.0.0"processorArchitecture="*"name="CompanyName.ProductName.YourApplication"type="win32"/>
    <description>Your application description here.</description>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity
    type="win32"name="Microsoft.Windows.Common-Controls"version="6.0.0.0"processorArchitecture="*"publicKeyToken="6595b64144ccf1df"language="*"/>
    </dependentAssembly>
    </dependency>
    </assembly>
    
  3. Свяжите вашу заявку с ComCtl32.lib

  4. Добавьте манифест в файл ресурсов приложения CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"

  5. Вызов InitCommonControls() в начале WinMain

КОНЕЦ ОБНОВЛЕНИЯ

  1. Пример кода для создания кнопки (IMAGE + TEXT), подверженной утечке памяти из-за LoadBitmap:

    HWND hwnd_button = CreateWindowEx(
    0,
    "BUTTON", //ascii
    "Button text",
    WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    10,
    145,
    50,
    50,
    hwnd_parent,
    NULL,
    //GetModuleHandle(NULL)
    (HINSTANCE)GetWindowLong(hwnd_parent, GWL_HINSTANCE),
    NULL);
    
    SendMessage((HWND) m_hWndButton,
    (UINT) BM_SETIMAGE,
    (WPARAM) IMAGE_BITMAP,
    (LPARAM) LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)));
    
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]