问题标签 [ccombobox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mfc - 更新可编辑组合的文本值时出现问题
我的对话框上有一个简单的可编辑组合框。
它在下拉列表中有几个预定义的文本值。其中一项是:
组合框映射到一个CString
变量m_strNotes
。
如果我这样做:
我发现组合框最终选择了“Test 123”!
相反,我必须使用m_cbTextValues.SetWindowText(_T("Test"));
和绕过使用m_strNotes
变量。
为什么我必须这样做?由于CComboBox
可以编辑,文本不必在下拉列表中。那么当我使用前一种方法时,为什么不只设置编辑文本而不尝试在下拉列表数据中找到合适的匹配项?
c++ - 设置 MFC CComboBox 的编辑框/静态文本区域的高度(不是下拉菜单)
我的目标是能够在组合框关闭时以编程方式控制组合框的宽度和高度(不显示下拉菜单)。我有各种其他控件,例如按钮,并且我希望所有控件在对话框上显示为统一大小(例如,100 x 40)。我试着打电话my_cb_device.SetItemHeight(-1,40)
,但它似乎没有任何效果。样式为 CBS_DROPDOWNLIST。谁能提供一个简单的例子来改变这个?CBS_NOINTEGRALHEIGHT 是否需要设置/不设置?我已经尝试了我能想到的所有组合,似乎没有任何影响高度。奇怪的是,宽度并不是不合作的。一些代码(注:BTN_HT
是40):
c++ - Windows CE - 禁用 CComboBox 突出显示
我正在使用 Visual Studio 2008 使用 C++ 和 MFC 编写适用于 Windows CE 6 的应用程序。
当我选择一个元素时,我想删除一个 CComboBox 派生类的蓝色突出显示。根据这篇 MSDN 文章,我无法将组合框的样式设置为 LBS_OWNERDRAWFIXED 或 CBS_OWNERDRAWFIXED 以在我的 DrawItem 函数上选择选择的颜色。
我尝试使用消息 CBN_SELCHANGE 发送 WM_KILLFOCUS 消息。它部分工作:控件失去焦点(所选元素不再是蓝色),但如果我再次单击组合框,它不会显示元素列表。
我读过我可以使用绘画事件来设置高光的颜色,但我不知道或找到如何做到这一点。
如何删除组合框的蓝色突出显示?
编辑:组合框是只读的(标志 CBS_DROPDOWNLIST)
mfc - 在 CComboBox 的编辑控件中检测键盘热键
我有这个代码:
最初,我CEdit
的对话框中有 3 个控件。当您使用此键按下时,它会对编辑控件中的选择执行上述操作。
我将控件从 更改CEdit
为CComboBox
。它们是可编辑类型。我调整EncodeText
为使用GetEditSel
and SetEditSel
。
现在唯一的问题是当我在组合框中编辑文本时。我选择了一些文本并按 CTRL + I 并没有任何反应。我的对话的 PTM 没有被拦截。
视觉示例
在此CEdit
控件中,我可以选择文本:
然后我使用其中一个热键,例如:CTRL + B,它仍然有效:
但是,当我在可编辑中选择一些文本CComboBox
并使用相同的热键时:
在这种情况下,它不起作用。
我假设这是因为从技术上讲,我在组合的嵌入式“编辑”控件中。既然我在组合中使用选定的文本,我如何仍然检测热键?
mfc - MFC CComboBoxEx 仅选择文本
我正在使用CComboBoxEx
MFC 中的控件为将来的绘图选择颜色。我的 ComboBox 中的项目有小图片——颜色示例和颜色名称。一切都很好,除了一件烦人的事情——当我选择某个项目时,不仅所选项目中的文本具有不同的背景,而且图片本身也发生了变化。如何仅更改文本的背景颜色?
c++ - MFC/C++ ComboBox:禁用下拉关闭和打开的绘制(UI 冻结)
我刚刚向在旧 MFC 应用程序中调用的派生类
添加了一个Item-Filter-Feature 。CComboBox
ComboBoxFbp
因此,当用户键入时,DropDown 中的一长串项目会被相应地过滤。到目前为止一切都很好。
ListBox/DropDown 的大小/高度一旦打开就不会改变。当DropDown 打开时,它确实会发生相应的变化。这意味着如果只有 2 个项目,则 DropDown 只有 2 个项目高。
我的问题
当用户输入只有一个项目适合 DropDown 的文本时,DropDown 的高度只有 1 个项目(在某些用户工作流程中会发生这种情况,即用户手动关闭和打开 DropDown)。
现在,当用户现在更改文本以使多个项目适合时,高度保持为 1 项,并且看起来很奇怪,因为即使滚动条看起来也不正确,因为它不适合。
到目前为止我尝试过的
- 我不能使用
CComboBox::SetMinVisibleItems
(或它背后的 MSG),因为它只能在 Unicode CharacterSet(我无法在这个旧应用程序中更改)和从 WinVista 开始(应用程序在 WinXP 上运行)中工作。 - 唯一的其他选择是关闭并打开 DropDown,以便它以正确的高度正确重绘(请参阅//这使得 DropDown在上面的源代码中“闪烁”)。
现在使用选项 2,我不希望用户在按下每个键后看到 DropDown 的关闭和打开(“闪烁”)。
为了防止这种情况,我尝试了一些我发现的解决方案,但在我的情况下没有一个适用于 ComboBox-DropDown。这是我在 . 之前ShowDropDown(false)
和 . 之后放置的方法列表ShowDropDown(true)
。
- 启用窗口(假/真);
- (Un)LockWindowUpdate();
- SendMessage(WM_SETREDRAW, FALSE/TRUE, 0)
在所有三个电话中,我仍然看到 DropDown 关闭/打开。
你们有其他想法如何防止这种闪烁吗?
在此先感谢索科
mfc - 用图标计算 CComboBoxEx 的最大下拉宽度
我在CodeProject上看到了这篇关于动态设置宽度的文章CComboBox
。
但是,我使用的是CComboBoxEx
:
正如您在最后一个条目中看到的那样,它被裁剪了。所以我想自动加宽下拉列表。
它需要考虑这样一个事实,即它们也是左侧图标的空间。所以这还不够好:
我们如何考虑左侧的图标?
user-interface - 通过回车键进行选择的CComboBox事件?
我有一个CComboBox
DropList 样式的对话框。我希望它在以下情况下调用我的函数(例如LoadData()
):
- 用户单击下拉列表中的项目,或
- 下拉列表中的项目被突出显示(通过鼠标悬停或键盘),并且用户按下回车键
但不是当用户仍在#2中输入文本时。
LoadData()
在处理程序中调用ON_CBN_SELCHANGE
#1 可以正常工作,但对于 #2,此事件会在每次击键时触发,而不是仅在 enter 时触发。换句话说,如果我有组合框项目:
然后我输入12
,它会触发ON_CBN_SELCHANGE
一次 for 1
,一次 for 12
... 但实际上我正在尝试输入123
,所以我不希望前 2 次击键导致LoadData()
调用。
实现这一点的正确方法是什么?
mfc - 将特定的 CComboBoxEx(扩展组合框)项目设置为带有文本颜色的粗体
我有一个CComboBoxEx
显示一些图像和谈话号码的:
具体组合项的文本属性如何?
- 将字体设置为粗体。
- 设置字体颜色。
我知道CComboBox
我可以让它所有者自己绘制和创建字体并渲染组合项。但这是CComboBoxEx
而且它适合图像,所以所有者绘制会更难。
是否有一个简单的解决方案可以将特定CComboBoxEx
项目设置为粗体并具有特定的文本颜色?谢谢。
我看到了这个问题,我认为我可以这样做,但我无法让它发挥作用。
c++ - 在 ComboBox 编辑中设置焦点时如何显示下拉列表?
我想在 ComboBox 中实现自动完成。作为第一步,当用户单击编辑框并在输入任何内容之前,它应该显示包含所有可用选项的下拉列表。
一个问题是,如果用户单击下拉按钮,下拉列表会出现并很快消失。为了解决这个问题,我认为我需要对 ComboBox 进行子类化以拦截“单击下拉按钮”事件,而不是将其沿链传递。但是经过一番搜索,我似乎没有找到它是什么事件。