1、程序界面最小化时,想在托盘中显示自己的图标:

NOTIFYICONDATA nid; 
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);    
nid.hWnd = this->m_hWnd;    
nid.uID = IDR_MAINFRAME;    
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP   ;    
nid.uCallbackMessage = MY_NOTIFY_SHOW;//自定义的消息名称 
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));    
strcpy(nid.szTip, _T("图标测试"));//信息提示条 
Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标

2、删除

NOTIFYICONDATA nid; 
nid.hWnd=this->m_hWnd; 
nid.uID=IDR_MAINFRAME; 
Shell_NotifyIcon(NIM_DELETE, &nid);

3、加载自己的图标文件

上面加载的是vs自带的图标,也可加载自定义图标,但这些要加入到工程,

LoadImage可以加载bitmap位图文件。

加载jpg要进行转换

下面是一些转换的函数

方法一、

HICON HICONFromCBitmap( CBitmap& bitmap)
{
BITMAP bmp;
bitmap.GetBitmap(&bmp);

HBITMAP hbmMask = ::CreateCompatibleBitmap(::GetDC(NULL), 
bmp.bmWidth, bmp.bmHeight);

ICONINFO ii = {0};
ii.fIcon = TRUE;
ii.hbmColor = bitmap;
ii.hbmMask = hbmMask;

HICON hIcon = ::CreateIconIndirect(&ii);//一旦不再需要,注意用DestroyIcon函数释放占用的内存及资源
::DeleteObject(hbmMask);

return hIcon;
}

方法二、

#include <gdiplus.h>
#pragma comment(lib,"GdiPlus.lib")

HICON CreateIcon(HBITMAP hBitmap)
{
Gdiplus::Bitmap* pTmpBitmap=Gdiplus::Bitmap::FromHBITMAP(hBitmap,NULL);
HICON hIcon=NULL;
pTmpBitmap->GetHICON(&hIcon);
delete pTmpBitmap;
return hIcon;
}

HICON转HBITMAP

利用GetIconInfo函数获取ICONINFO信息, 再将其复制到位图当中去, 代码如下:

HBITMAP ConvertIconToBitmap(HICON hIcon)

HBITMAP hBmp; 
BITMAP bmp; 
CDC bmpDC; 
CDC iconDC; 
ICONINFO csII; 
int bRetValue = ::GetIconInfo(hIcon, &csII); 
if (bRetValue == FALSE) return NULL; 
bmpDC.Attach(::GetDC(NULL)); 
iconDC.CreateCompatibleDC(&bmpDC); 
if (::GetObject(csII.hbmColor, sizeof(BITMAP), &bmp)) 

DWORD dwWidth = csII.xHotspot*2; 
DWORD dwHeight = csII.yHotspot*2; 
hBmp= ::CreateBitmap(dwWidth, dwHeight, bmp.bmPlanes, 
bmp.bmBitsPixel, NULL);
iconDC.SelectObject(csII.hbmColor); 
bmpDC.SelectObject(hBmp); 
bmpDC.BitBlt(0,0,dwWidth,dwHeight,&iconDC,0,0,SRCCOPY); 
return hBmp; 
}
return NULL;
}

还有一种方法就是先创建一个兼容位图, 然后通过API函数::DrawIcon()复制上去, CopyImage函数可以用来替换创建兼容DC以后的那些骤了

一个转换的例子
CImage img;
HRESULT ret = img.Load("logo.jpg"); //要加载的文件名(包含路径)
HBITMAP bitmap = img.Detach();
ICONINFO ii = {0};
ii.fIcon = TRUE;
ii.hbmColor = bitmap;
ii.hbmMask =bitmap;
HICON hIcon = ::CreateIconIndirect(&ii);

托盘程序与jgp文件加载相关推荐

  1. python反编译luac_Lua程序逆向之为Luac编写IDA Pro文件加载器

    距离上一次讲Lua程序逆向已经有一段时间了,这一次我们书接上回,继续开启Lua程序逆向系列之旅. 在软件逆向工程实践中,为第三方文件编写文件格式分析器与指令反汇编器是一种常见的场景.这一篇的主要目的是 ...

  2. 用 C 语言开发一门编程语言 — 字符串与文件加载

    目录 文章目录 目录 前文列表 字符串 读取字符串 注释 文件加载函数 命令行参数 打印函数 报错函数 源代码 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器> <用 C ...

  3. php基础语法(文件加载和错误)

    文件加载 有4个文件加载的语法形式(注意,不是函数): include,  include_once,  require, require_once; 他们的本质是一样的,都是用于加载/引入/包含/载 ...

  4. jsr303 自定义消息_JSR 303从I18N属性文件加载消息

    jsr303 自定义消息 总览 本文将说明如何适应JSR 303验证API来从I18n属性文件加载消息,并通过保留国际化的所有好处和对多种语言的支持来实现这一点. 为此,我们将实现一个基于Spring ...

  5. JSR 303从I18N属性文件加载消息

    总览 本文将说明如何适应JSR 303验证API来从I18n属性文件加载消息,并通过保留国际化的所有好处和对多种语言的支持来实现这一点. 为此,我们将实现一个基于Spring API的自定义Messa ...

  6. java yml value_Spring Boot:从YAML文件加载@Value

    我需要从 .yml 文件加载一个属性,该文件包含应用程序可以从中读取文件的文件夹的路径 . 我正在使用以下代码注入属性: @Value("${files.upload.baseDir}&qu ...

  7. PHP基础知识之文件加载

    控制脚本执行顺序 die(字符串)/exit(字符串): 输出该字符串后,立即停止PHP的执行!即后续代码不再执行. sleep($n) 程序停止运行指定的秒数.然后等待过了那个时间后,就继续执行.( ...

  8. 该应用程序从products.json加载数据

    餐桌 (food-table) the app loads data from products.json. The component ProductTable gets this data as ...

  9. 微信小程序开发动感十足的加载动画--都在这里!

    微信小程序开发动感十足的加载动画--都在这里.jpg 1. 概述 我们在学习微信小程序时,应该会遇到载入图片或者动画需要等待的情况,那么这个等待的画面我们应该怎么编写呢?今天我们就分享这样的小教程. ...

最新文章

  1. Java编程讲义之Eclipse开发工具
  2. SQL语句 怎么把从一个表中查出来数据插入到另一个表中
  3. react-性能优化
  4. Oracle学习笔记:oracle服务在linux平台的启动问题
  5. python读取文件并存入mysql_1.python读取txt文件并插入到mysql数据库以及将py脚本文件打包成独立的exe程序...
  6. 如何解决Mac无法写入U盘的问题
  7. 如何理解lower_bound/upper_bound
  8. python静态递归函数_Python递归函数
  9. 计算机播放qq音乐没声音怎么办,Win7电脑中QQ音乐听不了怎么办?
  10. 使用openssl实现AES CBC 128 pcks7加密
  11. 虹软视觉人工智能开放平台创享会圆满落幕,干货满满频获点赞
  12. SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】
  13. ajax实现分页操作
  14. java springboot 商城系统源码
  15. 嵌入式数据库系统Berkeley DB
  16. 【操作系统/计组】页面大小 与 页表项 ( 二级页表 、多级页表 )
  17. 新唐M0内核。接口的TTL电平和斯密特电平的使用
  18. Android 报 Unable to start service Intent { } U=0: not found错误
  19. 25. Linux中的web服务器Apache
  20. 【第二章 线性代数之 线性组合、张成的向量空间】3Blue1brown

热门文章

  1. AD中PCB设计开槽
  2. Android单元测试(七):MVP与单元测试
  3. DCDC电源PCB布局
  4. 常用PCB快捷键总结
  5. sounds音标软件Android,Sounds: Pronunciation App FREE
  6. 26个字母的起源及含义
  7. MySQL中的索引、视图和DBA操作
  8. 牛津通识读本:数学(中文版) 蒂莫西·高尔斯笔记1
  9. destoon8.0如何新增页面?今天来教大家
  10. 程序猿如何理财之如何研究好一家上市公司?