Страницы

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

пятница, 13 марта 2020 г.

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

#cpp #winapi #mingw


Пытаюсь в окне сделать кнопку.

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.
    


Ответы

Ответ 1



Действительно, как сказал 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

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

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