您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Visual C >> 正文

Google
在 Windows 应用程序中使用 Windows XP 的外观风格和
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 12:49:57
在 Windows 应用程序中使用 Windows XP 的外观风格和 PrintWindow

单击此处下载示例 - TaskSwitch.exe。

<!--END SAMPLE-->

Paul Hellyar
Microsoft Corporation
2001年10月25日

从 MSDN Downloads(英文)下载本文的示例应用程序。

注意:此示例仅适用于运行 Windows XP 的计算机。打开示例并打开两个或多个应用程序窗口之后,请使用 AltTab 功能键来运行 TaskSwitcher 应用程序。

摘要:本文介绍了一种增强的 AltTab 应用程序 TaskSwitcher,并以此为框架演示了在 Windows 应用程序中使用 Windows XP 新的外观风格和 PrintWindow 的方法。

目录

  • 简介
  • TaskSwitcher 应用程序
  • 截取键盘输入
  • 枚举顶层应用程序窗口
  • 显示顶层应用程序窗口
  • 使用 Comctl32.dll 版本 6
  • 总结

简介

Microsoft® Windows® XP 引入了一种新的外观风格,它使用方便,并且用户界面也更加丰富。例如,圆角窗口、更具质感的任务栏以及将鼠标悬停在 UI 元素上时,可实现 UI 元素的热跟踪。

图 1:新外观风格中的 Calculator(计算器)和 Display Properties(显示属性)对话框

Windows XP 还引入了新的打印 API:PrintWindow(英文)。该 API 允许调用者制作窗口的快照并将其插入设备环境。

有关外观风格以及将其应用于应用程序的介绍,请参阅 MSDN Library 中的技术文章“使用 Windows XP 的外观风格”。该文章提供了相关的概述和介绍信息,而本文的主要目的是提供一个使用外观风格 API 和 PrintWindow API 的实例。本文还为使用某些以前的 Win32 API 提供了一个刷新程序。

本文将特别阐述 TaskSwitcher 应用程序,它与目前 Windows 中已有的 AltTab 机制具有相同的功能。除了显示图标列表外,该应用程序还将显示将要切换到的应用程序的缩略图预览。显示应用程序图标和预览的容器窗口将通过外观风格 API 显示出来,使应用程序的外观符合最终用户当前选择的外观风格。

TaskSwitcher 应用程序

TaskSwitcher 是为代替 Windows XP 的现有 AltTab 应用程序切换机制而设计的。AltTab 是内置的 Windows 超级用户功能,它使最终用户能够在顶层应用程序窗口之间进行快速切换。当按下热键组合 Alt+Tab 时,Windows 会生成最终用户正在使用的已打开窗口的列表。已打开窗口的列表将以一组图标的形式显示,其中一个图标带有矩形的选择边框。当最终用户继续按住 Alt 键并按下 Tab 键时,矩形选择框将移至下一个图标。释放 Alt 键后,Windows 将把选定的图标所代表的应用程序置于前台。

图 2:Windows XP AltTab 容器窗口

此功能在逻辑上可以分成三个部分:首先,应用程序必须侦听组合键 Alt+Tab;接收到该组合键时,应用程序需要枚举桌面上的顶层应用程序窗口;最后,应用程序需要在某种 UI 容器中显示这些窗口,使用户可以选择要切换到的应用程序的图标。

截取键盘输入

使用 Win32 API,您可以通过几种方法之一创建侦听特定击键的应用程序。最简单的方法是使用 API RegisterHotKey(英文)。该 API 包含一个 hwnd、一个 ID、一个虚拟键和一个组合键。如果此调用成功,则无论何时按下虚拟键和组合键,hwnd 的 WndProc 都会收到一个 WM_HOTKEY 消息,该消息的 wParam 等于 ID。无论侦听应用程序窗口是否处于活动状态,都是如此。无论何时按下 AltTab,下面的调用都会使 hwndApp 收到一条 WM_HOTKEY 消息:

RegisterHotKey(hwndApp, IDH_ALTTAB, MOD_ALT, VK_TAB)

在 Windows XP 之前,无法将 AltTab 注册为热键。在 Windows XP 中,您不仅可以成功地将 AltTab 注册为热键,而且 Windows XP 还使您可以自己处理该事件,而不用启动其自身内置的 AltTab 热键处理程序。

// 创建一个侦听热键的虚拟窗口HWND hwndApp = CreateWindow(WC_APP, NULL, 0, 0, 0, 0, 0, HWND_MESSAGE,                NULL, THIS_EXE, NULL);if (hwnd){    // 注册 Alt+Tab    RegisterHotKey(hwndApp, IDH_NEXT, MOD_ALT, VK_TAB);    RegisterHotKey(hwndApp, IDH_PREV, MOD_ALT|MOD_SHIFT, VK_TAB);    MSG msg;    while (GetMessage(&msg, NULL, 0, 0))    {        TranslateMessage(&msg);        DispatchMessage(&msg);    }}LRESULT WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){    switch (uMsg)    {        case WM_HOTKEY:        {            switch (wParam)            {                // 如果未显示容器窗口,则枚举                // 顶层窗口,提取图标和文本,                // 并将其显示在容器窗口中                case IDH_NEXT:                {                    // 在窗口层次结构中选择                    // 下一个顶层窗口的图标                    break;                }                case IDH_PREV:                {                    // 在窗口层次结构中选择                    // 上一个顶层窗口的图标                }            }        }    }}

第二种实现键盘侦听的更高级的方法是同时使用 API SetWindowsHookEx(英文)和 WH_KEYBOARD_LL。该方法在当前桌面的全局范围内创建一个低级别的键盘挂钩层。在调用 SetWindowsHookEx 时指定的 LowLevelKeyboardProc 回调函数将接收所有的键盘输入。处理完键盘输入后,LowLevelKeyboardProc 应调用 CallNextHookEx 以使下一个挂钩链(很可能是

[1] [2] [3] [4] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
GOOGLE广告

阅读排行

| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号