|
<p>由于实际需要在项目中需要使用一个带有复选框的列表控件,没错,VB、Delphi……里现成就有,但由于项目是VC工程,VC里现成的CListBox或CListCtrl都没有复选框。说到这里,高手们可能会说,简单,自已重绘一个,或者偷懒一点的方法,也可以去网上找一个别人做好现成的类来用。</p>
<p> </p>
<p>方法很巧,移花接木。 <br/>MFC有一个CCheckListBox类支持复选框风格,所以我们可以直接使用ListBox控件,然后初始化时把它子类化成CCheckListBox,再设置一下风格参数就行。但要注意一下,成功的关键是要修改ListBox控件的两处属性,分别是Owner draw设置为Fixed(LBS_OWNERDRAWFIXED),Has strings设置为True(LBS_HASSTRINGS),否则不成功,运行时报错。 <br/>具体实现步骤举例如下—— <br/>1、首先在窗口上拖放一个ListBox控件,假设其资源ID为IDC_LIST1; </p>
<p>2、如上所述修改该ListBox控件的属性(LBS_OWNERDRAWFIXED | LBS_HASSTRINGS); <br/>3、定义CCheckListBox对象,在窗口类的头文件里; [Page]<br/>// XXXDlg.h</p>
<p></p>
<p>CCheckListBox m_CheckList; <br/>4、然后在CPP文件里,初始化的地方写下两行; <br/>// XXXDlg.cpp</p>
<p>BOOL CXXXDlg::OnInitDialog() <br/>...{ <br/> // ...</p>
<p> m_CheckList.SubclassDlgItem(IDC_LIST1, this); // IDC_LIST1是ListBox控件的资源ID <br/> m_CheckList.SetCheckStyle(BS_AUTOCHECKBOX);</p>
<p> // ... <br/>} <br/>OK,就这么简单!m_CheckListBox.AddString(\"...\");加几条数据看看,是不是有复选框了! <br/>判断复选框是否被选中也很简单,m_CheckListBox.GetCheck(nIndex);就行!</p> |
|