(4)跟我读技术内幕吧:Sendmessage 送到哪里去了(30分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
见技术内幕P118.
Form1.ListBox1.items.clear
......
......
SendMessage(Form1.ListBox1.Handle,lb_AddString,0,LongInt(s))
问题1:lb_AddString是添加到Listbox1.items中,那么添加到别的地方的 话,还有些什么参数和lb_Addstring是在同一个级别的?
问题2:这里的参数0表示什么?
问题3:为什么要Longint(s)?在API帮助里,IPparam,类型 Any,说明:
具体取决于消息 。 既然要送到listbox1.items中,不是string类型么?
 
先看帮助:
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);


Parameters

hWnd

Identifies the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.

Msg

Specifies the message to be sent.

wParam

Specifies additional message-specific information.

lParam

Specifies additional message-specific information.

再看帮助:
LB_ADDSTRING
wParam = 0; // not used; must be zero
lParam = (LPARAM) (LPCTSTR) lpsz; // address of string to add

1.一时没想通你的意思。
2、表示wParam为0啰
3、你以前是用VB的吧,
其实无论是wParam还是lParam, 都是长指针,所以就有了LongInt(s)的强制转换。

对每一个消息,wparam和lparam的定义都是不太一样的,
对lb_addstring而言, wparam没用,lparam表要加入字符串的指针

你可以多看帮助中的Win32 sdk部分,或找一张MSDN, 徺样就会较易理解。
 
》1,经过每次执行sendmessage,'s'作为listbox.items的一项出现。
lb_addstring对应着“添加到Listbox1.items”,如果添加到
不是"listbox1.items",
"UINT Msg"该是什么?
》2.你以前用VB吧
是liuly兄(现在到哪去了。。)给了我个VB的API帮助:}
什么是长指针?
》3.本来想去买的,不巧这里飘起了雨。。。下午去吧

 
>> lb_addstring对应着“添加到Listbox1.items”,如果添加到
>> 不是"listbox1.items",
>> "UINT Msg"该是什么?

lb_addstring = listbox add string, 就是针对listbox的添加items,
那么具体是哪个listbox呢? 就是由hwnd参数决定的那个, 也就是说
hwnd参数是决定接收这个消息的控件的句柄(不一定是窗口的句柄)
具体的Msg是根据控件的不同而有所变化的, 而且一个控件可以接收的消息很多的,
对listbox来说, 并不只能接收lb_addstring消息.

对于后两个参数, 是根据Msg的不同而不同的, 参考lb_addstring的说明就
能知道传递什么值了, 而为什么要进行longint(s)转换呢? 因为lparam是整数
类型的, 而传递的内容是字符串的地址, 而s是字符串, 同时也表示是字符串的地址,
所以用longint(s)来将地址转换成整数.
 
如果有Delphi版的API帮助就好了!
1.同意amo,不懂.不同的控件有不同的消息(除了WM外,如Edit控件有EM系列)
2.0是必须的(当然对某一特定的消息)
3.Delphi中的Win32已经很不错了.当然MSDN更好,它是不断更新的.
 
后退
顶部