随心所欲改变窗口的图标

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

相关文章

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个

[环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法

最近刚入手一台主机,暗影精灵8plus电竞主机,安装ubuntu后wifi怎么都搜不到热点,前后重装系统6次才算解决问题。这个心酸历程只有搞技术人才明白。下面介绍我解决过程。 首先主机到手后是个windows10系统,我用无线网连接了一下,可以正常上网,说明主机有无限网卡且正常。然后我就直接开始安装Ubuntu20.04了,安装成功后发现wifi有图标但是搜不到热点,我想是不是无线网卡驱动有没有

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和==target,首先想到的就是暴力解法 1)暴力: 2)优化,滑动窗口: 1.进窗口 2.出窗口 3.更新值 2.⽆重复字符的最⻓⼦串(medium) 1)仍然是暴力解法: 2)优化: 进窗口:hash[s[rig

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

主窗口的设计与开发(二)

主窗口的设计与开发(二) 前言         在上一集当中,我们完成了主窗口的初始化,主窗口包括了左中右三个区域。我们还完成了对左窗口的初始化,左窗口包括了用户头像、会话标签页按钮、好友标签页按钮以及好友申请标签页按钮。对于切换每个标签页,我们还做了初始化信号槽的内容。最后我们将整个MainWidget类设置为单例模式。         那么这一集我们将继续完成主窗口的设计与开发,这一集我

QtC++截图支持窗口获取

介绍 在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc++如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口 1.我们需要调用windows接口EnumWindowsProc回调函数来获取所有顶级窗口,需要包含windows.

CAD 多个页面在一个任务栏图标设置

命令行输入快捷键op或: 下图打对号,确定即可。