Хорошо, я хочу добавить изображение к кнопке ВМЕСТЕ С ТЕКСТОМ не делая кнопку в моем файле RC. Это вообще возможно, или я НЕОБХОДИМОСТЬ использовать RC-файл, чтобы кнопка была в состоянии вставить в нее изображение? Мое изображение #define
d в «resource.h», а изображение объявлено в «resources.rc». И main.cpp, и resources.rc содержат заголовок resource.h. Я действительно не хочу делать кнопки, используя ресурсы, но если это
единственный способ сделать кнопку с изображением А ТАКЖЕ текст, тогда я сделаю это. Все, что мне нужно знать, это как вставить изображение в кнопку в WinAPI.
ОБНОВИТЬ:
Добавьте файл манифеста в ваше приложение, файл манифеста должен быть назван YourApp.exe.manifest
Добавьте это в свой файл манифеста (подробнее о файле манифеста здесь 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>
Свяжите вашу заявку с ComCtl32.lib
Добавьте манифест в файл ресурсов приложения CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
Вызов InitCommonControls()
в начале WinMain
КОНЕЦ ОБНОВЛЕНИЯ
Пример кода для создания кнопки (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)));
Других решений пока нет …