框架是用visual studio创建的win32控制台模板,然后自己添加最小化及还原部分代码。

  需要额外包含的头文件:

#include <shellapi.h>
#include <WinUser.h>

  方式是在托盘区创建图标,隐藏主窗口。

  托盘创建图标:

void ToTray(HWND hWnd)
{
NOTIFYICONDATA nid;
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uID = IDR_MAINFRAME;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_TO_TRAY;//自定义的消息 处理托盘图标事件
nid.hIcon = LoadIcon(GetModuleHandle(), MAKEINTRESOURCE(IDI_SMALL));
wcscpy_s(nid.szTip, _T("自定义程序名"));//鼠标放在托盘图标上时显示的文字
Shell_NotifyIcon(NIM_ADD, &nid);//在托盘区添加图标
}

  关闭软件时需要销毁托盘区的图标,不然鼠标划过才会消失:

void DeleteTray(HWND hWnd)
{
NOTIFYICONDATA nid;
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uID = IDR_MAINFRAME;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_TO_TRAY;//自定义的消息名称 处理托盘图标事件
nid.hIcon = LoadIcon(GetModuleHandle(), MAKEINTRESOURCE(IDI_SMALL));
wcscpy_s(nid.szTip, _T("自定义程序名"));//鼠标放在托盘图标上时显示的文字
Shell_NotifyIcon(NIM_DELETE, &nid);//在托盘中删除图标
}

  最小化的时候去隐藏窗口需要捕捉最小化的消息,这个消息在处理WM_SIZE时,wParam参数为SIZE_MINIMIZED。

  窗口关闭时销毁托盘:

  双击托盘图标还原窗口:

SetForegroundWindow(hWnd);这个函数是为了让窗口在前端显示。

c++ win32下窗口的最小化到托盘以及还原的更多相关文章

  1. MFC窗口实现最小化到托盘 右键菜单和还原

    //.h文件 void toTray();//最小化到托盘 void DeleteTray();//删除托盘图标 afx_msg LRESULT OnShowTask(WPARAM wParam,LP ...

  2. WPF实现窗口最小化到托盘,并且实现右击菜单

    原版是从网上找了一位大神的,自己只是用了一点适合自己的. 具体实现 1.首先已经确认WPF中没有实现最小化托盘的类与方法,用到了winform中的程序集 using Drawing = System. ...

  3. Ubuntu 16.04 启用 点击Launcher图标,窗口实现最小化 功能

    安装了Ubuntu之后,要是每次都点击最小化按钮来实现窗口的最小化,操作起来很不方便,那么怎么样才能方便操作呢, Ubuntu 16.04 本身支持 点击应用程序Launcher图标实现最小化 功能, ...

  4. WinForm 之 窗口最小化到托盘及右键图标显示菜单

    Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件. ...

  5. delphi 函数isiconic 函数 判断窗口是否最小化

    http://blog.sina.com.cn/s/blog_66357ab901012t2h.html delphi 函数isiconic 函数 判断窗口是否最小化 (2012-05-26 22:0 ...

  6. Electron 无边框窗口最大化最小化关闭功能

    Electron 无边框窗口最大化最小化关闭功能 目的 实现无边框窗口,并添加最大化最小化和关闭功能 前提 了解Electron 主进程和渲染进程的通讯 了解 BrowserWindow相关功能 操作 ...

  7. C#窗口实现最小化到系统托盘

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. VC++ 最小化到托盘、恢复

    所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分.在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区. 一.托盘编程相关函数   ...

  9. 【VS开发】最小化到托盘 shell_notifyicon和NOTIFYICONDATA

    shell_notifyicon和NOTIFYICONDATA Shell_NotifyIcon函数,向任务栏的状态栏发送一个消息 函数原型 BOOL Shell_NotifIcon( DWORD d ...

随机推荐

  1. layui增删改查

    dao方法 package com.dao; import java.sql.SQLException; import java.util.List; import java.util.Map; im ...

  2. golang数据结构和算法之DoublyLinkedList双向链表

    双向链表比起单向链表, 多了一个向前指向的指针, 所以在增删查改时,要同时照顾到两个指针的指向. DoublyLinkedList.go package DoublyLinkedList //双向链表 ...

  3. Spring熔断

    Hystrix不再维护,使用Resilience4j来代替.

  4. 最短路问题的三种算法&模板

    最短路算法&模板 最短路问题是图论的基础问题.本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法:Floyd算法.Dijkstra算法及SPFA算法,并给出三种算法的模板.流畅阅读本 ...

  5. angular6.x 引入echarts

    因为angular2+ 使用 ==typescript==开发,所以想要使用echarts,必须安装echarts针对angular的插件ngx-echarts.本文案列实际效果如上图. 安装ngx- ...

  6. 15 C++遍历某个文件夹下的文件

    1 遍历所有的,包括文件夹套文件夹 #include<iostream> #include<string> #include<io.h> #include<c ...

  7. CF-55 C.Pie or die

    做法:先把四个角分别覆盖一条边,于是问题转化为判断离边最近的一个点是否离边的距离大于等于4 #include<iostream> #include<cstdio> #inclu ...

  8. select使用css居右对齐

    select{ direction: rtl; } 下面的方法无效 select{ text-align: right; }

  9. Python基础-day02-3

    循环 目标 程序的三大流程 while 循环基本使用 break 和 continue while 循环嵌套 01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 -- 从上向下,顺序执行 ...

  10. Azure ARM (23) Azure Policy使用

    <Windows Azure Platform 系列文章目录> 在之前的文档中,我们介绍了Azure Policy的使用场景. 本章我们介绍如何创建和使用Azure Policy. 模拟场 ...