吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5575|回复: 7
收起左侧

[C&C++ 转载] (非MFC)托盘图标的写法

[复制链接]
Victory.ms 发表于 2012-8-19 19:50
本帖最后由 Victory.ms 于 2012-8-19 19:52 编辑

这里我用是的VS2010   ,首先新建一个WIN32项目—>选择windows应用程序—>勾选上空项目—>点击完成。
   让后在资源处右击添加资源文件。选择Dialog     然后再添加ICON图标文件导入一个存在的ico图标文件.
       最后新建一个.cpp文件。
添加代码
//本例中的对话框ID:IDD_DIALOG        按钮ID: IDC_BUTTON1   名称:“最小化”

#include"resource.h"
#include<stdio.h>
#include<Windows.h>
#define WM_NOTIFY_ICON WM_USER+100//自定义消息  处理托盘图标
#define IDC_BUTTON_EXIT WM_USER+101//自定义退出程序消息
#define IDC_BUTTON_SHOW WM_USER+102//自定义显示窗口消息
HINSTANCE hIns=NULL;    //实例句柄
HWND hDlg=NULL;  //对话框句柄
LRESULT CALLBACK DlgProc(HWND hDlgMain,UINT uMsg,WPARAM wParam,LPARAM lParam);//申明回调函数

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstcanc,LPSTR lpCmdLine,int nShowCmd)
{
        hIns=hInstance;
        DialogBox(hIns,MAKEINTRESOURCE(IDD_DIALOG),NULL,(DLGPROC)DlgProc);//激活对话框
        return 0;
}


LRESULT CALLBACK DlgProc(HWND hDlgMain,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
        hDlg=hDlgMain;
        switch(uMsg)
        {
        case WM_INITDIALOG://加载图标
            //小图标
          SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)LoadIcon(hIns,MAKEINTRESOURC(IDI_ICON1)));  
                  //大图标
               SendMessage(hDlg,WM_SETICON,ICON_BIG,(LPARAM)LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1)));
                break;
        case WM_PAINT://构建托盘图标
                {
                NOTIFYICONDATA IconData;//任务栏托盘图标区消息结构
                IconData.hWnd=hDlg;//窗口句柄
                IconData.uID=IDI_ICON1;//图标ID
                IconData.uFlags=NIF_MESSAGE |NIF_ICON;//标志,消息和图标有效
                IconData.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//结构大小
                IconData.hIcon=LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1));//图标句柄
                IconData.uCallbackMessage=WM_NOTIFY_ICON;//回调消息(处理托盘图标消息)自定义
                Shell_NotifyIcon(NIM_ADD,&IconData);//向任务栏发送消息               
                }
                break;
        case WM_COMMAND:
                switch(LOWORD(wParam))
                {

              case IDC_BUTTON1://按下最小化按钮
                          {
                                NOTIFYICONDATA IconData;
                                IconData.hWnd = hDlg;
                                IconData.uID = IDI_ICON1;
                                IconData.hIcon = LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1));
                                IconData.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
                                IconData.uFlags = NIF_MESSAGE|NIF_ICON;
                                IconData.uCallbackMessage = WM_NOTIFY_ICON;
                                Shell_NotifyIcon(NIM_ADD,&IconData);
                                ShowWindow(hDlg,SW_HIDE);//隐藏界面
                                 
                          }
                          break;
                  case IDC_BUTTON_SHOW://菜单项  显示
                          ShowWindow(hDlg,SW_SHOW);
                     break;
                  case IDC_BUTTON_EXIT://菜单项  退出
                          {
                                  NOTIFYICONDATA IconData;
                                IconData.hWnd = hDlg;
                                IconData.uID = IDI_ICON1;
                                IconData.hIcon = LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1));
                                IconData.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
                                IconData.uFlags = NIF_MESSAGE|NIF_ICON;
                                IconData.uCallbackMessage = WM_NOTIFY_ICON;
                                Shell_NotifyIcon(NIM_DELETE,&IconData);  //销毁任务栏托盘图标
                                EndDialog(hDlg,0);//结束对话框
                                      DestroyWindow(hDlg);//销毁窗口
                                 }
                          break;
                  default:
                          break;
                }
                break;
        case WM_NOTIFY_ICON://处理托盘图标消息
                switch(lParam)
                {
                case WM_RBUTTONUP://右键点击
                        {
                                tagPOINT point;//鼠标坐标结构
                                GetCursorPos(&point);//得到鼠标当前位置
                                HMENU hMenu;//菜单句柄
                                hMenu=CreatePopupMenu();//创建下拉式菜单
                                //在指定的菜单条、下拉式菜单、子菜单或快捷菜单的末尾追加一个新菜单项
                                AppendMenu(hMenu,MF_STRING,IDC_BUTTON_SHOW,"显示");//菜单项 字符形式
                                AppendMenu(hMenu,MF_SEPARATOR,0,NULL);//增加一条分割线
                                  AppendMenu(hMenu,MF_STRING,IDC_BUTTON_EXIT,"退出");
                                                          //指定位置显示快捷菜单,并跟踪菜单项的选择
                                TrackPopupMenu(hMenu,TPM_LEFTALIGN,point.x,point.y,NULL,hDlg,NULL);
                        }
                        break;
                case WM_LBUTTONDBLCLK://左键双击
                          ShowWindow(hDlg,SW_SHOW);//显示窗口
                        break;
                default:
                        break;
                }
                break;
        case WM_CLOSE://关闭窗口
                EndDialog(hDlg,0);
                DestroyWindow(hDlg);
                break;
        default:
                break;
        }
        return 0;
}源码 以及相关的函数用法打包了。


Win32托盘图标(非MFC).rar (333.28 KB, 下载次数: 16)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

mm4393153 发表于 2012-8-19 21:25
看不懂     
XinChenK 发表于 2012-8-20 17:12
qq8533549 发表于 2013-4-2 08:33
我学过一段时间的E  现在想学C++ 但是看到C++的代码。 我好蛋疼。。 在E里面几行简单的中文代码就能搞定。 到C++里  要真么多。。
kkjlop 发表于 2013-12-18 12:07
看不懂  我小白
九零-鑫鑫 发表于 2014-1-15 00:23
很好的方法 学习了 谢谢楼主分享
至尊丶 发表于 2014-1-15 00:28
看不懂
吾爱-路人甲 发表于 2014-1-15 00:32
以后有空学习下c语言吧。就会个易语言,什么api都看不懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 02:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表