首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

dll中不能响应自定义消息,该怎么解决

2012-02-27 
dll中不能响应自定义消息建立一个dll,里面有个TForm, 自定义消息,并且建立响应函数。但是sendmessage调用没

dll中不能响应自定义消息
建立一个dll,里面有个TForm, 自定义消息,并且建立响应函数。但是sendmessage调用没有用,而在我简历一个应用程序,最简单的,如下代码,确实ok的,能够弹出提示框。why?
const
WM_CHANGESIZE= WM_USER+1000;
type
  TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);

  private
  procedure OnChangeSize(var msg: TMessage); message WM_CHANGESIZE;
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 sendmessage(self.Handle,WM_CHANGESIZE,0,0);
end;

procedure TForm1.OnChangeSize(var msg: TMessage) ;
begin
 showmessage('TFormExplorer.OnChangeSize');
end;
end.

[解决办法]
摘自CSDN某高人:
Borland的天才们无心插柳的设计再一次让我们找到了解决问题的办法。由前面的分析我们知道,在用VCL开发的动态链接库中并没有创建隐藏的窗口来接收Windows消息(CreateHandle不执行),但在动态链接库中如果要显示窗口的话又需要一个父窗口。如何解决这个问题呢?VCL的设计者将保存看不见的窗口句柄的FHandle变量设计为可写,于是我们实际上可以简单地给FHandle赋一个值来为需要显示的子窗口提供一个父窗口。例如,在某个动态链接库插件中要显示窗体,我们通常会在主模块可执行文件中将Application对象的句柄通过动态链接库的某个函数传入并赋值给动态链接库的Application.Handle,类似于:

procedure SetApplicationHandle(MainAppWnd: HWND)
begin
Application.Handle := MainAppWnd;
end;


[解决办法]
WM_CHANGESIZE := RegisterWindowMessage('This is a Message From Budded');
用这个来发送介绍,保准没问题,呵呵
[解决办法]
WM_CHANGESIZE := RegisterWindowMessage('This is a Message From Budded');
用这个发送接收消息肯定没问题!

热点排行