如何使使 mfc combobox 的输入框只读

原帖引用:How to make combobox readonly in mfc  http://social.msdn.microsoft.com/Forums/en-NZ/vcgeneral/thread/d8fa42e7-7e46-4096-9b5c-dd7cb2fbcc3c
我想要的效果是仅仅把Combo box的输入框设为只读,不接受用户输入, 其他保持Dropdown的效果。为满足这个需求而把 Combo box 风格设为 Drop List 是不行的,因为这样的话输入框会凸起,变得像个按钮,本人以为那太难看了,简直是丑得要命!

怎么办呢?在网上收了半天总算找到了这篇文,但是这边帖子不仅是英文的,而且,不知什么原因,代码里面没有Combo-box对象,要不是他有注释,可能就直接被我Pass掉,我的问题也就解决不了了。好了言归正传。

原帖如下:

Hi,

When the combo box gets a WM_ENABLE message, check the bEnable flag and call EnableWindow and SetReadOnly for the edit box. A pointer to the edit box is retrieved by just getting the first child window of the combo box, GetWindow(GW_CHILD). Here is a sample:

 

CEdit* pEdit = (CEdit*)GetWindow(GW_CHILD);

// Always have the edit box enabled

pEdit->EnableWindow(TRUE);

// Set read only is combo box is disabled

pEdit->SetReadOnly(!bEnable);

 

Best Regards,

Rob

 

那段英文的原理解说,感觉思路有点混乱。我们问题的核心在于如何使输入框只读变为只读。而不是Combo Box是否被禁用。另外,示例代码中就没有Combo box 对象,对于一个Zero Level 的程序员来说,看不懂是怎么回事。不过关键的东西,Rob还是说清楚了。

解决问题的核心在于: 输入框是Combo Box 的第一个子对象,拿到它,调用它的SetReadOnly。代码如下:

//拿到Combo box的输入框(Combo box的第一个子窗口:GW_CHILD)。m_GZZ为CComboBox对象
CEdit* pEdit = (CEdit*)m_GZZ.GetWindow(GW_CHILD);
// 将输入框色设置为只读
pEdit->SetReadOnly(TRUE);

欧了,问题解决!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值