如何解决有没有一种方法可以将Windows 10 win32 / gdi ++ GUI程序的样式更改为Windows 95?
Windows 95主题:
Windows 10主题:
Windows 95主题外观绝对适合我的程序。是否可以使用编写程序的Win32 API和GDI +来做到这一点?
解决方法
您可以使用SetWindowTheme功能
- 包括
- 在
Properties->Linker->Input->Additional Dependencies
中将依赖项添加到uxtheme.lib。 - 创建窗口后呼叫
SetWindowTheme(hwnd,L" ",L" ");
。
以下是示例:
#include <windows.h>
#include <Uxtheme.h>
LPCWSTR g_szClassName = L"myWindowClass";
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
if (!RegisterClassEx(&wc))
{
MessageBox(NULL,L"Window Registration Failed!",L"Error!",MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindow(
g_szClassName,L"The title of my window",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,600,NULL,hInstance,NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
SetWindowTheme(hwnd,L"",L"");
while (GetMessage(&Msg,0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
输出:
编辑:
您可以参考Visual Styles
,也可以参考What's New
:
通过Windows 7,视觉样式默认情况下处于启用状态,但用户可以通过选择Windows经典主题或关闭主题服务来将其关闭。禁用视觉样式时,所有UI均具有经典外观,并且大多数视觉样式API均不可用。 Windows 7保留了视觉样式关闭模式,以支持各种高对比度主题以及Windows Classic主题。如果要在同一应用程序中同时支持视觉样式和高对比度主题,则通常需要维护两个单独的代码路径以用于呈现控件。
如果您想enable visual styles。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。