介紹 我喜歡mfc提供
的cchecklistbox類,但是,它的使用並不明顯,嚮導的幫助僅限於clistbox類。我將描述如何輕鬆地將其插入到專案中。(也許還有更簡單的方法,但我就是這麼做的,而且確實有效。) 我還將展示如何新增事件通知,以便在核取方塊狀態發生變化時查詢事件通知。 建立cchecklistbox成員 建立乙個新的mfc應用程式或對話方塊應用程式。在資源編輯器中,向對話方塊中新增乙個「常規」列表框。 右擊列表框屬性,然後樣式選項卡確保所有者繪製=固定確保有字串=檢查 按住ctrl鍵,雙擊資源對話方塊中的列表框。 嚮導只會給你乙個選項來建立乙個clistbox,選擇它,我們會在**中改變它。 在頭**中,將嚮導生成的**更改為: 隱藏,複製code
//: 隱藏,複製codedialog data//;
clistbox m_ctlchecklist;
//}}afx_data
//在正文中,更改以下生成的**: 隱藏,複製codedialog data//;
//}}afx_datacchecklistbox m_ctlchecklist;
void cchecklistboxcbndlg::dodataexchange(cdataexchange* pdx): 隱藏,複製code}afx_data_map
}
void cchecklistboxcbndlg::dodataexchange(cdataexchange* pdx)向cchecklistbox新增項 現在,你可以在oninitdialog成員的清單中新增一些東西,比如: 隱藏,複製code}afx_data_map
ddx_control(pdx, idc_list1, m_ctlchecklist);
}
m_ctlchecklist.resetcontent();注意,在描述bs_auto3state和bs_3state時,msdn文件有點脆弱。如果您使用bs_3state,那麼您將不會得到核取方塊通知,並且狀態是鎖定的(僅在**中可以更改)。如果您使用bs_auto3state,那麼您將獲得狀態更改的通知,核取方塊將進行自我管理。你只需要試驗一下,看看哪個能給你想要的效果。 確定核取方塊狀態更改 你仍然可以使用嚮導的檢查列表控制項,你已經建立,但你會看到列表被限制為特定的clistbox專案: 我想讓處理程式知道核取方塊的狀態何時改變(不是選擇的改變)。為此,在標題中手動新增事件處理程式,如下所示。注意,如果使用者單擊乙個核取方塊,您將獲得兩個單擊事件,首先是oncheckchangelist1,其次是onselchangelist1。 注意:如果您依賴當前選擇來更改結構中的核取方塊狀態,即。,對getcursel的呼叫將是oncheck呼叫中的新選擇,即使onselchange尚未被呼叫。 隱藏,複製code//m_ctlchecklist.setcheckstyle( bs_auto3state );
m_ctlchecklist.setcheckstyle( bs_3state );
m_ctlchecklist.addstring("
fumble");
m_ctlchecklist.setcheck( 0, 0 );
m_ctlchecklist.addstring("
bumble");
m_ctlchecklist.setcheck( 1, 1 );
m_ctlchecklist.addstring("
gumble");
m_ctlchecklist.setcheck( 2, 2 );
//在正文中,將事件處理程式新增到訊息對映: 隱藏,複製code}afx_msg
begin_message_map(cchecklistboxcbndlg, cdialog)並新增處理程式的實現。 隱藏,複製code//}afx_msg_map
on_clbn_chkchange(idc_list1, oncheckchangelist1)
end_message_map()
void cchecklistboxcbndlg::oncheckchangelist1()
在VC中使用CCheckListBox
在軟體應用中經常會遇到需要複選功能的列表框。類cchecklistbox實現了windows複選列表框。複選列表框顯示項的乙個列表,例如檔名列表。列表中的每項都有乙個核取方塊,方便使用。但是vc的控 件列表中並新增cchecklistbox,因此在使用cchecklistbox還要進行一些手動設定,...
C CheckListBox 移除所有選中的項
網上找了半天,沒找到能用的。不過倒是找到了思路。正著乙個個刪,是刪不掉滴,刪乙個後,下乙個的index就變了。index是空不了的。只能反著移。先寫了乙個笨一點的方法,迴圈最多次,倒是能實現一次性全刪除,不過迴圈過多。for inti checkedlistbox1.items.count 1 i ...
使用GraphEdit使用
1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....