有关消息的迷惑(100分)

  • 主题发起人 主题发起人 JWXLI
  • 开始时间 开始时间
J

JWXLI

Unregistered / Unconfirmed
GUEST, unregistred user!
发送一个自定义消息,这个消息函数进行了如下处理,但我想不通的是,WM_LBUTTONDBLCLK,
WM_RBUTTONDOWN:都应属于消息常量部分的值,但是现在它为什么会是消息的附加lparam部分的值呢?请指点。
procedure TForm1.wmuser(var message: Tmessage);
var
pt:tpoint;
begin
case Message.lparam of
WM_LBUTTONDBLCLK:
begin
form1.Visible :=true;
Shell_NotifyIcon(Nim_Delete,@tid);
end;
WM_RBUTTONDOWN:
begin
GetCursorPos (pt);
SetForegroundWindow (form1.handle);
PopupMenu1.Popup(pt.x,pt.y);
end;
end;
end;
 
WM_TRAYNOTIFY =WM_USER+100;
NID:TNotifyIconData;

NID.cbSize:=sizeof(TNotifyIconData);
……
NID.uCallbackMessage:=WM_TRAYNOTIFY;//TrayIcon消息,由用户定义
Shell_NotifyIcon(NIM_ADD,@NID);
在WM_TRAYNOTIFY的处理函数中lparam就会是一些消息(WM_LBUTTONDBLCLK,
WM_RBUTTONDOWN,或其它消息),它们是TrayIcon上的消息
 
附加的 lparam 表示参数,
比较在屏幕的哪个点点击的,x,y值。
是否按下了ctrl alt 等等。

是为了进一步得到更多的信息。
 
是不是搞错了,应该是
case Message.Msg of
~~~~~~
WM_LBUTTONDBLCLK:
....
 
赞同zw84611,
有些消息会有些附加信息;但这是你自己的wm_user,你在怎么用,你最清楚;
 
赞同zw84611
 
[red]to zw84611,卡色,yetxr.
JWXLI写的没有错,他写的是一个托盘的消息,左键双击显示窗体,并把托盘删除。右键则
弹出PopupMenu。[/red]

先看一下消息的定义吧
type
TMsg = packed record
hwnd: HWND; / /窗口句柄
message: UINT; / /消息常量标识符
wParam: WPARAM ; // 32位消息的特定附加信息
lParam: LPARAM ; [gold]// 32位消息的特定附加信息[/gold]
time: DWORD; / /消息创建时的时间
pt: TPoint; / /消息创建时的鼠标位置
end ;
wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam 通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer
都是3 2位的,因此,它们之间可以相互转换。
 

Similar threads

后退
顶部