VC对话框最小化到托盘

2024-05-31 05:18
文章标签 对话框 最小化 vc 托盘

本文主要是介绍VC对话框最小化到托盘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VC对话框最小化到托盘

1.***dlg.h头文件设置:

1)public:

void setTray();//设置托盘
NOTIFYICONDATA nid;//NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息

2)protected:

// Generated message map functions
//{{AFX_MSG(C***Dlg)
afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);

//}}AFX_MSG

2.***dlg.cpp实现设置:

1) #define WM_SHOWTASK (WM_USER + 1) //设置响应消息

2) BEGIN_MESSAGE_MAP(C***Dlg, CDialog)
//{{AFX_MSG_MAP(C***Dlg)
ON_MESSAGE(WM_SHOWTASK,onShowTask)

//}}AFX_MSG_MAP
END_MESSAGE_MAP()

3)最小化菜单响应

void C***Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if(nID==SC_MINIMIZE)
{
setTray();//最小化到托盘
}

}

4)托盘函数

void C***Dlg::setTray()
{
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); 
nid.hWnd=this->m_hWnd; 
nid.uID=IDR_MAINFRAME; 
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; 
nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称 
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); 
strcpy(nid.szTip,"ClientTracer"); //信息提示条 
Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标 
ShowWindow(SW_HIDE); //隐藏主窗
}

5)消息函数

LRESULT C***Dlg::onShowTask(WPARAM wParam,LPARAM lParam) 
{
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为 
if(wParam!=IDR_MAINFRAME) return 1; 
switch(lParam) 

case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭” 

LPPOINT lpoint=new tagPOINT; 
::GetCursorPos(lpoint);//得到鼠标位置 
CMenu menu; 
menu.CreatePopupMenu();//声明一个弹出式菜单 
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口,将程序结束。 
menu.AppendMenu(MF_STRING,WM_DESTROY,"退出"); 
//确定弹出式菜单的位置 
SetForegroundWindow();//弹出菜单失去焦点后自动消失
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); 
//资源回收 
HMENU hmenu=menu.Detach(); 
menu.DestroyMenu(); 
delete lpoint; 

break; 
case WM_LBUTTONDBLCLK://双击左键的处理 

Shell_NotifyIcon(NIM_DELETE,&nid);//删除托盘图标
ShowWindow(SW_SHOWNORMAL);//显示主窗口
//this->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//使窗口总是在最前面

break; 

return 0; 
}

6)继承WM_DESTROY:

void C***Dlg::OnDestroy() 
{
CDialog::OnDestroy();

// TODO: Add your message handler code here
Shell_NotifyIcon(NIM_DELETE,&nid); //退出程序后删除托盘图标
}

3.说明:代码均是添加到现有MFC框架代码!

这篇关于VC对话框最小化到托盘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

VC网络协议

// PCControlDlg.cpp : 实现文件//#include "stdafx.h"#include "PCControl.h"#include "PCControlDlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框#ifde

vue2实践:第一个非正规的自定义组件-动态表单对话框

前言 vue一个很重要的概念就是组件,作为一个没有经历过前几代前端开发的我来说,不太能理解它所带来的“进步”,但是,将它与后端c++、java类比,我感觉,组件就像是这些语言中的类和对象的概念,通过封装好的组件(类),可以通过挂载的方式,非常方便的调用其提供的功能,而不必重新写一遍实现逻辑。 我们常用的element UI就是由饿了么所提供的组件库,但是在项目开发中,我们可能还需要额外地定义一

【C++二分查找】2439. 最小化数组中的最大值

本文涉及的基础知识点 C++二分查找 LeetCode2439. 最小化数组中的最大值 给你一个下标从 0 开始的数组 nums ,它含有 n 个非负整数。 每一步操作中,你需要: 选择一个满足 1 <= i < n 的整数 i ,且 nums[i] > 0 。 将 nums[i] 减 1 。 将 nums[i - 1] 加 1 。 你可以对数组执行 任意 次上述操作,请你返回可以得到的 n

VC环境下字符串转整型最终版

剑指Offer 字符串转化为整型 今天闲来无事,就搜了下这方面的知识,结果发现,这个题就是一个经典的算法题,在剑指Offer里已经详细分析了 直接上代码了,运行可靠,如果大家继续深入理解的话,参考这本书:《剑指Offer——名企面试官精讲典型编程题》 博主:http://blog.csdn.net/cadcisdhht/article/details/36875535 ---------

VC环境下window网络程序:UDP Socket程序

最近在学Windows网络编程,正好在做UDPsocket的程序,贴上来: 服务器框架函数:              socket();    bind();    recfrom();  sendto();  closesocket(); 客户机框架函数:            socket();      recfrom();  sendto();  closesocket();

VC环境下整型转换为字符串型(2)

在串口下位机的发送中,可能会用到需要发送数字,显示为字符串型的 和上一篇文字《串口中字符串转换为整型》一正一反,知识点学习会了: #include<iostream.h> #include <stdio.h> #include <string.h>   void inttostr(int m,unsigned char * str) { int length=0;   int tmp,te

New的VC编译器实现

当我们调用 new 的时候,例如 int *p = new int; 时,编译器到底作了什么工作呢?跟进断点看一看。   (在 vc debug模式下 ) double *p1 = new double ; 00411A6E  push        8    00411A70  call        operator new (4111B8h) 00411A75  add

[VC] Visual Studio中读写权限冲突

前置场景: 编译没有报错,但是运行提示 内存异常: 情景1: 如下代码运行异常,提示引发了异常:写入权限冲突。*** 是 0xFFFFF..... char* str = (char*)malloc(10);str[0] = 0x30;  解决方案:要包含头文件<stdlib.h>  情景2: 在FileA文件调用FileB文件的函数,但是在FileA中却没有声明该B函数的原型

几种MFC对话框的隐藏方法

修改CXXAPP中的InitInstance函数,将原来的模态对话框改为非模态对话框,及修改 [cpp]  view plain copy INT_PTR nResponse = dlg.DoModal();     为 [cpp]  view plain copy dlg.Create(CModalHideDlg::IDD);

Qt-桌面服务和托盘

t应用程序在用户的桌面环境中表现良好,但某些集成需要额外的,有时是特定于平台的技术。 Qt中的各种类旨在帮助开发人员将应用程序集成到用户的桌面环境中。这些类使开发人员能够在使用跨平台API的同时利用原生服务。 QDesktopServices 访问常用桌面服务的方法 QSystemTrayIcon 系统托盘中应用程序的图标 开放外部资源 尽管Qt提供了处理和显示资源的工具,如常见的图像