如何解决更改按钮的样式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
清单文件的内容如下:
<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>
这两种方法都对我有用:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。