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

包含只读项和可编辑项的组合框

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.52/5 (16投票s)

2004年2月20日

CPOL

3分钟阅读

viewsIcon

123316

downloadIcon

2970

一个组合框,由只读项目和可编辑项目组成,根据选择,锁定和解锁组合框的编辑字段

Sample screenshot

图 1:第一个可编辑项被选中。 组合框的编辑字段可以编辑。

Sample screenshot

图 2:只读项被选中。 组合框的编辑字段现在是只读的。

背景

我正在开发一个交易应用程序,可以在其中输入购买各种股票的订单。 单击股票时,会打开输入订单的窗口。 在那里,交易者可以在其他参数中输入数量。 我的客户要求,应该可以有一个默认值。 默认值可以是市场上可用的任何值、上次订单的数量或某个固定数字。 设置此默认值可以通过一起使用几个标准控件来完成,这些控件将用于输入默认数量。 例如,几个单选按钮来决定哪种默认数量,如果选择固定数字,则可以启用另一个编辑字段,可以在其中输入整数。 由于屏幕空间非常宝贵,因此几个耦合控件对于用户来说更加复杂,并且开发自定义控件真的很有趣,因此我们决定使用自定义控件。

用户指南

只读组合框有一个可编辑(非只读)项,即第一个项。 选择此项时,组合框的编辑字段变为活动状态,并且可以由用户更新。 每当编辑字段中的文本发生更改时,第一个项目也会更改。 其他项目是只读的。 选择后,组合框的编辑字段将变为只读。 用户现在可以从预定义的值中选择一个,也可以选择可编辑的项目并输入任何值。

CReadOnlyComboBox

将一个普通的组合框资源添加到你的窗口。 在资源上设置以下属性

  • Type: Dropdown (下拉式)
  • Owner Draw: Fixed (固定)
  • Has Strings: checked (已选中)

接下来,使用类向导为组合框资源添加一个控制变量。 在h文件中,将数据类型从CComboBox更改为CReadOnlyComboBox。 然后,在创建控件后,调用AddString-方法将添加项目,使第一个项目可编辑。 在此示例中,组合框在方法CComboTestDlg::OnInitDialog()中初始化。 我们使用属于CComboTestDlg的数据成员m_combo作为组合框。

CReadOnlyComboBox公开继承自CComboBox,因此可以使用普通组合框的所有功能。 但是,应该使用CReadOnlyComboBox::AddString()添加项目。

CReadOnlyComboBox中的以下三个方法完成了所有工作。 以下是每个方法的简短解释和用法。

void CReadOnlyComboBox::OnSelchange()

当用户更改组合框的列表框中的当前选择时,会调用OnSelchange。 根据用户是否选择了只读项,组合框的编辑字段设置为只读或设置为活动状态。

void CReadOnlyComboBox::OnEditupdate()

当用户采取了可能更改组合框的编辑控件部分中的文本的操作后,会调用OnEditupdate。 这意味着先前选择了项目零,因为这是启用编辑字段的唯一方法,否则编辑字段是只读的。 我们更新组合框的列表框中的第一个项目以反映更改。

void CReadOnlyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

当所有者绘制的组合框的视觉方面发生变化时,由框架调用。 每个需要绘制的项目都会调用一次。 此函数将绘制项目的文本并更改项目背景的颜色。 只读项目和可编辑项目使用不同的颜色。 此外,如果用户选择了一个项目,我们需要突出显示该项目以显示选择。

历史

  • 2004 年 2 月 20 日:初始版本
© . All rights reserved.