更改按钮的样式C win32

如何解决更改按钮的样式C win32

我的程序需要现代风格。认样式类似于Windows Vista,我想要像Windows 10这样的现代样式!请帮忙 :(( 在python中,我可以使用tkinter轻松解决此问题,仅需要“ from tkinter.ttk import *”即可获得现代风格的小部件,但在C中,我无法解决此问题,我很久没有解决此问题的解决方案,但是我的英语级别对我没有帮助,我真的需要帮助。 image of i want

这是我的示例代码

#include <windows.h>
#define ID_BTNHI 0

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WParaM wParam,LParaM lParam);

WNDCLASSEX class_;

int WINAPI WinMain(HINSTANCE hInstanciaAct,HINSTANCE hInstanciaPrev,LPSTR IpCmdLine,int iCmdshow){
    
    ShowWindow(GetConsoleWindow(),SW_HIDE);
    
    HWND hWnd;
    MSG msg;
    
    class_.cbSize = sizeof(WNDCLASSEX);
    class_.cbWndExtra = 0;
    class_.cbClsExtra = 0;
    class_.style = CS_HREDRAW|CS_VREDRAW;
    class_.lpfnWndProc = WndProc;
    class_.hInstance = hInstanciaAct;
    class_.hIcon = LoadImage(NULL,"icoff.ico",IMAGE_ICON,LR_DEFAULTSIZE | LR_LOADFROMFILE);
    class_.hIconSm = LoadImage(NULL,LR_DEFAULTSIZE | LR_LOADFROMFILE);
    class_.hCursor = LoadCursor(NULL,IDC_ARROW);
    class_.lpszClassName = "MYCLASS";
    class_.lpszMenuName = NULL;
    class_.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
    
    if(!RegisterClassEx(&class_)){
        MessageBox(NULL,"NON","ERROR",MB_ICONERROR);
        return EXIT_FAILURE;
    }
    
    hWnd = CreateWindowEx(0,"MYCLASS","Folder Open",WS_OVERLAPPED | WS_MINIMIZEBox | WS_SYSMENU,CW_USEDEFAULT,340,140,HWND_DESKTOP,NULL,hInstanciaAct,NULL);
    if(hWnd == NULL){
        MessageBox(NULL,"NON2",MB_ICONERROR);
        return EXIT_FAILURE;
    }
    
    ShowWindow(hWnd,iCmdshow);
    UpdateWindow(hWnd);
    
    while(GetMessage(&msg,0) > 0){
        TranslateMessage(&msg);
        dispatchMessage(&msg);
    }
    
    return msg.wParam;
}

HWND hBtn;

LRESULT CALLBACK WndProc(HWND hWnd,LParaM lParam){
    switch(msg){
        case WM_CREATE:{
            hBtn = CreateWindow("BUTTON","Open Folder",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,82.5,48,175,22.5,hWnd,(HMENU)ID_BTNHI,GetModuleHandle(NULL),NULL);
            break;
        }
        case WM_COMMAND:{
            switch(LOWORD(wParam)){
                case ID_BTNHI:{
                    system("start .");
                    break;
                }
            }
            break;
        }
        case WM_DESTROY:{
            PostQuitMessage(0);
            break;
        }
        default:{
            return DefWindowProc(hWnd,msg,wParam,lParam);
        }
        
    }
    return 0;

}

解决方法

您有两种方法来修改按钮样式,这两种方法都需要enable the visual style

如果使用的是Microsoft Visual C ++ 2005或更高版本,则可以将以下编译器指令添加到源代码中,而不必手动创建清单。为了便于阅读,该指令在此处分为几行。

因此,您可以在YES (/MANIFEST)中选择Properties->Linker->Manifest->Generate Manifest并添加以下编译器指令:

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

此外,您可以在Properties->Manifest Tool->Input and Out->Additional Manifest Files

中添加清单文件。

enter image description here

清单文件的内容如下:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application>
      <!--The ID below indicates app support for Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
    </application>
  </compatibility>
  <dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
  </dependency>
</assembly>

这两种方法都对我有用:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?