如何在DLL中包含窗體,并将其嵌入到主視窗中指定位置?采用C++Builder6平台,并且要求達到如下目标:
1.可以随時建立DLL中的視窗或解除安裝DLL中的視窗
2.可以動态加載或解除安裝包含視窗的DLL
3.主視窗啟動時,焦點落在預設的嵌入視窗控件上
4.TSpeedButton可以響應滑鼠移動事件
5.Tab鍵僅在嵌入視窗中跳動,不會跳出到主視窗控件上
6.嵌入視窗可以使用COM控件,如TADOQuery控件
7.嵌入視窗和主視窗都可以使用VCLSkin控件換膚
8.DLL中的視窗,實作業務功能時,和平常建立的工程視窗使用完全一緻
本方案可以實作上述目标,具體步驟如下:
(1)先在建立一個DLL工程,在DLL工程中包含接口檔案IDLLObject.h,這是各個DLL中需要實作的功能,他輔助嵌入視窗處理一些來自主視窗的消息。調用的DLL的主工程視窗也需包含此檔案,主視窗會調用這些接口,建立和管理嵌入視窗。IDLLObject.h内容如下:
#ifndef IDLLControlHPP
#define IDLLControlHPP
//DLL中的基本接口類,視窗消息處理須繼承此類
#define VCLSKIN false //是否使用VCLSkin換膚,false不使用;true使用
#include<vcl.h>
class IDLLObject
{
public:
virtual void __fastcall Initialize(Forms::TApplication* AApp) = 0 ;
virtual void __fastcall UNInitialize(void) = 0 ;
virtual HANDLE __fastca