我见到个message handle method
procedure CMDockClient(Message TCMDockClient); message CM_DOCKCLIENT;
其中TCMDockClient = packed record
    Msg: Cardinal;
    DockSource: TDragDockObject;
    MousePos: TSmallPoint;
    Result: Integer;
 TDragDockObject是个不小的类。
问题:
1. 我看到一些文章说像CM_DOCKCLIENT这样的message有注册问题,是怎么一回事?
2. sendmessage里的信息参数就两个wparam,lparam:uint,如果docksource应该是TDragDockObject的引用在传送前被转换成uint,传送后又转换回来了,这个转换好像不行吧(至少我试了老是出错)?
3.

解决方案 »

  1.   

    我现在想做界面,包括鼠标悬停和窗口停靠,哎,就是C# IDE界面里的那些方便的东东。
    窗口停靠逻辑上因该没什么问题,就是对delphi里的消息机制还不是很清楚,delphi给的文档也很少。
    指导winapi机制,不过不清楚delphi是怎么封装的
      

  2.   

    1.注册问题:如果是在同一个程序中实现,就没有注册的问题,因为你已经知道如何处理这个消息了;如果是要象普通windows消息一样大家都可以直接使用,那就要向windows注册了.
    2.sendmessage里的信息两个wparam,lparam参数是无约定的,你可以以任何方式解释它(当然应该是4Byte的,但作为一个结构指针是可以的.
    TCMDockClient = packed record
        Msg: Cardinal;
        DockSource: TDragDockObject;//WParam参数,TDragDockObject应该是PDragDockObject(PDragDockObject=^TDragDockObject),应该一个指针吧
        MousePos: TSmallPoint;//LParam参数,也应该是4字节的.
        Result: Integer;//delphi自己加的,为了返回状态.