图1:第一个可编辑项被选中。编辑字段的组合框可以进行编辑。
图2:一个只读的项目被选中。组合框的编辑字段现在只读。
背景
我工作的地方,有可能进入订单购买各种股票的股份在交易应用。当点击一个股票,进入命令窗口被打开了。交易商,在其他参数,可以输入数量。我的客户的要求,它应该有可能有一个默认值。默认值是,无论是在市场,去年订单的数量或一些固定的数量。设置这个默认值可以使用几个标准控制,这将是用于输入默认数量已经完成。例如,几个单选按钮来决定哪一种默认数量,如果选择固定数量,另一个编辑领域可启用,可以输入一个整数。由于屏幕空间是有价值的,几个再加上控制比较复杂,为用户和开发自定义控件真的很好玩,我们决定去一个自定义控件。用户指南
读取组合框有一个可编辑的(非只读项),第一个项目。当这个项目被选中,组合框的编辑领域变得活跃,并可以由用户进行更新。只要在编辑栏的文本改变,第一项是改变。其他项目是只读的。当选择,组合框的编辑栏将变成只读。现在,用户可以选择预定义的值之一,或选择编辑项目,并输入任何值。CReadOnlyComboBox
正常的组合框资源添加到你的窗口。对资源设置以下属性:
类型:下拉业主抽奖:固定有字符串:选中
接下来,组合框的资源使用类向导添加一个控制变量。在H文件中,更改数据类型从CComboBox CReadOnlyComboBox。然后,事后控制被创建,调用的AddString方法,这将增加项目的第一项编辑。该组合框初始化方法CComboTestDlg:在这个例子中的OnInitDialog()。我们使用一个数据成员称为m_combo属于CComboTestDlg组合框。
CReadOnlyComboBox公开继承从CComboBox,使正常的组合框的所有功能。但项目应与CReadOnlyComboBox:AddString()。
CReadOnlyComboBox以下三个方法做好各项工作。下面是每个方法和使用的一个简短的解释。无效CReadOnlyComboBox::OnSelchange()
OnSelchange被称为当用户改变了组合框的列表框的当前选择。根据如果用户选择了一个只读的项目或不,编辑字段的组合框设置为只读,或设置被激活。无效CReadOnlyComboBox:OnEditupdate()
OnEditupdate是所谓的用户后,已采取行动可能改变在组合框的编辑控制部分文本。这意味着,项目零以前选择,因为这是只有这样才能使编辑栏,否则编辑字段是只读的。我们更新组合框的列表框的第一个项目,以反映这个变化。无效CReadOnlyComboBox::的DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
的框架称为所有者绘制组合框变化时的视觉效果。这就是所谓的每一次的项目,需要绘制。此功能将利用该项目的文本以及更改项目的背景颜色。不同的颜色用于只读项目和编辑项目。此外,如果用户选择了一个项目,我们需要突出显示选择的项目。