MFC動態建立控制元件的訊息處理 (轉)
MFC動態建立的訊息處理
前些天有人在論壇裡問在動態建立TreeCtrl後怎麼響應訊息,於是便寫了一點自己的心得,現整理如下。
本例在view中動態建立一個ListCtrl並響應其NM_CLICK訊息,先寫出動態建立的程式碼:
新建一SDI工程,給view加上一個成員變數:
CListCtrl m_list;
在view的OnCreate中建立它:
if(!m_list.Create(WS_BORDER |WS_CHILD|WS_VISIBLE|LVS_ICON |LVS_AUTOARRANGE|LVS_SHOWSELALWAYS|LVS_EDITLABELS,CRect(10,10,310,210),this,ID_LISTCTRL))
{
TRACE0("Failed to create ListCtrl windown");
return -1;
}
//新增一些項
CString str;
for(int i=0;i<10;i++)
{
str.Format("item%d",i);
m_list.InsertItem(i,str);
}
其中的ID_LISTCTRL是這個控制元件的ID,當然你可以直接用數值來表示,但為了清淅還是定義一個常量的好,在主選單View->Re Symbols彈出的對話方塊中點選New按鈕,在Name下面輸入ID_LISTCTRL.
建立完畢,編譯連結後就可以執行了,但你怎麼點選它都沒反應,當然,因為我們還沒寫訊息處理的程式碼。
通常做法是手動寫訊息處理及訊息對映,至少得三步:1,在頭中定義訊息處理函式的原型,2,在cpp中實現這個函式,3,在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之間寫上訊息對映。如果是單單處理一個訊息的話那還可以忍受,訊息一多的話不但麻煩還容易出錯。
所以我採取下面的方法:
1.開啟about對話方塊資源,放入一個ListCtrl控制元件到對話方塊中,並將其ID設為ID_LISTCTRL.
2.Ctrl+W,把Class Name由原來的CAboutDlg改為CxxxView,在左邊的 IDS中選擇ID_LISTCTRL,這時右邊會出現相應的通知訊息,這時就可以跟平常一樣雙擊新增訊息對映了.
嘿嘿,是不是跟在對話方塊裡響應控制元件的訊息一樣很方便呀.
有一點需要注意,只有當開啟你加入控制元件的那個對話方塊資源編輯器的時候按Ctrl+W時,Class Wizard中才會出現那個ID_LISTCTRL,還有發行時注意把對話方塊上的listctrl控制元件刪掉.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992375/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- MFC訊息對映
- 處理檔案上傳時的訊息格式轉換問題
- MPLS RSVP訊息處理——VecloudCloud
- MFC學習(四) 訊息機制
- MFC DLL如何響應PreTranslateMessage訊息
- KafkaConsumer對於事務訊息的處理Kafka
- 如何處理錯誤訊息PleaseinstalltheLinuxkernelheaderfilesLinuxHeader
- .net core 訊息流處理流程
- iOS探索 動態方法解析和訊息轉發機制iOS
- Android中的非同步訊息處理機制Android非同步
- RocketMQ的事務訊息處理【half-message】MQ
- 如何處理用程式碼建立SD Sales order時遇到的錯誤訊息KI 180
- Protobuf_動態訊息-反射反射
- 如何處理RabbitMQ 訊息堆積和訊息丟失問題MQ
- 如何處理VirtualBox啟動錯誤訊息:The vboxdrv kernel module is not loaded
- 訊息中介軟體消費到的訊息處理失敗怎麼辦?
- iOS探索:Runtime之訊息轉發及動態新增方法iOS
- 原始碼分析:Android訊息處理機制原始碼Android
- Android應用程式訊息處理機制Android
- 如何用 Golang 的 channel 實現訊息的批量處理Golang
- 如何用 Golang 的 channel 實現訊息的批次處理Golang
- 回轉壽司你一定吃過!——Android訊息機制(處理)Android
- RabbitMQ,RocketMQ,Kafka 事務性,訊息丟失和訊息重複傳送的處理策略MQKafka
- Kafka是如何處理Netflix每天2萬億條訊息的?Kafka
- MFC NumericUpDown Spin控制元件 CSpinButtonCtrl控制元件
- Cloud Foundry架構和訊息處理機制Cloud架構
- Laravel 實現 Kafka 訊息推送與接收處理LaravelKafka
- 【實戰教程】微信卡券訊息處理
- Handler訊息處理機制原始碼解析 上原始碼
- Kafka中消費者延遲處理訊息Kafka
- Runtime底層原理探究(三) --- 訊息轉發機制(動態方法解析)
- 影片美顏SDK動態處理技術與靜態處理技術
- MySQL 動態字串處理詳解MySql字串
- React應用裡Invalid hook call錯誤訊息的處理ReactHook
- 《球球大作戰》原始碼解析——(9)訊息處理原始碼
- Spring Cloud Stream如何處理訊息重複消費?SpringCloud
- 聊天列表訊息合併,處理相鄰時間
- 深入理解Android非同步訊息處理機制Android非同步