我们在诸如金山词霸的软件中看到,应用程序在任务栏的右下角加上了一个图标,当用鼠标左击和右击该图标时,会出现不同的菜单,这种程序是怎么实现的呢?
其实这是比较简单的,只要我们知道window的一些数据结构及相关的api函数就可以实现了。本人曾在vc及delphi中都实现过这种程序,以下我的一些心得,希望对大家有借鉴作用。
在delphi中的实现:
请new一个form并加入以下的代码:
请new一个form 并加入以下的代码:
unit unit1;
interface
uses
windows, messages, sysutils, classes, graphics, controls, forms, dialogs,
shellapi;
const
wm_mynotify = wm_user + 1000 ;//消息
strnotifytip=hello;//提示
id_main = 100 ; // 定义图标的id
type
tform1 = class(tform)
procedure formcreate(sender: tobject);
procedure formdestroy(sender: tobject);
private
{ private declarations }
public
{ public declarations }
function addicon(hwnd : hwnd):boolean ;
function removeicon(hwnd:hwnd):boolean ;
procedure mynotify(var msg:tmessage);message wm_mynotify;
end;
var
form1: tform1;
implementation
{$r *.dfm}
procedure tform1.formcreate(sender: tobject);
begin
addicon(handle);
end;
//以下函数加入图标,可在程序初始化时加入。
function tform1.addicon(hwnd : hwnd):boolean ;
var
nid : notifyicondata ;
begin
nid.cbsize := sizeof(notifyicondata);
nid.wnd := hwnd;
nid.uid := id_main;
nid.uflags := nif_message or nif_icon or nif_tip;
nid.ucallbackmessage := wm_mynotify;
nid.hicon := loadicon(hinstance,mainicon);
strcopy(nid.sztip,strnotifytip);
addicon := shell_notifyicon(nim_add, @nid);
end ;
function tform1.removeicon(hwnd:hwnd):boolean ;
var
nid : notifyicondata;
beginnid.cbsize := sizeof(notifyicondata);
nid.wnd := hwnd;
nid.uid := id_main;
nid.uflags := 0;
removeicon := shell_notifyicon(nim_delete, @nid);
end ;
procedure tform1.formdestroy(sender: tobject);
begin
removeicon(handle);
end;
procedure tform1.mynotify(var msg:tmessage);
begin
case msg.lparam of
wm_lbuttondown : begin
application.messagebox(left button click ,my notify,mb_ok);
end;
end;
end;
end.
你还可以改变图标。代码如下:
nid.cbsize := sizeof(notifyicondata);
nid.wnd := hwnd;
nid.uid := id_main;
nid.uflags := nif_message or nif_icon or nif_tip;
nid.ucallbackmessage := wm_traynotify;
nid.hicon := 你的图标。
strcopy(nid.sztip,strnotifytip);
shell_notifyicon(nim_modify, @nid);
在vc里的实现也差不多。你几乎可以完全模仿以上的代码自己实现。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器