65.9K
CodeProject 正在变化。 阅读更多。
Home

ChoiceListButton 控件

1999年12月15日

viewsIcon

71098

downloadIcon

1232

带复选框菜单项的下拉菜单按钮

  • 下载演示项目 - 26 KB

    sample image

    摘要

    我想要一个按钮,可以向用户显示一系列选项。我当然可以使用一个拥有绘制的组合框。但是,这个解决方案的问题是,当下拉列表折叠时,它将始终显示最后选择的项,而不是一些描述性文本。

    这就是为什么我选择了一个自定义解决方案。

    ITCLib

    可选地,该控件可以使用来自 Interface technologies, Inc. 的免费库 'ITCLib'。这是一个很棒的库,我建议所有 MFC 开发人员都看一下它 - 它能节省大量时间。

    ITCLib 只用于绘制按钮上的小箭头,因此不是控件的集成部分。这就是为什么所有对 ITCLib 的引用最初都通过预处理器语句禁用,所以即使在没有该库的安装上,示例也能正常编译。

    启用 ITCLib

    • 如果您已安装 ITCLib 并想启用它,请执行以下操作:
    • 在“项目设置” - “C/C++” - “预处理器” - “预处理器定义”中,添加 _ITCDLL
    • 在“项目设置” - “C/C++” - “预处理器” - “附加包含目录”中,添加包含 ITCLib 头文件的文件夹
    • 在“项目设置” - “链接” - “输入” - “附加库路径”中,添加包含 ITCLib 库文件的文件夹

    就是这样!

    如果您想使用自己的按钮类来绘制箭头或任何其他您想在按钮表面上绘制的内容,您可以将 CChoiceWindowBtn 从您自己的类继承,而不是从 CButtonITCImageButton 继承。

    使用控件

    要使用该控件,请创建一个项目并添加这些文件:

    ChoiceWindow.h
    ChoiceWindow.cpp
    ChoiceWindowBtn.h
    ChoiceWindowBtn.cpp
    drop_arrow.bmp (或其他位图)

    将该位图的资源名称设置为 "DROP_ARROW" - 请注意,是字符串形式,而不是整数 ID。

    接下来,将一个按钮添加到对话框,并在您的 WM_INITDIALOG 处理程序中使用成员函数。

    向对话框类添加一个 CChoiceWindowBtn 类型的对象。请务必添加头文件包含。

    示例 - 注意预处理器定义的使用。

    #ifdef _ITCDLL
    	m_btnDropDown.SubclassControl(IDC_OPTIONS, this);
    	m_btnDropDown.AddImage("DROP_ARROW", -1, RGB(255,0,255));
    	m_btnDropDown.SetImageAlign(DT_RIGHT|DT_VCENTER);
    #else
    	m_btnDropDown.SubclassDlgItem(IDC_OPTIONS, this);
    #endif
    
    	m_btnDropDown.AddChoice("Name", TRUE);
    	m_btnDropDown.AddChoice("Address", TRUE);
    	m_btnDropDown.AddChoice("Notes", FALSE);
    	m_btnDropDown.AddChoice("Telephone", TRUE);
    

    API

    该控件通过 CChoiceWindowButton 类访问。它有一些简单的成员函数:

    CChoiceWindowButton::AddChoice

    void AddChoice(LPCTSTR szText, BOOL bChecked=FALSE)

    返回值

    参数
    szText:要显示为选项的文本。
    bChecked:该选项是否应初始选中。
    备注
    向列表中添加一个新选项。

     

    CChoiceWindowButton::Reset

    void Reset()

    返回值

    参数

    备注
    删除列表中的所有项。

    CChoiceWindowButton::GetCheck

    BOOL GetCheck(int iItem)

    返回值
    布尔值 - 由 iItem 指定的选项的状态。
    参数
    nItem:要查询状态的项的零基索引。
    备注
    如果选项带有复选标记,则返回 TRUE,如果选项未被用户选中,则返回 FALSE。

     

    CChoiceWindowButton::SetCheck

    void SetCheck(int iItem, BOOL bCheck=TRUE)

    返回值
    void
    参数
    iItem:要查询状态的项的零基索引。
    bCheck:布尔值。如果为 TRUE,则该项被选中;否则,被取消选中。

    CChoiceWindowButton::GetItemCount

    int  GetItemCount()

    返回值
    列表中的项数。
    参数

     

    CChoiceWindowButton::GetListCtrl

    CListCtrl&  GetListCtrl()

    返回值
    底层 CListCtrl 对象的引用 
    参数

    备注
    您可以像这样访问列表控件:
    CListCtrl& list = btnChoiceList.GetListCtrl();

     

    CChoiceWindowButton::RemoveAt

    void  RemoveAt(int iIndex)

    返回值

    参数
    要从列表中移除的项的索引。

     

    CChoiceWindowButton::m_bDisableIfEmpty

    BOOL m_bDisableIfEmpty

    备注
    布尔值,指定如果选项列表不包含任何项,按钮是否被禁用。默认值为 TRUE。

     

    CChoiceWindowButton::Reset

    void Reset()

    返回值

    参数

    备注
    删除列表中的所有项。


    CChoiceWindowButton::SetItemData

    void SetItemData(int iIndex, DWORD dwData)

    返回值

    参数
    iIndex - 要关联数据的项的索引,
    dwData - 要与该项关联的 32 位值。这可以为零。
    备注
    将一个 32 位值与一个项关联。


    CChoiceWindowButton::GetItemData

    DWORD SetItemData(int iIndex)

    返回值
    DWORD - 与该项关联的 32 位值。
    参数
    iIndex - 要关联数据的项的索引,
    备注
    检索与一个项关联的 32 位值。

    历史

    1999 年 7 月
    1.0 版本在 CodeGuru 上发布,名为 _"ChoiceListButton"_。

    1999 年 8 月
    在 CodeGuru.com 上发布了该类的小错误修复。

    1999 年 12 月 15 日
    在 CodeProject.com 上发布。

    2000 年 2 月
    1.0.2 版本在 CodeProject.com 上发布。添加了 SetItemData() 和 GetItemData() 成员函数。

  • © . All rights reserved.