比方说,我在DLL中,用PostMessage(),向Delphi主窗口发送消息,然后由Delphi响应该消息,怎么写消息响应函数?或者DLL中通过窗口句柄怎样访问窗口的成员函数?100分奉送!!

解决方案 »

  1.   

    unit main;
    interfaceuses
      Windows, ...
      ....const
      ST_NEXTLINE = WM_USER+168;
      ST_PRELINE = WM_USER+186;type
      TfmMain = class(TForm)
        MainMenu: TMainMenu;
        .....
        procedure NextLineMessage(var Msg: TMessage); message ST_NEXTLINE;
        procedure PreLineMessage(var Msg: TMessage); message ST_PRELINE;
        ....implementation
    uses ....
         .........
    procedure TfmMain.NextLineMessage(var Msg: TMessage);
    begin
      //showmessage('NextLine');
    end;procedure TfmMain.PreLineMessage(var Msg: TMessage);
    begin
      //showmessage('PreLine');
    end;
      

  2.   

    CBC的例子,仅供参考如何响应消息及自定义消息 [messages] ?
    --------------------------------------------------------------------------------在 Borland C++Builder 中,也可以象在 Delphi 中一样响应消息,只是看起来要稍复杂一点。
    对于系统已定义的消息,可以直接响应,而对于非系统消息可以照如下自定义: //以下代码写在头文件中:
    #define WM_MY_OPEN_CMDLINE_FILE (WM_USER+1) //进程间通讯的自定义消息
    #define WM_MY_SEARCH_NODE (WM_USER+2) //查找命令的自定义消息
    class TSomeForm : public TForm
    {//某窗体的类定义
    //...类中的其它代码
    protected:
    //消息的响应过程
    void __fastcall OpenCmdLineFile(TMessage Message);
    void __fastcall SearchDocumentNode(TMessage Message);
    void __fastcall GetWindowMinMaxInfo(TWMGetMinMaxInfo Message);
    //通过以下宏定义实现消息的正确响应
    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_MY_OPEN_CMDLINE_FILE, TMessage, OpenCmdLineFile)
    MESSAGE_HANDLER(WM_MY_SEARCH_NODE, TMessage, SearchDocumentNode)
    MESSAGE_HANDLER(WM_GETMINMAXINFO , TWMGetMinMaxInfo, GetWindowMinMaxInfo)
    END_MESSAGE_MAP(TForm)};//end class--------------------------------------------------------------------------------
    //以下为实现代码,写在模块文件中:
    void __fastcall TSomeForm::OpenCmdLineFile(TMessage Message)
    {//直接通过消息结构传递参数 
    LPSTR lpCmdLine=(LPSTR)Message.LParam;//从Message中取得参数
    this->HandleCmdLineFile(lpCmdLine);//处理命令行的参数
    return; 
    }--------------------------------------------------------------------------------
    void __fastcall TSomeForm::SearchDocumentNode(TMessage Message)
    {//响应查找消息//Message中的参数在此处不需要。
    this->SearchNode();
    return;}--------------------------------------------------------------------------------
    void __fastcall TSomeForm::GetWindowMinMaxInfo(TWMGetMinMaxInfo Message)
    {//设置主窗口的最小尺寸MINMAXINFO *MinMaxInfo=Message.MinMaxInfo;
    MinMaxInfo->ptMinTrackSize.x=400;
    MinMaxInfo->ptMinTrackSize.y=300;
    return;}--------------------------------------------------------------------------------
    其中:TMessage和TWMGetMinMaxInfo类型的定义可参见:C:\Program Files\Borland\CBuilder\inlucde\vcl\Messages.hpp;其它的消息响应方法与此相同。
    另外,可以为自定义的消息也定义一个对应的消息结构(如:TSearchNode_Message),至于如何定义消息结构, 可以参考 Borland 的源代码:C:\Program Files\Borland\CBuilder\inlucde\vcl\Messages.hpp
      

  3.   

    上面的是自己定义消息!
    重载消息:
      type
      TfmMain = class(TForm)
       priveted
         procedure formsize(var msg:tmessage);messagewm_size;
    end;
       procedure formsize(var msg:tmessage);
    begin
       showmessage('the form is sizing');
      iherited;
    end;