搜档网
当前位置:搜档网 › MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘
MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘

一、托盘是什么

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

二、NOTIFYICODDATA结构和Shell_NotifyIcon函数

1、NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对

应的窗口等内容。其定义为:

typedef struct _NOTIFYICONDATA {

DWORD cbSize;

//以字节为单位的这个结构的大小

HWND hWnd;

//接收托盘图标通知消息的窗口句柄

UINT uID;

//应用程序定义的该图标的ID号

UINT uFlags;

//设置该图标的属性

UINT uCallbackMessage;

//应用程序定义的消息ID号,此消息传递给hWnd

HICON hIcon; //图标的句柄

char szTip[64]; //鼠标停留在图标上显示的提示信息

} NOTIFYICONDATA, PNOTIFYICONDATA;

该结构中,成员uFlags可以是下列的组合或其中之一:

NIF_ICON:设置成员hIcon有效

NIF_MESSAGE:设置成员uCallbackMessage有效

NIF_TIP:设置成员szTip有效

2、全局函数Shell_NotifyIcon()用于在托盘上增加、删除或修改图标。其原型为:

WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA pnid);

Pnid是上面的NOTIFYICONDATA结构的指针。

dwMessage是被传递的消息,可以是以下消息之一:

NIM_ADD:增加图标

NIM_DELETE:删除图标

NIM_MODIFY:修改图标

三、如何实现

1、在CYourDlg.cpp文件中定义一个变量NOTIFYICONDATA m_nid;

2、在CYourDlg.h文件中定义宏#define WM_SHOWTASK WM_USER+1

3、在CYourDlg::OnInitDialog()函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。

//---------------------------托盘显示---------------------------------//

m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);

m_nid.hWnd = this->m_hWnd;

m_nid.uID = IDR_MAINFRAME;

m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;

m_nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称

m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

strcpy(m_nid.szTip, "服务器程序"); // 信息提示条为"服务器程序"

Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标

4、在CYourDlg.h文件中声明消息函数原型

LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);

5、在CYourDlg.cpp文件中进行消息映射

在BEGIN_MESSAGE_MAP(CYourDlg, CDialog)和END_MESSAGE_MAP中间加入以下代码:

ON_MESSAGE(WM_SHOWTASK,OnShowTask)

6、在CYourDlg.cpp文件中添加自定义的消息响应代码,左键双击弹出应用程序主窗口,右键单击弹出菜单。

LRESULT CYourDlg::OnShowTask(WPARAM wParam, LPARAM lParam)

{

if(wParam != IDR_MAINFRAME)

return 1;

switch(lParam)

{

case WM_RBUTTONUP: // 右键起来时弹出菜单

{

LPPOINT lpoint = new tagPOINT;

::GetCursorPos(lpoint); // 得到鼠标位置

CMenu menu;

menu.CreatePopupMenu(); // 声明一个弹出式菜单

menu.AppendMenu(MF_STRING, WM_DESTROY, "关闭");

menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);

HMENU hmenu = menu.Detach();

menu.DestroyMenu();

delete lpoint;

}

break;

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

{

this->ShowWindow(SW_SHOWNORMAL); // 显示主窗口

}

break;

}

return 0;

}

7、添加WM_SIZE的消息映射函数,处理最小化时的操作。

void CYourrDlg::OnSize(UINT nType, int cx, int cy)

{

CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here

if(nType == SIZE_MINIMIZED)

{

ShowWindow(SW_HIDE); // 当最小化时,隐藏主窗口

}

}

8、添加WM_DESTROY的消息响应函数,关闭窗口时将托盘中的应用程序图标删除BOOL CYourDlg::DestroyWindow()

{

// TODO: Add your specialized code here and/or call the base class

// 在托盘区删除图标

Shell_NotifyIcon(NIM_DELETE, &m_nid);

return CDialog::DestroyWindow();

}

经过以上的步骤,就编写出了一个简单的可以最小化到托盘的程序。该程序在一启动时,在托盘创立应用程序的图标,最小化程序时隐藏主窗口,双击托盘区的图标时,显示主窗口,右键点击托盘区窗口时,弹出关闭菜单。

程序最小化到托盘

VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中(就是为应用程序在桌面右下角添加一个图标,和QQ类似)有位老兄说我乱贴,可能这位老兄已经看得眼花缭乱了,Shell_NotifyIcon 是一个Windows SDK的一个函数,只要你在windows下编程,不管你是BCB、VC、VB,都可以调用它来实现托盘图标,只是调用方法不同罢了。 常常能见到一些优秀的软件在运行后会将其应用程序图标加入到系统托盘中。如果能将自己编写的应用程序的图标也加入到系统托盘中,将会使你的程序显得很有专业水准。其实这并不困难,与系统托盘通信的函数只有一个: Shell_NotifyIcon (UINT message, NOTIFYICONDATA &m_nid); 首先看一下该函数的两个参数。 第一个参数message可以取以下值:NIM_ADD 向托盘中加入一个图标; NIM_MODIFY 修改托盘中的图标;NIM_DELETE 从托盘中删除一个图标; 第二个参数m_nid是NOTIFYICONDATA结构的一个引用。该结构的原型如下: typedef struct _NOTIFYICONDATA { DWORD cbSize;// 结构的大小,必须在程序中给出 HWND hWnd; //是你程序中将要接收托盘消息的窗口句柄 UINT uID; // 应用程序中定义的托盘图标ID,此参数用作标识 UINT uFlags; //设置属性,低三位有意义,0--7,如下: //第一位//#define NIF_MESSAGE 0x1 // uCallbackMessage参数有效 //第二位//#define NIF_ICON 0x2 // hIcon参数有效 //第三位//#define NIF_TIP 0x4 // szTip参数有效UINT uCallbackMessage; // 自定义的消息ID值,一定不要与以有的消息ID相重。 HICON hIcon; //显示在系统托盘上的Icon的句柄,可以为系统的IDI_WINLOGO等 CHAR szTip[64]; // 用于图标显示的提示字符串 } NOTIFYICONDATA; 为了接收到来自托盘的通知消息你可以将uCallbackMessage设定为你所定义的消息ID值,同时设定NIF_MESSAGE标志。这样当用户在你的托盘图标上移动或按下鼠标时,Windows将发出消息:该消息的messageID是你在uCallbackMessage中定义的值;wParam是你定义的uID值;而lParam是鼠标事件(如WM_LBUTTONDOWN),这样你的应用程序就能响应该事件了。因此,为了将自己的应用程序加入到系统托盘中,首先得建立一处理托盘通知消息的窗口对象,然后将窗口对象与你自己的托盘通知消息联系起来并建立相应的托盘通知消息映射机制,以便你的窗口对象能处理相应的事件。可以看到结构体NOTIFYICONDATA中,其成员变量hWnd,uID,uFlags均用于在窗口对象与你自己的托盘通知消息之间建立联系,而成员变量uCallbackMessage则必须是对应于你的窗口对象的托盘通知消息ID值。于是要完成的工作有: (1)建立一处理托盘通知消息的窗口对象; (2)建立一结构体NOTIFYICONDATA变量,并给变量的相应域赋值以在托盘通知消息与窗口对象之间建立联系; (3)建立相应的托盘通知消息映射机制; (4)调用Shell_NotifyIcon函数以在系统托盘中加入、修改或删除图标; (5)当然别忘了在你的窗口对象中编写相应的事件响应函数。

福建师范大学网络与继续教育学院《计算机应用基础》期末考试A卷2020年2月(可编辑修改word版)

▆■■■■■■■■■■■■ 用 POP3(IMAP)协议读取邮件。 4、简述通过无线 Wi-Fi 接入 Internet 的方法。 答:1.先申请运营商宽带,运营商安装好光猫,开通互联网。 2.无线路由器接到光猫上,采用动态获取方式接入互联网。 3.在无线路由器上配置 Wi-Fi 名称和密码。 4.手机或笔记本电脑用 Wi- Fi 搜索无线路由器名称,输入密码连接成功,接入 Internet。 5、简述防火墙的作用及其安全方案。 答:防火墙是目前一种最重要的网络防护设备。从专业角度讲,防火墙是位于两个(或多个)网络间,实施网络之间访问控制的一组组件集合。一般有五个功能。 1.防火墙是网络安全的屏障:一个防火墙(作为阻塞点、控制点)能极大地提高一个内部网络的安全性,并通过过滤不安全的服务而降低风险。由于只有经过精心选择的应用协议才能通过防火墙,所以网络环境变得更安全。如防火墙可以禁止诸如众所周知的不安全的 NFS 协议进出受保护网络,这样外部的攻击者就不可能利用这些脆弱的协议来攻击内部网络。防火墙同时可以保护网络免受基于路由的攻击,如 IP 选项中的源路由攻击和 ICMP 重定向中的重定向路径。防火墙应该可以拒绝所有以上类型攻击的报文并通知防火墙管理员。 2.防火墙可以强化网络安全策略:通过以防火墙为中心的安全方案配置,能将所有安全软件(如口令、加密、身份认证、审计等)配置在防火墙上。与将网络安全问题分散到各个主机上相比,防火墙的集中安全管理更经济。例如在网络访问时,一次一密口令系统和其它的身份认证系统完全可以不必分散在各个主机上,而集中在防火墙一身上。 3.对网络存取和访问进行监控审计:如果所有的访问都经过防火墙,那么,防火墙就能记录下这些访问并作出日志记录,同时也能提供网络使用情况的统计数据。当发生可疑动作时,防火墙能进行适当的报警,并提供网络是否受到监测和攻击的详细信息。另外,收集一个网络的使用和误用情况也是非常重要的。首先的理由是可以清楚防火墙是否能够抵挡攻击者的探测和攻击,并且清楚防火墙的控制是否充足。而网络使用统计对网络需求分析和威胁分析等而言也是非常重要的。 4.防止内部信息的外泄:通过利用防火墙对内部网络的划分,可实现内部网重点网段的隔离,从而限制了局部重点或敏感网络安全问题对全局网络造成的影响。再者,隐私是内部网络非常关心的问题,一个内部网络中不引人注意的细节可能包含了有关安全的线索而引起外部攻击者的兴趣,甚至因此而暴漏了内部网络的某些安全漏洞。使用防火墙就可以隐蔽那些透漏内部细节如 Finger,DNS 等服务。Finger 显示了主机的所有用户的注册名、 真名,最后登录时间和使用 shell 类型等。但是 Finger 显示的信 息非常容易被攻击者所获悉。攻击者可以知道一个系统使用的频繁程度,这个系统是否有用户正在连线上网,这个系统是否在被攻击时 引起注意等等。防火墙可以同样阻塞有关内部网络中的DNS 信息,这样一台主机的域名和 IP 地址就不会被外界所了解。 5.防火墙还支持具有 Internet 服务特性的企业内部网络技 术体系 VPN(虚拟专用网)。

VB托盘程序详解

【转载】VB托盘程序详解 2007/11/25 20:53 1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False 2、菜单:工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas 3、在Module1中写下如下代码: Option Explicit Public Const MAX_TOOLTIP As Integer = 64 Public Const NIF_ICON = &H2 Public Const NIF_MESSAGE = &H1 Public Const NIF_TIP = &H4 Public Const NIM_ADD = &H0 Public Const NIM_DELETE = &H2 Public Const WM_MOUSEMOVE = &H200 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_LBUTTONUP = &H202 Public Const WM_LBUTTONDBLCLK = &H203 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205 Public Const WM_RBUTTONDBLCLK = &H206 Public Const SW_RESTORE = 9 Public Const SW_HIDE = 0 Public nfIconData As NOTIFYICONDATA Public Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * MAX_TOOLTIP End Type Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

电气工程师个人简历模板

电气工程师个人简历模板 ◆基本信息 姓名: 彭先生 目前所在:东莞年龄:34 户口所在:湖南国籍:中国 婚姻状况:已婚民族:汉族 诚信徽章:未申请身高:170cm 人才测评:未测评体重: 我的特长: ◆求职意向 人才类型:普通求职 应聘职位:工程/设备-经理/主管/工程师 工作年限:10职称: 求职类型:全职可到职日期:一个月 月薪要求:希望工作地区:广东省,, ◆工作经历 公司性质:外商独资所属行业:电子技术/半导体/集成电路担任职位:电气工程师

工作描述:1、对耗能高的动力设备进行优化节能改造,特别是已停产的老设备。如公司的美国约克冷冻机直接去掉滑阀,由变频器控制压缩机,达到节能与优化的目的。 2、对新增动力设备如空压机、冷冻机、中央空调、真空泵系统与净化车间控制设备、高低压配电系统等的设备招标选型,直到正常投入生产。同时制定严格的安全操作规程与保养、点检计划,保障设备安全运行。 3、公司纯水系统、污水处理系统的规划与维护、保养。根据制定的操作规程合理安排安全操作与维护保养,保障系统的安全,达到生产与国家环保要求。 离职原因: 中粮新沙粮油工业(东莞)有限公司起止年月:2004-03~2008-05 担任职位:电气主管 2、对精炼包装车间和浸出车间发油台的由PLC、变频器、触摸屏等工控元件控制的自控系统,由本人重新进行了设计,达到即提高了工作效率又优化了工艺。 4、做好维修人员的生产调度和培训工作及安全检查,对于技术上的难题给予技术性指导。同时做好易损件的申购工作,以备紧急情况之急需,保证生产。 离职原因: 汤姆逊多媒体(东莞)有限公司起止年月:2000-03~2004-03 公司性质:外商独资所属行业:通信/电信/网络设备 担任职位:电气工程师 工作描述:主要是塑料车间、生产部、仪器仪表的维护与安全检查,特别是自动化设备的维修与保养,PLC、变频器、伺服电机等自动化设备的设计与安全维护。 离职原因:

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘 一、托盘是什么 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。 二、NOTIFYICODDATA结构和Shell_NotifyIcon函数 1、NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对 应的窗口等内容。其定义为: typedef struct _NOTIFYICONDATA { DWORD cbSize; //以字节为单位的这个结构的大小 HWND hWnd; //接收托盘图标通知消息的窗口句柄 UINT uID; //应用程序定义的该图标的ID号 UINT uFlags; //设置该图标的属性 UINT uCallbackMessage; //应用程序定义的消息ID号,此消息传递给hWnd HICON hIcon; //图标的句柄 char szTip[64]; //鼠标停留在图标上显示的提示信息 } NOTIFYICONDATA, PNOTIFYICONDATA; 该结构中,成员uFlags可以是下列的组合或其中之一:

NIF_ICON:设置成员hIcon有效 NIF_MESSAGE:设置成员uCallbackMessage有效 NIF_TIP:设置成员szTip有效 2、全局函数Shell_NotifyIcon()用于在托盘上增加、删除或修改图标。其原型为: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA pnid); Pnid是上面的NOTIFYICONDATA结构的指针。 dwMessage是被传递的消息,可以是以下消息之一: NIM_ADD:增加图标 NIM_DELETE:删除图标 NIM_MODIFY:修改图标 三、如何实现 1、在CYourDlg.cpp文件中定义一个变量NOTIFYICONDATA m_nid; 2、在CYourDlg.h文件中定义宏#define WM_SHOWTASK WM_USER+1 3、在CYourDlg::OnInitDialog()函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。 //---------------------------托盘显示---------------------------------// m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); m_nid.hWnd = this->m_hWnd; m_nid.uID = IDR_MAINFRAME; m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ; m_nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称 m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(m_nid.szTip, "服务器程序"); // 信息提示条为"服务器程序" Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标 4、在CYourDlg.h文件中声明消息函数原型

计算机二级考试《VB》模拟试题及答案

计算机二级考试《VB》模拟试题及答案 2016计算机二级考试《VB》模拟试题及答案 一、基本操作题 (1)在名称为Forml、标题为“球类项目”且没有最大化和最小化按钮的窗体上画1个名称为Combol的组合框。组合框中的文本内容为空,表项内容有“乒乓球”、“羽毛球”和“网球”3项。运行后的窗体如图所示。 注意:存盘时必须存放在考生文件夹下,工程文件名为 sjtl.vbp,窗体文件名为sjtl.frm。 (2)在名称为Forml、标题为“转换”的窗体上,画1个名称为Shapel、边框宽度为3的形状。再画两个标题分别为“椭圆”和“圆”的命令按钮。如下图所示。 要求:编写适当的事件过程,使得单击“椭圆”按钮时,Shapel 的形状变换为椭圆;单击“圆”按钮时,Shapel的形状变换为圆。程序中不得使用变量,每个事件过程中只能写一条语句。 注意:存盘时必须存放在考生文件夹下,工程文件名为 sjr2.vbp,窗体文件名为sjr2.frm。 二、简单应用题 (1)在考生文件夹下有一个工程文件sjt3.vbp。窗体Forml上有两个标题分别是“读数据”和“查找”的命令按钮。请画1个名称为Textl、初始值为空的文本框,该文本框允许显示多行内容,且有垂直滚动条,如图所示。程序功能如下。 ①在考生文件夹下的in.3.dat文件中存有100个正整数。单击“读数据”按钮,则将文件in3.dat中的数据读入数组a中。 ②单击“查找”按钮,则查找数组a中所有为7的倍数的数据,并将这些数据顺次显示在Textl文本框内(数据之间用空格隔开)。

“读数据”按钮的Click事件过程已经给出,请编写程序完成“查找”按钮的Click事件过程,实现上述功能。 注意:考生不得修改窗体文件中已经存在的控件和程序,在结束程序运行之前,必须使用“查找”按钮完成查找过程,且必须用窗 体右上角的关闭按钮结束程序,否则无成绩。最后将程序按原文件 名存盘。 (2)考生文件夹下有一个工程文件sit4.vbp。在窗体Forml上有 两个名称为Commandl和Command2、标题分别为“重输”和“查找”的命令按钮。程序功能如下。 单击“重输”按钮,则清空Textl中的`内容,等待用户输入由 空格隔开的若干个英文单词;单击“查找”按钮,则找出Textl中最 长的单词,并将其显示在Text2中。某一次的运行效果如图所示。 请将“查找”按钮的Click事件过程中的注释符去掉,把?改为正确 内容,以实现上述程序功能。 注意:考生不得修改窗体文件中已经存在的控件和程序,最后将程序按原文件名存盘。 三、综合应用题 考生文件夹下有一个工程文件sjt.s.vbp。在窗体Forml上有两 个标题分别是“产生数据”和“重新排列”的命令按钮,有两个标 题为“原始数据”和“排列数据”的标签。程序功能如下。 ①单击“产生数据”按钮,则随机产生20个一位整数,存人数 组a中,并同时显示在Textl中。 ②单击“重新排列”按钮,则重新排列数组a中的元素:使等值的元素相邻存放,并且保持它们在数组a中首次出现的相对次序;最 后将排列结果显示在Text2中。某一次运行结果如图所示。 请将“重新排列”按钮的Click事件过程中的注释符去掉,把“?”改为正确内容,以实现上述程序功能。

VB6.0实现窗体最小化时到系统托盘区

VB6.0将窗体最小化到系统托盘区 使用说明:共有两个方法,经个人实际测试(环境:xpsp3 vb6.0)第二个控件法最有效果,第一个方法在启动时确实在右下角,但是弹出后再次最小化就跑到屏幕左下角了,无法最小化,不知道是啥原因,希望大家改进代码。本人力荐第二种小巧有效简单的方法。 ---------------------------------------------------------------------------------------------------- 方法一 托盘,亦即程序最小化后程序图标隐藏到屏幕右下角的任务栏里。这种最小化方法比普通的最小化节约空间,因此备受欢迎,很多软件都具有这样的功能。在VB中,可用API 函数来实现托盘功能,但比较复杂,不太好操作。 相对而言采用一种非常简单易行的方法:控件法,才是最适合最方便的。下面要使用已被微软封装好的控件:csystray1(名称可自定)。 说到控件,大家可能要皱眉头了:去哪找呀?放心!这个控件就躺在你的VB安装盘里(目录为:COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY)!不过,得处理一下:请在Tool 文件夹里查找一个名叫Systray的目录,将它拷贝到硬盘,用VB打开该目录下的工程,必要的话可作些改进(如更换图标、添加功能等),然后编译成ocx控件,可以随意命名。为方便使用起见,最好编译到Windows\System目录下。好了,现在我们就可以在我们的程序中使用此控件来轻松实现托盘功能了。vb中添加控件的方法就不用我说了吧? ---------------------------------------------------------------------------------------------------------- 控件的属性和事件浅析: 该控件的InTray属性是用来设置是否显示在托盘中,True为显示在托盘,False为不显示; 该控件的TrayIcon属性是在托盘中显示的图标式样; 该控件的TrayTip属性是鼠标移动到该控件上面时,显示的提示文字; 该控件的重要事件是几个我们常用的鼠标事件:按下、放开、移动、双击,编程时就是利用这些事件达到在任务栏中控制程序的目的。 ------------------------------------------------------------------------------------------------------- 源代码如下: '使程序最小化时显示到系统托盘 Private Sub Form_Resize() If Me.WindowState = 1 Then '如程序为最小化则—— cSysTray1.InTray = True '隐藏到任务栏 Me.Visible = False '让程序界面不可见 End If End Sub '点击托盘图标后,让程序窗体显示出来 Private Sub CsysTray1_MouseDown(Button As Integer, Id As Long) Me.WindowState = 0 '程序回复到Normal状态 Me.Visible = True '从任务栏中清除图标 cSysTray1.InTray = False '令程序界面可见

用VB6.0实现将窗体最小化到系统托盘区

用VB6.0实现将窗体最小化到系统托盘区 使用说明:共有两个方法,经个人实际测试(环境:xpsp3 vb6.0)第二个控件法最有效果,第一个方法在启动时确实在右下角,但是弹出后再次最小化就跑到屏幕左下角了,无法最小化,不知道是啥原因,希望大家改进代码。本人力荐第二种小巧有效简单的方法。 方法一 托盘,亦即程序最小化后程序图标隐藏到屏幕右下角的任务栏里。这种最小化方法比普通的最小化节约空间,因此备受欢迎,很多软件都具有这样的功能。在VB中,可用API 函数来实现托盘功能,但比较复杂,不太好操作。 相对而言采用一种非常简单易行的方法:控件法,才是最适合最方便的。下面要使用已被微软封装好的控件:csystray1(名称可自定)。 说到控件,大家可能要皱眉头了:去哪找呀?放心!这个控件就躺在你的VB安装盘里(目录为:COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY)!不过,得处理一下:请在Tool 文件夹里查找一个名叫Systray的目录,将它拷贝到硬盘,用VB打开该目录下的工程,必要的话可作些改进(如更换图标、添加功能等),然后编译成ocx控件,可以随意命名。为方便使用起见,最好编译到Windows\System目录下。好了,现在我们就可以在我们的程序中使用此控件来轻松实现托盘功能了。vb中添加控件的方法就不用我说了吧? 控件的属性和事件浅析: 该控件的InTray属性是用来设置是否显示在托盘中,True为显示在托盘,False为不显示; 该控件的TrayIcon属性是在托盘中显示的图标式样; 该控件的TrayTip属性是鼠标移动到该控件上面时,显示的提示文字; 该控件的重要事件是几个我们常用的鼠标事件:按下、放开、移动、双击,编程时就是利用这些事件达到在任务栏中控制程序的目的。 源代码如下: '使程序最小化时显示到系统托盘 Private Sub Form_Resize() If Me.WindowState = 1 Then '如程序为最小化则—— cSysTray1.InTray = True '隐藏到任务栏 Me.Visible = False '让程序界面不可见 End If End Sub '点击托盘图标后,让程序窗体显示出来 Private Sub CsysTray1_MouseDown(Button As Integer, Id As Long) Me.WindowState = 0 '程序回复到Normal状态 Me.Visible = True '从任务栏中清除图标 cSysTray1.InTray = False '令程序界面可见 Me.setfocus End Sub

c最小化托盘

(一)原理 程序实现:最小化时隐藏至托盘,双击显示窗口,右键弹出快捷菜单“退出”并添加了响应函数。 1、托盘化的原理:首先要将窗口隐藏,然后在右下角托盘中绘制图标。 2、恢复的原理:将窗口显示,再将托盘中的图片删除。 (二)总体程序实现 1、首先建立一个基于对话框的MFC程序"CTrayDlg"。 然后在TrayDlg.h文件里加入自定义消息WM_SHOWTASK: #define WM_SHOWTASK (WM_USER + 0x100)//一般数值大于 100//{{AFX_MSG(CTrayDlg) afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAMlParam);//}}AFX_MSG DECLARE_MESSAGE_MAP() 2、在TrayDlg.cpp文件里加入如下代码: BEGIN_MESSAGE_MAP(CTrayDlg, CDialog) //{{AFX_MSG_MAP(CTrayDlg) 中间加入消息声明: ON_MESSAGE(WM_SHOWTASK,OnShowTask) //}}AFX_MSG_MAP END_MESSAGE_MAP() 3、在CTrayDlg的::OnSysCommand(UINT nID, LPARAM lParam)函数体中增加一个命令响应:

if(nID==SC_MINIMIZE) ToTray();//最小化到托盘的函数 (三)具体函数内容 1、最小化到托盘函数 TrayDlg.h中添加函数声明: voidToTray(); TrayDlg.cpp中定义函数体: voidCTrayDlg::ToTray() { NOTIFYICONDATAnid; //NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息, //它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容。 nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//以字节为单位的这个结构的大小 nid.hWnd=this->m_hWnd;//接收托盘图标通知消息的窗口句柄 nid.uID=IDR_MAINFRAME;//应用程序定义的该图标的ID号 nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;//设置该图标的属性 nid.uCallbackMessage=WM_SHOWTASK;//应用程序定义的消息ID号,此消息传递给hWnd nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRA ME));//图标的句柄 strcpy(nid.szTip,"我的托盘我作主");//鼠标停留在图标上显示的提示信息Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标de函数,函数说明见文章附录

VB学习总结

1.2.1 VB简介 VB:Visual Basic BASIC:Beginner’s All-Purpose Symbolic Instruction Code BASIC语言是专门为初学者设计的计算机语言,于1964年问世。最初只有十几条语句,由于简单易学而受到了用户的欢迎,很快就应用于各个领域。随着计算机科学技术的发展,计算机厂商在原有的基础上不断的添加新的功能,进行扩展强化,各种BASIC版本应运而生,使它成为最常用的计算机程序设计语言。 1987年Microsoft公司开发了Quick BASIC,它克服了原有BASIC结构化差和运算速度慢的缺点,并且在功能上大为扩展,具有编辑、运行和调试的集成环境。Quick BASIC兼容以前的传统BASIC。 VB是Microsoft公司在Quick BASIC的基础上为开发Windows应用程序而提供的强有力的开发环境和工具,是具有很好的图形用户界面(Graphic User Interface,简称GUI)的程序设计语言。它采用面向对象和事件驱动的程序设计两种新机制,把过程化和结构化编程集合在一起。正是由于它在应用程序开发中的图形化构思,使得开发者能非常容易地创建一个窗口(在VB中称为窗体—Form),然后从VB工具箱选择控件放在窗体内,无需编写程序。就如同目前盖房子所用的门、窗、水泥、钢筋、砖等,都是现成的材料,只要到建筑现场组合就可以了。用VB设计程序就好比现代的建筑师采用现代科技的产品,而用传统DOS (Disk Operating System)下的BASIC的就如同早先的工匠,一砖、一瓦、一木都要自己动手。 Visual Basic for Windows是一种具有良好图形用户界面(GUI)的程序设计语言,同时又是一种完全支持面向对象程序设计的语言。 Visual是指开发图形用户界面(GUI)的方法,不需要编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象拖放到窗体上即可。这种直观的编程方法,也叫做可视化编程。Visual的意思是“视觉的”或“可视的”,也就是直观的编程方法。就像使用“画图”之类的绘图程序,通过选择画图工具来画图一样。 Basic是指BASIC语言,之所以叫做“Visual Basic”就是因为它使用了BASIC语言作为代码。VB在原有BASIC语言的基础上进一步发展,至今包含了数百条语句、函数及关 键词,其中很多与Windows GUI有直接关系。 1.2.2 VB的发展过程 1991年:为了简化Windows应用程序的开发,Microsoft公司推出了Visual Basic 1.0。 1992年:Microsoft公司推出了Visual Basic 2.0。 1993年:Microsoft公司推出了Visual Basic 3.0。 1995年:随着Windows95的发布,Visual Basic 4.0也随之推出。 1997年:Microsoft公司开始推出Windows开发工具套件Microsoft Visual Studio 1.0,其中包括了Visual Basic 5.0。

托盘使用标准规范

使用托盘标准 订立部门:餐厅程序制定: 标题:餐饮部标准化服务程序程序批准: 订立目的:统一餐厅使用托盘标准。 程序内容: 托盘的基本形状分为圆托和方托,托盘的方式分为轻托和重托,托盘的规格为圆托14",方托16"×22"。 一、操作方法: (一)轻托手法 1、左手臂弯曲成90度,左手自然伸出,掌心向上,形成凹型。 2、手指伸直构成三点承力,大拇指指端到手掌的掌根部位承力较大,是整个 托盘的重心所在。 3、利用食指、中指、无名指及小指的指肚牢固地抓吸找盘底部,以便惯性倾 斜。 4、注意掌心不能与盘底接触,保持托盘平衡。 5、如托物停立时,应将右手搭于腰部手指自然伸开,右臂则应自然摆动。 (二)重托手法 1、左手臂弯曲成90度,五指自然分开,掌根部分与五指托住盘底。 2、注意掌心不与盘底接触,保持平衡。 3、右手扶住托盘前右角协助将托盘起至胸前,左手向上转动手腕,将手盘稳 托于肩上。 4、盘底不搭肩,盘前不近嘴,盘后不靠发。 5、上肩时,右手自然移至托盘前左角,待平衡后放下。 二、理盘要领 1、根据不同用途选择好托盘,注意托盘清洁与卫生。

2、根据物品的形状、体积和使用先后次序进行合理装盘。通常重物、高物放在托 盘里档靠近身体,先服务或先上的物品在外档,方便拿取。 3、将盘内物品摆放整齐,物品间留有空隙,如有空杯,通常围于外档。 4、圆托装椭圆形菜盘,应横放,便于掌握重心。 5、方托要将菜盘置于中心线两侧,要求物品重量分布均匀,不能重叠放置。 三、托物行走 1、保持头正、肩平、胸挺、身直,步幅适中,脚跟先落地,做到肢体协调。 2、表情轻松自然,双目平视前方,利用双目余光留意托盘。 3、行进时,右手臂自然摆动,左手上臂也应自然摆动,保持身体平衡。 4、行走要快而稳,忌散步或跑步运行。 5、托物行进时,如遇客人须礼让客人先行。如需停止,应将托盘侧于身旁,保护 托物的平衡。 6、如发生意外碰撞,用右手环抱,瓶身靠向身体,尽量减少对客人的影响程度。 四、五种基本步伐 1、常步:平常行进的步伐,要步距均匀,快慢适宜。 2、快步:步幅应稍大,步速应稍快,但不能跑,主要端送需要热吃的菜肴。 3、碎步:使用较小的步幅,较快的步速行进,主要适用端汤,可以保持上身 平衡,避免汤汁溢出。 4、垫步:一只脚在前,一只脚在后,前进一步、后跟一步的行进步伐,适合 在穿行狭窄的过道、突遇障碍或靠近席桌减速时使用。 5、跑楼步伐:传菜服务员端托上楼时所使用的一种特殊步伐,其要求是,身体向 前弯曲,重心前倾,一步紧跟一步。 五、基本技巧: 1、托重物时——手掌托于盘三分之二处,可借用于手腕承力,过于向里借用小臂 承力是完全错误的。 2、托轻物时——因托盘受力面积小,需将物品置于托盘中部,保持平衡,禁止半 酒水瓶身横向摆放。 3、托贵物时——行步摆动幅度不易过大,防止意外碰撞,使菜肴变形或汁酱外溢。 4、托多物时——合理装盘,盘内物品的重量分布要均匀,必须考虑便于运送。

vb将程序最小化到托盘

Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long Public Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hicon As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Public Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As Any) As Long Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Public Type POINTAPI x As Long y As Long End Type Public Type NOTIFYICONDATA cbSize As Long '结构的长度 hwnd As Long '消息接收窗口的句柄 uID As Long '图标的标识 uFlags As Long '设置参数 uCallbackMessage As Long '回调消息的值 hicon As Long '图标句柄 szTip As String * 64 '提示字符串 End Type Public Const NIM_ADD = 0 '添加图标 Public Const NIM_MODIFY = 1 '修改图标 Public Const NIM_DELETE = 2 '删除图标 Public Const NIF_MESSAGE = 1 '当有鼠标事件发生时产生消息 Public Const NIF_ICON = 2 ' Public Const NIF_TIP = 4 '图标有提示字符串

vb实现托盘(含程序)

VB托盘 我按照下面的方法建了一个VB程序,可是在我自己的电脑上可以托盘,但换了电脑在别人的电脑上运行就没有托盘了,怎么回事啊! 1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False 2、菜单:工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas 3、在Module1中写下如下代码: Option Explicit Public Const MAX_TOOLTIP As Integer = 64 Public Const NIF_ICON = &H2 Public Const NIF_MESSAGE = &H1 Public Const NIF_TIP = &H4 Public Const NIM_ADD = &H0 Public Const NIM_DELETE = &H2 Public Const WM_MOUSEMOVE = &H200 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_LBUTTONUP = &H202 Public Const WM_LBUTTONDBLCLK = &H203 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205 Public Const WM_RBUTTONDBLCLK = &H206 Public Const SW_RESTORE = 9 Public Const SW_HIDE = 0 Public nfIconData As NOTIFYICONDATA Public Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * MAX_TOOLTIP End Type Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

托盘规范标准

托盘规范标准 1、轻托:用中、小圆形,端菜送酒,因其所托的重量比较轻,故叫轻托;轻托的操作程序和方法是: (1)理盘,根据物品选择好托盘,洗净擦干,在垫上洁净的餐巾或专用托盘垫布,垫布要用清水打湿擦干、铺平,垫布四边与盘底齐。 (2)装盘,需根据物品的形状,体积和使用的先后进行装盘。轻托的物件一般是平摆,不需重叠摆放,用长条盘托相同的物件时,一般要并排摆放、横坚成行;用圆形托盘时,也可摆成圆形、三角形等,在几种不同物件同时装盘时,一般把较重的、体高的物品摆放在里面,把较轻的低矮的物品摆放在外档,将流汁的菜品摆在盘中,成形的菜品摆在两头或四周,将先用的物品放在前边,后用的物品放在里面,重量分布需得当,托盘的中心要安排在中间或稍偏里,这样装盘安全、稳妥、便于托送。 (3)托盘托姿轻托一盘用左手托,左手向上弯曲形成90o的角,小臂垂直于左胸前手肘离腰部约15厘米,掌心向上,五指分开,大拇指指向左肩,其它四指向左上方,用五指和掌根托住盘底(掌心不与盘底相触),平托于左胸前,托盘时要用手指和掌根托盘的平衡,使重心始终在掌心或掌心稍里侧,这样,即使被他人碰撞或发生其它特殊情况时,可随即贴于胸前,防止打泼。 (4)侧托:双脚自然分开,与肩平行、侧肩,在手与肩和左胸:复部成平面开盘。 (5)重托,重托主要用托送较多的菜点,酒水和空盘碟盘中的重量,一般在2.5——5公斤以上,重托的盘子,要选用质地坚固的大、中长条盘。重托方法是: (6)理盘:由于重托的盘经常与菜汤接触,易沾油腻,所以使用前要特别注意擦洗干净,做到无油污、水滴。 (7)装盘,重托装盘常常要重叠摆放,其叠放方法是:上边的菜盘要平均搁在下边两盘或三盘或四盘的盘沿上,叠放形状一般为金字塔形状,如托五盘菜需叠放的,底层可摆四盘在盘中间搁一盘,如是六个大鱼盘,可叠成三层,底层摆三盘,中层摆二盘,上层搁一盘以此类推。 (8)重托的起托:先用双手托盘一头拖放至搁台外,用右手拿住托盘的一头,右手伸开五指,用掌托住盘底,双腿下蹲成骑马蹲档式,腰面向左前弯曲,左手臂随即弯曲成轻托姿势,等右手掌选好托盘重心后,用右手协助左手向上用力将托盘托起,托起后,托盘应悬空托于左肩外上方,盘底约离肩2厘米,右手扶住托盘的前内角,落台重托上台必须先放在菜台上或空桌上,再上菜。 (9)托盘的行走要领 托盘行走时上身挺直,略向前倾,视线开阔,动作敏捷,精力集中,步伐稳健,托盘行走步伐: 1、常步:即是使用平常行走的步伐,要步距均匀,快慢适当。 2、快步:快步的步幅比较大,步速较快,但不能跑,以免泼洒菜肴的汤汁,影响菜品的外形,主要是托送需要热吃的火喉菜肴,如锅巴肉片、铁板类的菜品,因上菜速度慢,会影响菜品的口味。 3、碎步;碎步就是使用较小的步幅,较快的步速行进,主要适用端汤,因此这种步伐可以保持上身平衡,避免汤汁溢出。 4、垫步;垫步即是一只脚在前,一只脚在后,前脚进一步,后脚跟一步的

MFC 对话框系统托盘详细步骤

MFC中将窗口最小化至系统托盘 1.在对话框类中声明NOTIFYICONDATA变量 class CCamProjDlg : public CDialog { ... NOTIFYICONDATA nid; BOOL isNotify; ... } //初始化 isNotify = false; 2.在resource.h文件中自定义消息 #define WM_SHOWTASK 1001 3.在对话框类中声明消息相应函数 class CCamProjDlg : public CDialog { ... afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam); ... } 4、在消息映射中添加 BEGIN_MESSAGE_MAP(CCamProjDlg, CDialog) ... ON_MESSAGE(WM_SHOWTASK,onShowTask) ... END_MESSAGE_MAP() 5.定义消息响应函数 LRESULT CCamProjDlg::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(); // 声明一个弹出式菜单 menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭")); // 增加菜单项"关闭",点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。 menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); // 确定弹出式菜单的位置 SetForegroundWindow(); HMENU hmenu = menu.Detach(); // 资源回收 menu.DestroyMenu(); delete lpoint; }break; case WM_LBUTTONDBLCLK: // 双击左键的处理 { this->ShowWindow(SW_SHOW); // 简单的显示主窗口完事儿}break; } return 0; } 6.在需要最小化的地方添加代码 if ( !isNotify ) { nid.cbSize = (DWORD)sizeof(NOTIFYICONDA TA); nid.hWnd = this->m_hWnd; nid.uID = IDR_MAINFRAME; nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP|NIF_INFO; nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称,注意:这里的消息是用户自定义消息 nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); wcscpy_s(nid.szTip,_T("提示标题")); wcscpy_s(nid.szInfo,_T("提示内容")); wcscpy_s(nid.szInfoTitle,_T("提示标题")); nid.dwInfoFlags = NIIF_INFO; nid.uTimeout = 5000; Shell_NotifyIcon(NIM_ADD,&nid); // 在托盘区添加图标 } ShowWindow(SW_HIDE); // 隐藏主窗口 7.在OnDestroy()函数中添加代码 void CCamProjDlg::OnDestroy()

相关主题