C 更改Win32 API中按钮的文本类型
我正在开发一个禁用Windows资源管理器的程序。我以前是用Python做的,但是当我用C构建它时,启动程序会更快 我希望按钮看起来优雅,像标题文本样式和字体。如何使按钮的文本看起来漂亮?我希望你能帮助我 我的代码:C 更改Win32 API中按钮的文本类型,c,user-interface,winapi,graphics,C,User Interface,Winapi,Graphics,我正在开发一个禁用Windows资源管理器的程序。我以前是用Python做的,但是当我用C构建它时,启动程序会更快 我希望按钮看起来优雅,像标题文本样式和字体。如何使按钮的文本看起来漂亮?我希望你能帮助我 我的代码: #include <windows.h> #define ID_BTNHI0 0 #define ID_BTNHI1 1 #define ID_BTNHI2 2 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM
#include <windows.h>
#define ID_BTNHI0 0
#define ID_BTNHI1 1
#define ID_BTNHI2 2
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, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
class_.hIconSm = LoadImage(NULL, "icoff.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
class_.hCursor = LoadCursor(NULL, IDC_ARROW);
class_.lpszClassName = "MICLASE";
class_.lpszMenuName = NULL;
class_.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
if(!RegisterClassEx(&class_)){
MessageBox(NULL, "NON", "ERROR", MB_ICONERROR);
return EXIT_FAILURE;
}
hWnd = CreateWindowEx(0, "MICLASE", "Windows Explorer Toggle", WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 340, 140, HWND_DESKTOP, NULL, hInstanciaAct, NULL);
if(hWnd == NULL){
MessageBox(NULL, "NON2", "ERROR", MB_ICONERROR);
return EXIT_FAILURE;
}
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0) > 0){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
HWND hBtn0;
HWND hBtn1;
HWND hBtn2;
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_CREATE:{
hBtn0 = CreateWindow("BUTTON", "Disable Windows Explorer", WS_VISIBLE | WS_CHILD | BS_FLAT, 82.5, 24.5, 175, 22.5, hWnd, (HMENU)ID_BTNHI0, GetModuleHandle(NULL), NULL);
//SetFocus(hBtn0);
hBtn1 = CreateWindow("BUTTON", "Enable Windows Explorer", WS_VISIBLE | WS_CHILD | BS_FLAT, 82.5, 24.5, 175, 22.5, hWnd, (HMENU)ID_BTNHI1, GetModuleHandle(NULL), NULL);
ShowWindow(hBtn1, SW_HIDE);
hBtn2 = CreateWindow("BUTTON", "Open Folder", WS_VISIBLE | WS_CHILD | BS_FLAT, 82.5, 48, 175, 22.5, hWnd, (HMENU)ID_BTNHI2, GetModuleHandle(NULL), NULL);
break;
}
case WM_COMMAND:{
switch(LOWORD(wParam)){
case ID_BTNHI0:{
system("TASKKILL /F /IM explorer.exe");
//clase.hIcon = LoadImage(NULL, "icoff.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
//clase.hIconSm = LoadImage(NULL, "icoff.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
ShowWindow(hBtn0, SW_HIDE);
ShowWindow(hBtn1, SW_SHOW);
//SetFocus(hBtn1);
break;
}
case ID_BTNHI1:{
system("start %SystemRoot%\\explorer.exe");
//clase.hIcon = LoadImage(NULL, "icon.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
//clase.hIconSm = LoadImage(NULL, "icon.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
ShowWindow(hBtn1, SW_HIDE);
ShowWindow(hBtn0, SW_SHOW);
//SetFocus(hBtn0);
break;
}
case ID_BTNHI2:{
system("start .");
//SetFocus(hBtn0);
break;
}
}
break;
}
case WM_DESTROY:{
PostQuitMessage(0);
break;
}
default:{
return DefWindowProc(hWnd, msg, wParam, lParam);
}
}
return 0;
}
#包括
#定义ID_BTNHI0
#定义ID_BTNHI1
#定义ID_BTNHI2 2
LRESULT回调WndProc(HWND HWND、UINT msg、WPARAM WPARAM、LPARAM LPARAM);
WNDCLASSEX类;
int WINAPI WinMain(HINSTANCE hInstanciaAct、HINSTANCE hInstanciaPrev、LPSTR IpCmdLine、int iCmdShow){
显示窗口(GetConsoleWindow(),SW_HIDE);
HWND-HWND;
味精;
类cbSize=sizeof(WNDCLASSEX);
类cbWndExtra=0;
类别cbClsExtra=0;
class_u.style=CS_HREDRAW | CS_VREDRAW;
类。lpfnWndProc=WndProc;
类.hInstance=hInstanciaAct;
class_uu.hIcon=LoadImage(NULL,“icoff.ico”,IMAGE_图标,0,0,LR_DEFAULTSIZE | LR_LOADFROMFILE);
class_uu.hIconSm=LoadImage(NULL,“icoff.ico”,IMAGE_图标,0,0,LR_DEFAULTSIZE | LR_LOADFROMFILE);
class.hCursor=LoadCursor(空,IDC箭头);
class.lpszClassName=“MICLASE”;
class.lpszMenuName=NULL;
class.hbrBackground=GetSysColorBrush(颜色窗口);
如果(!RegisterClassEx(&class))){
MessageBox(空,“非”,“错误”,MB_ICONERROR);
返回退出失败;
}
hWnd=CreateWindowEx(0,“MICLASE”,“Windows资源管理器切换”,WS|U重叠| WS|U最小化框| WS|U系统菜单,CW|U USEDEFAULT,CW|U USEDEFAULT,340,140,hWnd|U桌面,NULL,hinstanciact,NULL);
if(hWnd==NULL){
MessageBox(空,“非2”,“错误”,MB_ICONERROR);
返回退出失败;
}
显示窗口(hWnd、iCmdShow);
更新窗口(hWnd);
while(GetMessage(&msg,NULL,0,0)>0){
翻译信息(&msg);
发送消息(&msg);
}
返回msg.wParam;
}
HWND-hBtn0;
HWND-hBtn1;
HWND-hBtn2;
LRESULT回调WndProc(HWND HWND,UINT msg,WPARAM WPARAM,LPARAM LPARAM){
开关(msg){
案例WM_创建:{
hBtn0=CreateWindow(“按钮”,“禁用Windows资源管理器”,WS|U可见| WS|U子项| BS|U平面,82.5,24.5,175,22.5,hWnd,(HMENU)ID_BTNHI0,GetModuleHandle(NULL),NULL);
//SetFocus(hBtn0);
hBtn1=CreateWindow(“按钮”,“启用Windows资源管理器”,WS|u可见| WS|u子项| BS|u平面,82.5,24.5,175,22.5,hWnd,(HMENU)ID_BTNHI1,GetModuleHandle(NULL),NULL);
显示窗口(hBtn1,SW_隐藏);
hBtn2=CreateWindow(“按钮”,“打开文件夹”,WS|U可见| WS|U子项| BS|U平面,82.5,48,175,22.5,hWnd,(HMENU)ID_BTNHI2,GetModuleHandle(NULL),NULL);
打破
}
case WM_命令:{
开关(LOWORD(wParam)){
案例ID_BTNHI0:{
系统(“TASKKILL/F/IM explorer.exe”);
//clase.hIcon=LoadImage(NULL,“icoff.ico”,IMAGE\u图标,32,32,LR\u LOADFROMFILE);
//clase.hIconSm=LoadImage(NULL,“icoff.ico”,IMAGE\u图标,32,32,LR\u LOADFROMFILE);
显示窗口(hBtn0、SW_隐藏);
ShowWindow(hBtn1、SW_SHOW);
//SetFocus(hBtn1);
打破
}
案例ID_BTNHI1:{
系统(“启动%SystemRoot%\\explorer.exe”);
//clase.hIcon=LoadImage(NULL,“icon.ico”,IMAGE\u icon,32,32,LR\u LOADFROMFILE);
//clase.hIconSm=LoadImage(NULL,“icon.ico”,IMAGE\u icon,32,32,LR\u LOADFROMFILE);
显示窗口(hBtn1,SW_隐藏);
ShowWindow(hBtn0、SW_SHOW);
//SetFocus(hBtn0);
打破
}
案例ID_BTNHI2:{
系统(“启动”);
//SetFocus(hBtn0);
打破
}
}
打破
}
案例WM_销毁:{
PostQuitMessage(0);
打破
}
默认值:{
返回DefWindowProc(hWnd、msg、wParam、lParam);
}
}
返回0;
}
您需要去掉按钮上的BS_FLAT
窗口样式,如果您还没有这样做,您的程序也需要这样做。然后按钮将具有现代外观。您未能理解问题,首先按钮代码已经使用了“BS_FLAT”,这就是为什么它看起来像这样,即使您激活视觉样式,文本仍然以该样式显示,问题不是按钮,而是按钮内的文本。“你没能理解这个问题”-那是你解释得不够清楚的错。“按钮代码已经使用了“BS_FLAT”-我知道,我是说要摆脱它,所以按钮有一个更现代的3d外观。”如果你激活视觉样式,文本仍然以该样式显示“-按钮文本将采用活动主题的字体和样式,这是它应该做的。