原帖引用: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);
欧了,问题解决!