C++Builder的非可视组件消息处理
为了为非可视组件创建隐藏窗口,您需要以下内容:
1。一个私有变量类型(私有变量)来获取窗口句柄HWND。
2。(一个函数WndProc)是用来捕获的窗口被发送到的组件。
3。打电话给allcolatehwnd创建窗口句柄和集WndProc。
为了清楚地解释上述观点并论证创作过程,我们将用一个具体的例子加以说明。
首先我们建立在C++ Builder中一个新的组件,选择文件|新…双击组件图标显示一个新组件对话框中更改为TTEST tcomponent祖先类型和类的名称和设置。
然后,切换到新组件的头文件,并将以下声明添加到类的私有部分(私有部分):
HWnd Fhandle;
fastcall WndProc(tmessagemsg)无效;
第一行声明了一个变量,调用fhandle HWND,将用于捕获窗口句柄的窗口被创建后的第二行宣布WndProc函数接收消息,该函数的声明必须是确定的,它是一个U盘,然后下面的声明是公共类的声明构建的(公共)部分:
Viod DoIt();
这个公共函数将用于测试组件,类声明应该如下所示:
类的封装:公共空间
tcomponent
{
私人:
HWnd Fhandle;
fastcall WndProc(tmessagemsg)无效;
受保护的:
公共:
Fastcall Ttest(tcomponent *业主);
无效的做();
出版:
};
现在切换到组件的代码单元,并将下面的行添加到单元的顶部(它可能是函数的一个好地方)。
我message.wm_user1定义
这条声明组件将被发送到自己的用户自定义消息时,就调用函数。在这一点上,我们必须指定一个窗口句柄的成分。这柄将提供一个隐藏的窗口,使我们能够在组件捕捉信息。找到组件构建代码,添加以下代码:
fastcall测试::测试(tcomponent *人):Tcomponent(业主)
{
fhandle = allocatehwnd(WndProc);
}
好了,重要的一步已经完成了。的allocatehwnd函数创建一个隐藏窗口并返回它的句柄。在这里,我们要让Windows知道消息,并交付WndProc的地址。
现在让我们创建的WndProc函数部分添加源文件中:
无效:WndProc(tmessagemsg fastcall t检验:)
{
如果(msg.msg = my_message)
MessageBox(0,到这里!
{试
调度(MSG);
}
捕捉(…{)
应用handleexception(本);
}
}
每当Windows发送一个消息给组件,Windows调用功能。这部分代码做了两件事。第一,它检查是否收到的消息的消息从我们的用户习惯。如果是这样的话,就会显示一个消息框,你可以看到的消息,我们真的得到了。其次,此代码将在系统中的信息(或组件)处理。试用catch块用于确保如果出现异常,它将成为默认样式下的句柄。
总的来说,WndProc函数将所有其他消息的默认处理和监控所有客户的信息。现在我们创建做功能,完成我们的组件,我们一起创造出做功能,完成我们的成分,并添加代码:
无效的t检验::做()
{
PostMessage(fhandle,我的消息,0, 0);
}
该函数发送消息组件的窗口句柄(记住,窗口句柄是以前存储在fhandle数据产品)。现在我们已经完成了创建组件的选择和使用选择| colseall拯救我们的工作测试组件。
The next step is to test the component.If you use BCB3, you have to add components to the package (Packege), and then use Componet|install (you can use DCLSTD35 Packege to test it quickly).Select the TestBCB.Cpp you have just saved, and once you install the component, it will appear on the component board.Double click the button to create the following code for the button's OnClick event:
test1(做);
现在运行程序,当你点击按钮,你会看到一个信息框显示在这里。
listinga和B包含头文件和源代码如下。
摘要:非能响应Windows消息可视化组件有许多用途。最明显的是封装了WindowsAPI的某些方面。例如,TAPI和Winsock发送消息给指定用户的事件。如果你写一个组件封装了一个API,这样,你将需要捕捉发送Windows消息。添加一个隐藏的窗口组件将为你做的,做一个好工作。
上述程序在C++ Builder 3调试。