随心所欲改变窗口的图标

2023-12-09 01:59

本文主要是介绍随心所欲改变窗口的图标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随心所欲改变窗口的图标

苏州市西塘南巷
沈建新

---- 在使用VC++5.0开发应用程序时,我们可能需要改变框架窗口(包括主框架窗口和子框架窗口)的图标,而不是使用VC为你已经准备好了的、很难看的那个图标。但笔者参考了很多书籍、资料,却没有找到任何叙述如何去改变窗口图标的方法的文章(或许很多人认为这根本就不值得一提),让很多初学者无从着手。笔者经过实践,发现了以下两个改变框架窗口图标的方法。使用方法一可以在编写应用程序时指定框架窗口的图标,使用方法二可以在程序运行时根据需要动态地改变窗口的图标。如果把这两个方法结合起来,就可以随心所欲改变窗口的图标。

---- 方法一、在编程时指定窗口的图标

---- 一、如果是指定主框架窗口的图标,其步骤如下:

  1. 创建或打开工程Icon(以下都以工程名为Icon为例)。
  2. 单击Workspace窗口的ResourceView标签,选中资源ID为IDR_MAINFRAME图标资源,然后按Delete键把它删除掉。注意:一定要把它删除才行。
  3. 从Developer Studio的Insert菜单中选择Resource,然后选择Icon,新建(New)一个新的图标或导入(Import)一个已有的图标。
  4. 把新图标的资源ID改为AFX_IDI_STD_MDIFRAME(如果是MDI应用程序)或改为AFX_IDI_STD_FRAME(如果是SDI应用程序)。AFX_IDI_STD_MDIFRAME和AFX_IDI_STD_FRAME这两个资源ID是MFC中预定义了的。
  5. 编译并运行程序,可以发现主框架窗口的图标就是你指定的图标。

---- 二、如果是指定MDI子框架窗口的图标,其步骤与上述相似。

  1. 同上。创建或打开工程Icon。
  2. 删除资源ID为IDR_ICONTYPE(在你的工程中应该是IDR_XXXTYPE,其中XXX为你的工程名)图标资源。同样要注意的是:一定要把它删除才行。
  3. 同上。新建(New)一个新的图标或导入(Import)一个已有的图标。
  4. 把新图标的资源ID改为IDR_ICONTYPE(即步骤2中删除的资源ID)。
  5. 编译并运行程序,可以发现子框架窗口的图标就是你指定的图标。

---- 用这个方法,可以在多视图类MDI应用程序中为不同视图的子框架窗口指定不同的图标。

---- 方法二、在程序运行时动态地改变窗口的图标

---- 在程序运行时动态地改变框架窗口图标的原理是使用函数

---- CWnd::SendMessage()向窗口发送WM_SETICON消息。其方法是:

HICON hIcon=AfxGetApp()- >LoadIcon(IDI_ICON1);
ASSERT(hIcon);
AfxGetMainWnd()- >SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);

---- 以上叙述中的AfxGetMainWnd()是获得主框架窗口的窗口句柄,所以改变的是主框架窗口(包括MDI和SDI)的图标,用同样的方法略作改动就可以改变MDI应用程序子框架窗口的图标。

---- 下面举一个实例来说明如何改变主框架窗口的图标,步骤如下:

---- 1.创建或打开工程Icon。

---- 2. 从Developer Studio的Insert菜单中选择Ressource,然后选择Icon,新建(New)或导入(Import)两个图标,并资源ID分别改为IDI_ICON_GREEN,IDI_ICON_RED。

---- 3.单击Workspace窗口的ResourceView标签,对IDR_MAINFRAME菜单资源进行编辑。在View菜单中加入一个分隔符和Green Icon、Red Icon两个菜单项。其资源ID分别改为ID_VIEW_GREEN和ID_VIEW_RED。

---- 4.为主窗口添加如下消息处理函数:

// CMainFrame message handlers
void CMainFrame::OnViewGreen() 
{
// TODO: Add your command handler code here
HICON hIcon=AfxGetApp()- >LoadIcon(IDI_ICON_GREEN);
ASSERT(hIcon);
SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
//因为是在类CmainFrame中,所以不需要用
AfxGetMainWnd()- >SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
}
void CMainFrame::OnViewRed() 
{
// TODO: Add your command handler code here
HICON hIcon=AfxGetApp()- >LoadIcon(IDI_ICON_RED);
ASSERT(hIcon);
SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
}

---- 5. 最后编译并执行程序,执行View菜单的Green Icon和Red Icon,可以看到成功得改变主框架窗口的图标。

---- 以上实例是在程序运行时改变主框架窗口的图标,可以用同样的方法改变MDI程序的子框架窗口的图标,有兴趣的朋友可以一试。


 

这篇关于随心所欲改变窗口的图标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/472083

相关文章

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间