使用CCheckListBox並獲得檢查狀態通知

2022-02-13 04:39:34 字數 2115 閱讀 5375

介紹 我喜歡mfc提供

的cchecklistbox類,但是,它的使用並不明顯,嚮導的幫助僅限於clistbox類。我將描述如何輕鬆地將其插入到專案中。(也許還有更簡單的方法,但我就是這麼做的,而且確實有效。) 我還將展示如何新增事件通知,以便在核取方塊狀態發生變化時查詢事件通知。 建立cchecklistbox成員 建立乙個新的mfc應用程式或對話方塊應用程式。在資源編輯器中,向對話方塊中新增乙個「常規」列表框。 右擊列表框屬性,然後樣式選項卡確保所有者繪製=固定確保有字串=檢查 按住ctrl鍵,雙擊資源對話方塊中的列表框。 嚮導只會給你乙個選項來建立乙個clistbox,選擇它,我們會在**中改變它。 在頭**中,將嚮導生成的**更改為: 隱藏,複製code

//

dialog data//;

clistbox m_ctlchecklist;

//}}afx_data

: 隱藏,複製code

//

dialog data//;

//}}afx_datacchecklistbox m_ctlchecklist;

在正文中,更改以下生成的**: 隱藏,複製code

void cchecklistboxcbndlg::dodataexchange(cdataexchange* pdx)

}afx_data_map

}

: 隱藏,複製code

void cchecklistboxcbndlg::dodataexchange(cdataexchange* pdx)

}afx_data_map

ddx_control(pdx, idc_list1, m_ctlchecklist);

}

向cchecklistbox新增項 現在,你可以在oninitdialog成員的清單中新增一些東西,比如: 隱藏,複製code

m_ctlchecklist.resetcontent();

//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 );

注意,在描述bs_auto3state和bs_3state時,msdn文件有點脆弱。如果您使用bs_3state,那麼您將不會得到核取方塊通知,並且狀態是鎖定的(僅在**中可以更改)。如果您使用bs_auto3state,那麼您將獲得狀態更改的通知,核取方塊將進行自我管理。你只需要試驗一下,看看哪個能給你想要的效果。 確定核取方塊狀態更改 你仍然可以使用嚮導的檢查列表控制項,你已經建立,但你會看到列表被限制為特定的clistbox專案: 我想讓處理程式知道核取方塊的狀態何時改變(不是選擇的改變)。為此,在標題中手動新增事件處理程式,如下所示。注意,如果使用者單擊乙個核取方塊,您將獲得兩個單擊事件,首先是oncheckchangelist1,其次是onselchangelist1。 注意:如果您依賴當前選擇來更改結構中的核取方塊狀態,即。,對getcursel的呼叫將是oncheck呼叫中的新選擇,即使onselchange尚未被呼叫。 隱藏,複製code

//

}afx_msg

在正文中,將事件處理程式新增到訊息對映: 隱藏,複製code

begin_message_map(cchecklistboxcbndlg, cdialog)

//}afx_msg_map

on_clbn_chkchange(idc_list1, oncheckchangelist1)

end_message_map()

並新增處理程式的實現。 隱藏,複製code

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....