Страницы

Поиск по вопросам

воскресенье, 2 июня 2019 г.

Использование “красивых” стилей элементов окна

Пытаюсь в окне сделать кнопку.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HFONT hFont; HWND hButton; switch(message) { case WM_CREATE: hButton = CreateWindow("button", "Press me!", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 5, 5, 100, 100, hWnd, (HMENU)(1), (HINSTANCE)GetWindowLong(hWnd, -6), NULL); hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); SendMessage(hButton, WM_SETFONT, (WPARAM)hFont, 1); return 0 ; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, message, wParam, lParam) ; }
Получается такая:

А как сделать кнопку, по стилю как в остальных приложениях (такую, например: ). Система Windows 7, компилятор gcc.exe (tdm64-1) 5.1.0.


Ответ

Действительно, как сказал Abyx, надо было добавить манифест (я надеялся, что есть путь проще). В итоге порядок действий:
Создать файл Application.manifest (например в директории с main.c):
Just button. Создать файл ресурсов resources.rc в той же директории, что и манифест, в которой будет одна строка:
1 24 "Application.manifest" Далее нужно скомпилировать файл ресурсов (выполнить команду в командной строке):
windres resources.rc -o resources.o Нужно добавить некоторый код в main.cpp
#define _WIN32_WINNT 0x0600 //для запуска нужна система Vista или новее #include #include int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(INITCOMMONCONTROLSEX); icex.dwICC = ICC_STANDARD_CLASSES; InitCommonControlsEx(&icex); /* Далее код создания окна и все остальное */ } Ну и теперь нужно непосредственно скомпилировать программу (естественно надо не забыть про библиотеку):
g++ -o program.exe main.cpp resources.o -lcomctl32 -mwindows

Комментариев нет:

Отправить комментарий