tabctrl控制項可以通過對話方塊方式直接採用控制項靜態新增,但是有時候需要去動態建立乙個tabctrl控制項,本文是在cformview上動態建立tabctrl控制項:
1、新增ctabctrl類的物件:
ctabctrl m_tabctrl;
cdialog1 m_page1;
cdialog2 m_page2;
3、在資源檢視中為m_tabctrl設定資源id:
方法:右鍵資源,選擇resource symbols,然後彈出資源id對話方塊,新增ctabctrl資源id號:idc_tabctrl;
4、wm_create訊息響應,在oncreate(...)函式中新增如下**:
//得到視窗的大小
crect rec;
getclientrect(&rec);
//建立tabctrl控制項
m_tabctrl.create(tcs_tabs|ws_child|ws_visible,rec,this,idc_tabctrl);
//新增控制項按鈕名稱
m_tabctrl.insertitem(0,"車輛資訊列表");
m_tabctrl.insertitem(1,"地圖列表");
//對話方塊頁面
m_page1.create(idd_dialog1,getdlgitem(idc_tabctrl));
m_page2.create(idd_dialog2,getdlgitem(idc_tabctrl));
//顯示第乙個頁面
m_carlist.showwindow(sw_show);
//設定第乙個頁面顯示
m_tabctrl.setcursel(0);
5、wm_size訊息響應,該函式是為了使得頁面布局和formview頁面大小相同,不然會出現空閒部分,顯得布局很不美觀,在對應的函式中新增如下**:
m_tabctrl.movewindow(0,0,cx,cy);
m_page1.movewindow(0,25,cx,cy);
m_page2.movewindow(0,25,cx,cy);
6、tabctrl控制項tcn_selchange訊息響應,這裡並沒有靜態的tabctrl控制項,所以需要動態新增,方法如下:
1)在cformview的cpp檔案中的begin_message_map......end_message_map()之間加入:on_notify(tcn_selchange,idc_tabctrldown,onselchangetab)
2)在在cformview的h檔案中的}afx_msg之間加入:afx_msg void onselchangetab(nmhdr *pnmhdr,lresult *presult);
3)實現onselchangetab(nmhdr *pnmhdr,lresult *presult)
void cformviewdown::onselchangetab(nmhdr *pnmhdr,lresult *presult)
else if(ncursel == 1)
*presult = 0;
}
動態建立控制項的思路
在mfc中,一般通過控制項欄直接向對話方塊中新增按鈕控制項,並雙擊按鈕新增該按鈕控制項的訊息響應函式。但是經常我們需要根據程式輸入或執行時資訊在介面上動態生成乙個或多個按鈕,並分別新增訊息響應,實現這一目標包括如下幾步 1.在類中宣告按鈕變數指標cbutton btn。2.在類中宣告並定義按鈕控制項...
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...