Winapi 将Windows Vista/7主题与g++;

Winapi 将Windows Vista/7主题与g++;,winapi,g++,Winapi,G++,我用纯winapi用g++编写了一个应用程序,但每个控件看起来都很旧。如何使用新的尼斯主题7和Vista?到目前为止,我读到的所有内容都表明,我必须包含一个明确表示我想要这些主题的XML文件,但我认为这在g++中是不可能的。那么,我该怎么办呢?我不懂g++。但是,如果此环境/语言的结果是一个简单EXE,并且使用的控件是标准Windows控件,则向EXE添加清单即可 最简单的方法是使用exe的完整名称创建一个有效的清单,并将.manifest添加到该名称中。(即foo.exe.manifest)您

我用纯winapi用
g++
编写了一个应用程序,但每个控件看起来都很旧。如何使用新的尼斯主题7和Vista?到目前为止,我读到的所有内容都表明,我必须包含一个明确表示我想要这些主题的XML文件,但我认为这在
g++
中是不可能的。那么,我该怎么办呢?

我不懂g++。但是,如果此环境/语言的结果是一个简单EXE,并且使用的控件是标准Windows控件,则向EXE添加清单即可

最简单的方法是使用exe的完整名称创建一个有效的清单,并将.manifest添加到该名称中。(即foo.exe.manifest)

您确实需要在项目中包含一个。 这只是一个简单的xml文件,您可以将其添加到项目中,就像它是一个.cpp或.h文件一样。 它将启用漂亮的视觉样式,但您还没有实现

字体仍然是ms shell dlg,这并不令人惊讶。 要“提取”标准字体,请使用带有默认\u GUI\u字体标志的函数

HFONT font = (HFONT) GetStockObject(DEFAULT_GUI_FONT);
要计算此字体的新对话框单位,可以使用以下小片段

LONG units = GetDialogBaseUnits();
HDC hdc = GetDC(NULL);
SIZE size;
TEXTMETRIC tm;  
HFONT font = (HFONT) GetStockObject(DEFAULT_GUI_FONT);
SelectObject(dc,font);
GetTextMetrics(dc,&tm);
GetTextExtentPoint32(hdc,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",52,&size);
float avgWidth = (size.cx/26+1)/2;
float avgHeight = (WORD)tm.tmHeight;
float dialogUnitWidth = 2*(avgWidth/LOWORD(units));
float dialogUnitHeight = 2*(avgHeight/HIWORD(units));
dialogUnitWidth和dialogUnitHeight现在包含以像素为单位的对话框单位。
有关更多信息,请参阅文章。

您是否尝试过在您的
\include
指令下方添加以下
\pragma注释
\pragma注释(链接器,“\”/manifestdependency:type='win32'\name='Microsoft.Windows.Common Controls'version='6.0.0.0'\processorArchitecture='*'publicyToken='6595b64144ccf1df'语言='*'\“”)
?@AlwaysLearningNewStuff我准备在手头有编译器的时候尝试一下,但是
name.exe.manifest
解决方案对我有效。不知道
#pragma comment
也在g++中工作!我正要问一下文本字体。谢谢你的阅读:)