使用带有g ++的Windows Vista / 7主题

时间:2014-03-21 06:06:47

标签: winapi g++

我使用纯winapi使用g++完成了一个应用程序,但每个控件看起来都很旧。我如何使用新的好主题7和Vista提供?到目前为止我读到的所有内容都说我必须包含一个XML文件,明确说明我想要那些主题,但我不认为g++可以实现。那么,我该怎么办?

2 个答案:

答案 0 :(得分:1)

我不懂g ++。但是,如果您获得的此环境/语言的结果是简单的EXE ,并且使用的控件是标准Windows控件,则向exe添加清单将完成此任务。

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

答案 1 :(得分:1)

您需要在项目中加入manifest。 这只是一个简单的xml文件,您可以将其添加到项目中,就像它是.cpp或.h文件一样。 它将启用漂亮的视觉风格,但你还没有!

字体仍然是ms shell dlg,这并不是那么神奇。 要“提取”标准字体,请使用带有DEFAULT_GUI_FONT标志的GetStockObject函数

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现在包含以像素为单位的对话框单位。 有关详细信息,请参阅this文章。