sos,关于消息传递的问题,我真的找不到答案了!(100分)

  • 主题发起人 主题发起人 blizzard
  • 开始时间 开始时间
B

blizzard

Unregistered / Unconfirmed
GUEST, unregistred user!
const
WM_BARICON=WM_USER+200;
.......
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var Message:TMessage);message WM_BARICON;
.......
procedure TForm1.WMSysCommand(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if Message.WParam = SC_ICON then (问题1处)
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Form1.Visible := False;
end;
end;
procedure TForm1.WMBarIcon(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if (Message.LParam = WM_LBUTTONDOWN) then (问题2处)
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Form1.Visible := True;
end;
end;
end.
以上是最小化窗体时将图标缩小到任务栏,单击图标又恢复窗体的一段程序.
现在的问题是:同样是为了鉴别消息的类型为什么在(问题1处)用的Message.WParam而在(问题2处)用的
Message.LParam,而且我认为这两处应该都应该用Message.msg!
1.请问wparam和lparam到底区别在那儿?什么时候用wparam和lparam,在这里将他们位置调换就会出错!
2.我认为在(问题2出)应该用Message.msg,我平时都这么用的,但在这里就会出错,请问这是为什么?
请大家指点!
 
用lParam还是用wParam关键在于系统在PostMessage时把参数放在那个位置吧。
对于每一个不同的message,windows SDK都有说明的,看看MSDN什么的就可以搞定了,:)
 
唉,期待高手现身啊
解答这个令人疑惑的问题!
应该再加上问题3: 对于WM_BARICON ,为何加200,而不是别的什么
 
WM_SYSCOMMAND
uCmdType = wParam; // type of system command requested
xPos = LOWORD(lParam); // horizontal postion, in screen coordinates
yPos = HIWORD(lParam); // vertical postion, in screen coordinates
对于系统各个消息,WPARAM、LPARAM放什么东西,都是约定的
WM_BARICON=WM_USER+200
这个是自定义的消息,WPARAM、LPARAM是由自己定的
加200还是300,也是自己定的,只要WM_BARICON是唯一的就OK
 
3.
你想加多少就多少,只要和你以前自定义的消息常量不冲突就行。
 
他们都说了,我没说的了,告你个诀窍吧,多看MSDN,所有他们知道的你会知道
 
接受答案了.
 
后退
顶部