现在的位置: 首页 > 综合 > 正文

得到Windows系统时钟字体颜色

2014年01月30日 ⁄ 综合 ⁄ 共 1044字 ⁄ 字号 评论关闭

很多朋友提到如何得到系统时钟的字体颜色的问题,这个问题的相关资料在MSDN中描述非常少,至于具体涉及的API的使用方法还需要MS日后发布新的说明文档才能够弄清。为了实际工程应用,暂且抛开这些API的详细说明,看一看如何获取时钟字体颜色的方法吧。

 

首先时钟字体颜色是由Windows操作系统应用的主题决定的(XP系统),需要使用主题相关的一些API,因此首先包含其头文件,同时连接到库文件。

 

#include <uxtheme.h>
#include <vssym32.h>

 

#pragma comment(lib, "uxtheme.lib")

 

之后在初始化代码中加入如下代码。

 

SetWindowTheme(m_hWnd, _T("TrayNotify"), NULL);

 

其中m_hWnd为窗口的句柄,这段代码将当前窗口的主题样式设置为"TrayNotify" ,具体函数意义可以参考MSDN的简要叙述。这个"TrayNotify"的查询方法,我也费了很多周章,如果有朋友想知道如何查询,或者有更好的查询方法,可以告诉我,欢迎大家讨论。

 

注意,这个函数会发送WM_THEMECHANGED消息到m_hWnd,可以处理WM_THEMECHANGED消息打开需要的主题内容(例如时钟字体颜色),同时在Windows系统主题改变时,系统同样会发送该消息,通过处理该消息,可以达到程序随系统主题改变而改变的目的。

 

假设我们不处理WM_THEMECHANGED消息,那么在SetWindowTheme之后就可以打开需要的主题资源了,例如如下代码所示。

 

HTHEME hThemeClock = OpenThemeData(m_hWnd, VSCLASS_CLOCK);

 

COLORREF ColorText;

GetThemeColor(hThemeClock, CLP_TIME, CLS_NORMAL, TMT_TEXTCOLOR, &ColorText);

 

以上两句调用和相关参数也可以参考MSDN中的说明。如果hThemeClock = NULL则说明打开失败,或者系统本身没有设置主题(XP中的经典样式)。以往的代码中也提到以上两句,但是hThemeClock总为NULL,不能够正确获得主题资源。

 

程序关闭时,需要释放资源,释放方法如下。

 

CloseThemeData(hThemeClock);

 

以往的说明中,仅有打开资源和获取颜色两部分,没有关于SetWindowTheme与其的配合使用,特此提出,希望能够帮助大家。

抱歉!评论已关闭.