一個非可視的組件必須對Windows操作系統或用戶定義的消息作出響應。然而,由於一個非可視組件沒有窗口,因此它也沒有窗口句柄,自然它也不能接收到消息,為了解決這一問題,我們的思路是創建一個隱藏的窗口,使非可視組件能夠接收到消息。
為了給你的非可視組件創建一個隱藏的窗口,需要有以下:
1.一個私有變量型(Private Variable)的HWnd來取得窗口句柄。
2.一個用來捕捉窗口發送給組件的函數(a WndProc)。
3.對AllcolateHwnd的調用使之創建窗口句柄並設置WndProc。
為了清楚的解釋上述思路和展示創建過程,下面我們將以一個具體的實例來說明。
首先我們先創建一個新的組件,在C++ Builder中,選擇FILE|NEW…雙擊組件圖標顯示一個新的組件對話框改變Ancestor Type為Tcomponent和Class name為Ttest並設置完畢。
然後,切換到新組件的頭文件,在類的私有部分(private section)加入以下聲明:
HWnd Fhandle;
void __fastcall WndProc(Tmessage &Msg);
第一行聲明了一個調用Fhandle的HWnd變量,這個變量將用於窗口創建後捕獲窗口句柄。
第二行聲明了一個用於接收消息的WndProc函數。這個函數的聲明必須加以標識,以便限定它是一個WndProc,然後在類聲明Public(公有)部分構造以下聲明:
Viod DoIt( );
這個公有函數將被我們用來測試組件,類聲明應如下:
class PACKAGE Ttest:public Tcomponent
{
private:
HWnd Fhandle;
void __fastcall WndProc(Tmessage &Msg);
protected:
public:
__fastcall Ttest(Tcomponent *Owner);
void DoIt( );
__published:
};