訊息處理:利用控制元件的動態派生[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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- iOS探索:Runtime之訊息轉發及動態新增方法iOS
- 重繪DevExpress的XtraMessageBox訊息提示框控制元件devExpress控制元件
- Qt動態新增控制元件QT控制元件
- MFC訊息對映
- KafkaConsumer對於事務訊息的處理Kafka
- WPF 控制元件類派生關係控制元件
- Runtime底層原理探究(三) --- 訊息轉發機制(動態方法解析)
- 利用redis的hash結構搭建訊息服務(發訊息,訂閱訊息,消費訊息,退訂)Redis
- MPLS RSVP訊息處理——VecloudCloud
- wpf自定義控制元件新增引用資源控制元件
- flutter: CSS規則對映flutter控制元件-positionFlutterCSS控制元件
- 訊息中介軟體消費到的訊息處理失敗怎麼辦?
- iOS自定義控制元件:簡易下拉控制元件iOS控制元件
- Objective-C Runtime (二):方法與訊息轉發Object
- 如何處理RabbitMQ 訊息堆積和訊息丟失問題MQ
- WPF給控制元件新增運動動畫控制元件動畫
- 如何處理錯誤訊息PleaseinstalltheLinuxkernelheaderfilesLinuxHeader
- .net core 訊息流處理流程
- 可以通過response物件相關api利用http響應訊息約定來控制對端瀏覽器對該訊息的快取行為(例子)物件APIHTTP瀏覽器快取
- 動態計算控制元件高度控制元件
- 處理檔案上傳時的訊息格式轉換問題
- QT常用控制元件(三)——自定義控制元件封裝QT控制元件封裝
- Android中的非同步訊息處理機制Android非同步
- RocketMQ的事務訊息處理【half-message】MQ
- Protobuf_動態訊息-反射反射
- 老生常談——利用訊息佇列處理分散式事務佇列分散式
- Runtime 從NullSafe原始碼看訊息轉發 機制Null原始碼
- RabbitMQ,RocketMQ,Kafka 事務性,訊息丟失和訊息重複傳送的處理策略MQKafka
- Runtime備忘-訊息傳送流程
- 自定義控制元件ViewPager控制元件Viewpager
- 自定義Switch控制元件控制元件
- 玩轉控制元件:GDI+動態繪製流程圖控制元件流程圖
- Android 控制元件架構與自定義控制元件詳解Android控制元件架構
- 動態綁資料(Repeater控制元件控制元件
- 如何用 Golang 的 channel 實現訊息的批量處理Golang
- 如何用 Golang 的 channel 實現訊息的批次處理Golang
- C#自定義控制元件—轉換開關C#控制元件
- C#自定義控制元件—旋轉按鈕C#控制元件