读书人

CComboBox取消当前的选择或者是当前选

发布时间: 2012-03-15 11:50:39 作者: rapoo

CComboBox取消当前的选择或者是当前选择无效
CComboBox控制,DropList
当选择新的值后,会显示新的值。

如果这样,在选择新值的时候,先判断当前值是否可选或者说是当前值是否应该选,如果否,则保持上一次的值,即当前值 无效。如:
1、当前CComboBox的值为:北京;
2、下拉,选择新的值为:上海;
3、判断当前不应该选择:上海;
4、取消当前的选择,CComboBox的值还是:北京。

问:

有什么好的办法可以取消当前选择的值,使用CComboBox的值仍旧为:北京?谢谢

除去这种办法:
1、保存上一次选择的Index
2、取消的话重新设置上一次的Index

[解决办法]
呵呵, 就是一个取值判断而已嘛.
LZ 先吃好哈..
[解决办法]
不如先过滤一下把不可选的值直接跳过,需要这么长的代码搞这个么。。
[解决办法]
1,取当前的值,
2.取选择的值,判断是不是需要更新,需要则更新 ,
否则保留原值。。。

[解决办法]
1、当前CComboBox的值为:北京;
2、下拉,选择新的值为:上海;
3、判断当前不应该选择:上海;
4、取消当前的选择,CComboBox的值还是:北京。
-----------------------
先判断当前item的index索引值
你判断当前item项不应该选择的话,设置为先前的item即可
[解决办法]
响应CBN_SELCHANGE事件 在函数中添加判断条件就行
[解决办法]
除去这种办法:
1、保存上一次选择的Index
2、取消的话重新设置上一次的Index
=============================
为什么去除这种方法,这多合理呀.

[解决办法]
因为GetDroppedControlRect(&rc);返回的坐标有问题,所以:int editHeight=rc.Height() -4;
这个 4 就不好控制了。
我给你另一个方法,思路是取得combo中listbox,然后直接用:CListBox 的ItemFromPoint :
1:取得combo中listbox (先在头文件中定义:CListBox m_listbox;)

C/C++ code
HBRUSH CCBlistDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {    if (nCtlColor == CTLCOLOR_LISTBOX)    {//ListBox control,It is a COMBOLBOX,not a normal listbox.Besides,    //It is not a child window of combobox.        if (m_listbox.GetSafeHwnd() == NULL)        {            m_listbox.SubclassWindow(pWnd->GetSafeHwnd());        //    m_listbox.Attach(pWnd->GetSafeHwnd());        }    }    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);        // TODO: Change any attributes of the DC here        // TODO: Return a different brush if the default is not desired    return hbr;} 

读书人网 >VC/MFC

热点推荐