托盘图标相关
来源:互联网 发布:淘宝office2016激活 编辑:程序博客网 时间:2024/04/30 09:13
核心内容是 Shell_32.Dll 中的Shell_NotifyIcon函数.
Shell_NotifyIcon函数,向任务栏的状态栏发送一个消息
函数原型
BOOL Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA lpdata (即Delphi中的TNotifyIconData的地址)
);
参数:
dwMessage为输入参数,传递发送的消息,表明要执行的操作。可选的值如下:
NIM_ADD
向托盘区域添加一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示这个图标,以便以后再次使用Shell_NotifyIcon对此图标操作。
NIM_DELETE
删除托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示需要被删除的这个图标。
NIM_MODIFY
修改托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示需要被修改的这个图标。
NIM_SETFOCUS
Version 5.0. 设置焦点。比如当用户操作托盘图标弹出菜单,而有按下ESC键将菜单消除后,程序应该使用此消息来将焦点设置到托盘图标上。
NIM_SETVERSION
Version 5.0. 设置任务栏按照第二个参数lpdata指向的NOTIFYICONDATA结构体中的uVersion成员指定的版本号来工作。此消息可以允许用户设置是否使用基于Windows2000的version 5.0的风格。uVersion的缺省值为0,默认指明了使用原始Windows 95图标消息风格。具体这两者的区别请参考msdn中的Shell_NotifyIcon函数说明的Remarks。
lpdata为输入参数,是指向NOTIFYICONDATA结构体的指针,结构体内容用来配合第一个参数wMessage进行图标操作。
如果图标操作成功返回TRUE,否则返回FALSE。
如果dwMessage参数设为NIM_SETVERSION,则如果版本设置成功返回TRUE,如果设置的版本不支持返回FALSE。
TNotifyIconData详解
TNotifyIconData是一个记录类型,按住Ctrl键,在TNotifyIconData 双击即进入ShellAPI.pas单元【注意加入引用】。(注:在Delphi中,这是一个非常好的对源代码进行分析的方法,源代码说明一切,你要想知道程序背后的内幕,最好的方法就是分析源代码!)此时出现了以下赋值语句:
TNotifyIconData = TNotifyIconDataA;
TNotifyIconDataA = _NOTIFYICONDATAA;
type
_NOTIFYICONDATAA = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array [0..63] of AnsiChar;
end;
详细介绍:
cbSize就是你定义的NotifyIcon变量的大小,用SizeOf(TNotifyIconData)可以取得,如果你是一个熟练的C/C++程序员,你应该不会陌生。在C/C++中,每当要为一个结构体变量分配内存的时候都要:通过 SizeOf(Struct type) 来获知存放一个这样的结构体变量要多少内存。
Wnd是一个句柄,你希望托盘程序产生的消息有哪个窗体来处理就让Wnd指向那个窗体。例如:你准备在任务栏的托盘小图标上单击时窗体是窗体在“显示”和“隐藏”之间切换,则把Wnd指向主窗体。
uID:如果你要创建多个托盘小程序,那么怎么区分它们呢?就是靠这个ID号来区分。
uFlags是一个标志位,它表示当前所创建的托盘程序具有哪些性质:
NIF_ICON 表示当前所设置的图标(即hIcon的值)是有效的
NIF_MESSAGE 表示当前所设置的系统消息(即uCallBackMessage的值)是有效的
NIF_TIP 表示当前所设置的提示条(即szTip的值)是有效的。
uCallBackMessage这是7个部分里面最重要的一个。这里指定一个回调消息,也就是说这里定义一个消息名,当你单击或者右击托盘图标的时候就会向你在Wnd所指向的窗体发送一个在uCallBackMessage中定义的消息名,然后你在程序中定义一个消息出来函数来处理这个消息。这样就把 Windows关于消息的整套流程都处理好了。
hIcon为托盘图标的句柄,根据这个句柄你就可以增加、修改、删除图标。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
szTip就是当你的鼠标放到任务栏托盘的小图标上的时候弹出来的提示信息。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
NotifyIcon定义示例:
With NotifyIcon do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle; //指向当前窗体Form1的句柄
uID:=1;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage:=MY_MSG; //自定义类型 MY_MSG = WM_USER + 1;//小于WM_USER为windows占用,大于为自定义
hIcon:=Application.Icon.Handle;
szTip:= 'Test';
end;
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
关联鼠标点击等事件
在Form结构中声明procedure WMNID(var msg:TMessage);message WM_NID; //声明后加消息名表示当系统发来此消息时自动触发该进程.
procedure TForm1.WMNID(var msg:TMessage);
var
mypt:Tpoint;
begin
case msg.LParam of
WM_LBUTTONUp: Form1.Visible:=not Form1.Visible;
WM_RBUTTONUP:
begin
ShowMessage('您点击的是右键');
GetCursorPos(mypt);
PopupMenu1.Popup(mypt.X, mypt.Y); //弹出右键菜单
end;
End;
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
- 托盘图标相关
- 托盘图标
- 托盘图标
- 托盘图标
- 托盘图标
- 托盘图标
- AIR 托盘处理,托盘图标,文件托盘
- MFC对话框初始化运行时如何隐藏,托盘图标,任务栏图标的相关问题
- 托盘图标提示
- 托盘图标提示
- 如何制作托盘图标?
- VB中的托盘图标
- 托盘图标实例
- 弹出最小托盘图标
- delphi 枚举托盘图标
- 托盘区图标操作
- 建立程序托盘图标
- 托盘图标提示
- 关于[Serializable]
- 记号: 控件属性值的绑定
- 使用JS来判断页面中的链接是否有效
- C#导出Excel总结
- 二.redis 数据类型
- 托盘图标相关
- 编程心得
- 推荐一个SDK(引擎): HeliumProject
- 编程心得
- 签约之感
- 编程心得
- 【Killua笔试面试题整理】连续整数之和为1000
- 签约之感
- 对Nand flash读操作的分析