訊息處理:利用控制元件的動態派生[RunTime],為控制元件新增該控制元件未定義的訊息對映 (轉)
問題:以TPageControl為例,中需要“滑鼠左鍵雙擊”關閉某啟用頁[如]。
因該沒有定義滑鼠雙擊事件,只有自己為該控制元件新增訊息對映。對映的訊息為:
左鍵雙擊(WM_LBUTTONLCLK)。本文利用執行時間派生控制元件的方法實現,較自己
製作一個單獨控制元件的方法來講,這個更簡單些。
// ---------單元頭------------------------------------------------------
class TPageControlEx : public TPageControl
{ // TPageControl的公有派生類:增加了左鍵雙擊訊息對映
protected:
void __fastcall OnLeftDbClick(TMessage &Msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_LBUTTONDBLCLK,TMessage,OnLeftDbClick)
END_MESSAGE_MAP(TPageControl)
public: // 內聯構造:父類構造
inline __fastcall TPageControlEx(TComponent* Owner):TPageControl(Owner){ };
};
// -----------------------------------------------------------------
class TForm1 : public TForm
{
__published:
void __fastcall FormCreate(T *Sender);
private:
public:
__fastcall TForm1(TComponent* Owner);
TPageControlEx *PageControlEx;
};
// --------單元檔案---------------------------------------------------------------
void __fastcall TPageControlEx::OnLeftDbClick(TMessage &Msg) // 派生類訊息處理
{
AnsiString area=Form1->PageControlEx->ActivePage->Caption;
ShowMessage("收到左鍵雙擊訊息n雙擊區域:"+area);
// PageControl接受訊息的區域:Tab按鈕矩形區,無須再判斷了!
}
// --------------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
PageControlEx = new TPageControlEx(this);
PageControlEx->Parent=Form1;
PageControlEx->Align=alClient;
// -------------生成2個TabSheet實驗一下------------------------
TTabSheet* newTabSheet = NULL;
newTabSheet = new TTabSheet(this);
newTabSheet->PageControl=PageControlEx;
newTabSheet->Caption="TabSheet1";
newTabSheet = new TTabSheet(this);
newTabSheet->PageControl=PageControlEx;
newTabSheet->Caption="TabSheet2";
}
// --------------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991450/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MFC動態建立控制元件的訊息處理 (轉)控制元件
- SysListView控制元件類的訊息常量 (轉)View控制元件
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- 在VC中,讓動態建立的ActiveX控制元件響應Windows訊息。 (轉)控制元件Windows
- VC++訊息對映的思考 (轉)C++
- 自定義訊息和對訊息的理解
- iOS探索:Runtime之訊息轉發及動態新增方法iOS
- 常見問題:文字框控制元件的訊息及應用 (轉)控制元件
- iOS: 教你給UI控制元件新增Badge(訊息提醒小圓點)iOSUI控制元件
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- 自定義訊息獲取訊息(轉)
- C#的訊息處理方法 (轉)C#
- Qt動態新增控制元件QT控制元件
- 動態新增easyui 控制元件UI控制元件
- 三、訊息的可靠處理
- 重繪DevExpress的XtraMessageBox訊息提示框控制元件devExpress控制元件
- 靈活定義和處理SOAP頭訊息 (轉)
- VCL中訊息處理初探 (轉)
- 動態新增控制元件時,計算控制元件大小的解決方法控制元件
- VCL控制元件元件大都應該過載TWinControl的虛擬函式WndProc來進行處理視窗訊息的工作控制元件函式
- 關於CCmdTarget及訊息對映
- C++ BUILDER 訊息處理的深入探索 (轉)C++UI
- IOS 訊息推送處理iOS
- 處理鍵盤輸入訊息(轉)
- KafkaConsumer對於事務訊息的處理Kafka
- 動態移動控制元件 (轉)控制元件
- 從 runtime 原始碼解析物件傳送訊息的動態性原始碼物件
- MFC 訊息對映機制詳解
- 利用redis的hash結構搭建訊息服務(發訊息,訂閱訊息,消費訊息,退訂)Redis
- MPLS RSVP訊息處理——VecloudCloud
- Storm保證訊息處理ORM
- 利用Delphi訊息處理建立類似Windows開始選單 (轉)Windows
- VC增加自定義訊息 (轉)
- Runtime底層原理探究(三) --- 訊息轉發機制(動態方法解析)
- 自定義控制元件中的控制元件呼叫引用控制元件的頁面裡的函式 (轉)控制元件函式
- 如何處理RabbitMQ 訊息堆積和訊息丟失問題MQ
- 訊息中介軟體消費到的訊息處理失敗怎麼辦?
- Go 語言的錯誤訊息處理Go