作者共發了23篇帖子。 內容轉換:不轉換▼
 
點擊 回復
1231 22
【教程】讓Win32程序擁有XP風格控件
一派護法 十九級
1樓 發表于:2015-4-4 12:44
在Visual Studio中,默認創建的Win32 Project的對話框中,控件是Windows 2000風格的,很難看。


本教程主要討論如何讓Win32程序的控件擁有XP風格。最終效果如圖:

(說實話我也不知道對話框中為何多出了一個α的圖標。。。)
一派護法 十九級
2樓 發表于:2015-4-4 12:46
【第一步】
打開Win32Project1.cpp文件(新建的工程貌似只有一個cpp文件),在這個文件的頭部加上:
#pragma comment (lib, "comctl32.lib")
#include "commctrl.h"

其中最後一個也可以寫成#include <commctrl.h>
一派護法 十九級
3樓 發表于:2015-4-4 12:48
找到InitInstance函數,在函數中加入
InitCommonControls();
如圖:

那個注釋是我加上的= =
//Make sure this is here so you can use XP Styles
這個可以不加的。
一派護法 十九級
4樓 發表于:2015-4-4 13:17
【第二步】
打開Win32Project1.rc文件

新建一個資源
一派護法 十九級
5樓 發表于:2015-4-4 13:21
點Custom按鈕

輸入24,然後點OK
一派護法 十九級
6樓 發表于:2015-4-4 13:22
在新建的空白文件中,粘貼如下內容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright (c) Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    name="Microsoft.Windows.Shell.notepad"
    processorArchitecture="amd64"
    version="5.1.0.0"
    type="win32"/>
<description>Windows Shell</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <dpiAware  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
</application>
</assembly>


一派護法 十九級
7樓 發表于:2015-4-4 13:24

然後在右下角的Properties(屬性)模塊中,把ID改成1,把Filename改成“工程名.manifest”,如:Win32Project1.manifest
一派護法 十九級
8樓 發表于:2015-4-4 13:28
回復:7樓
注意:
這一步是先點擊了(6樓所示截圖)剛才新建的那個資源的內容區域,使光標落在那個區域之後,再到Properties(屬性)模塊中修改屬性值。

當然也可以 選中 Resource View中的RT_MANIFEST(或24)下新建的資源,再在屬性模塊中改。反正目的是要把文件名改成“工程名.manifest”,資源名稱改成1

一派護法 十九級
9樓 發表于:2015-4-4 13:28
然後運行程序就行了。
一派護法 十九級
10樓 發表于:2015-4-4 13:30
一派護法 十九級
11樓 發表于:2015-4-4 13:34
對於MFC程序,從VS2005開始就已自動啟用了XP控件風格,無需用戶干預。
而在VC6中,則只需要新建一個24資源,複製6樓所述內容,然後把資源ID改為1就行了。不需要加入其它的C++代碼。
一派護法 十九級
12樓 發表于:2015-4-4 13:44

對話框中的控件可以直接在rc文件中的dialog資源中添加。
一派護法 十九級
13樓 發表于:2015-4-4 13:45
一派護法 十九級
14樓 發表于:2015-4-4 13:46
1>------ Build started: Project: Win32Project1, Configuration: Release Win32 ------
1>  stdafx.cpp
1>  Win32Project1.cpp
1>  Generating code
1>  Finished generating code
1>  Win32Project1.vcxproj -> f:\users\octopus\documents\visual studio 2013\Projects\Win32Project1\Release\Win32Project1.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

生成Release版本的exe文件。。。
一派護法 十九級
15樓 發表于:2015-4-4 14:06

該方法在VS2010中也適用。
一派護法 十九級
16樓 發表于:2015-4-4 14:11

這是在沒有安裝VS的電腦上運行的效果。
一派護法 十九級
17樓 發表于:2015-4-4 14:28

回復:15樓

如果覺得字體不好看,可以改成“新宋體”

一派護法 十九級
18樓 發表于:2015-4-4 20:08
其實,我VS2005,2008,2010,2013都用過。。。。
一派護法 十九級
19樓 發表于:2015-12-1 22:38

回復:2樓

comment和括号中间可以不需要空格。

一派護法 十九級
20樓 發表于:2015-12-3 22:35
回復7樓 @巨大八爪鱼 的內容:
然後在右下角的Properties(屬性)模塊中,把ID改成1,把Filename改成“工程名.manifest”,如:Win32Project1.manifest
【补充】
如果实在想用IDR_RT_MANIFEST1作资源ID,那就必须把对应的宏定义值改为1。

一派護法 十九級
21樓 發表于:2015-12-3 22:38

在Resource.h中修改资源ID也是可以的。
一派護法 十九級
23樓 發表于:2015-12-3 22:59
http://www.bianceng.cn/Programming/cplus/201306/36676.htm
在这篇文章里介绍了另一种启用XP风格控件的方法,貌似说的是不需要24资源的XML文件。

一派護法 十九級
26樓 發表于:2015-12-5 14:46
另一种更简单的方法:
【教程】用三行C++代码讓Win32程序擁有XP風格控件,无需manifest文件或24资源
https://zh.arslanbar.net/post.php?t=23522

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:1231 回複數:22
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2015-12-5 14:46
精品區:未分類
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。