動態建立控制項的思路

2021-06-18 02:24:46 字數 1629 閱讀 5618

在mfc中,一般通過控制項欄直接向對話方塊中新增按鈕控制項,並雙擊按鈕新增該按鈕控制項的訊息響應函式。但是經常我們需要根據程式輸入或執行時資訊在介面上動態生成乙個或多個按鈕,並分別新增訊息響應,實現這一目標包括如下幾步:

1.在類中宣告按鈕變數指標cbutton* btn。

2.在類中宣告並定義按鈕控制項的id, buttonid=10000。

3.在類的oninitdialog()函式中動態建立按鈕。

[cpp]

view plain

copy

btn = 

newcbutton[n];  

dword

dwstyle = ws_child | ws_visible | bs_pushbutton;  

for(

inti = 0; i < dbutil::ordnancesitenum; i++)  

上述**中,n表示執行時獲得的按鈕控制項的個數,一共建立n個按鈕控制項,且控制項id在buttonid~buttonid+n-1之間。

4.建立按鈕訊息響應。

(1)在對話方塊類的定義檔案(.h檔案)中宣告訊息響應函式onbuttonclick。

[cpp]

view plain

copy

// implementation

protected

:  // generated message map functions

//}afx_msg

afx_msg void

onbuttonclick(

uint

uid);  

declare_message_map()  

注意,onbuttonclick函式必須宣告在對話方塊類自動生成的控制項響應函式宣告列表的後面(上述**中oninitdialog函式就是自動生成的函式宣告),即程式設計師新增的動態按鈕訊息響應函式宣告應該在在//}}afx_msg和declare_message_map()兩行之間,以免系統將其當做自動生成的訊息響應函式。onbuttonclick函式的引數nid代表響應函式對應按鈕控制項的id號。

(2)在對話方塊類的函式實現檔案(.cpp檔案)中定義訊息對映on_command_range。

在函式實現檔案中的訊息對映部分(begin_message_map與end_message_map之間)定義按鈕控制項與其訊息響應函式之間的對映關係。

[cpp]

view plain

copy

on_command_range(buttonid,buttonid+n-1,onbuttonclick)  

對於所有動態建立的n個按鈕(id號在buttonid~buttonid+n-1之間),定義其訊息對映函式為onbuttonclick函式,根據其輸入id分辨具體響應那個按鈕。

注意:若是單個按鈕,則訊息對映的定義方式為on_bn_clicked(idc_button_id, onbuttonfunc)

(3)實現訊息響應函式onbuttonclick。

在對話方塊類的函式實現檔案(.cpp檔案)中給出具體的按鈕訊息響應。

過載bool c***xdlg::pretranslatemessage(msg *pmsg)

if (pmsg->message == wm_lbuttondown)//

VB動態建立控制項

dim withevents mybtn as commandbutton set mybtn controls.add vb.commandbutton button1 with mybtn caption 我可以響應事件!width 1800 left 100 top 700 visible t...

如何動態建立控制項

分配乙個控制項物件的例項並呼叫其create成員函式。開發者最容易忽略兩件 事 忘記指定ws visble標籤和在棧中分配控制項物件。下例動態地建立乙個下壓按 鈕控制項 in class declaration h file private cbutton m pbutton in class im...

c 動態建立控制項

htmltable tablerow tablecell 動態建立form 直接從標準控制項中繼承過來 動態建立table htmltable ht1 new htmltable 動態建立tablerow,tablecell tablerow tr new tablerow tablecell tc...