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, CW_USEDEFAULT, 600, 600,
NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
SetWindowTheme(hwnd, L"", L"");
while (GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
输出:
编辑:
Visual Styles
,以及What's New
中:
在 Windows 7 中,默认情况下视觉样式处于打开状态,但用户可以通过选择 Windows 经典主题或关闭主题服务来关闭它们。当视觉样式关闭时,所有 UI 都会获得经典外观,并且大多数视觉样式 API 不可用。 Windows 7 保留了视觉样式关闭模式,以支持各种高对比度主题以及 Windows 经典主题。如果您想在同一应用程序中同时支持视觉样式和高对比度主题,通常需要维护两个单独的代码路径来渲染控件。
如果您想启用视觉样式。