写了一个颜色选择的自绘的combobox
想法是当点击combobox的按钮后弹出一个颜色选择的对话框(CColorDialog) 也就是说我这里用不上那个展开的下拉框
我在Cbn_Dropdown 里写的弹出的CColorDialog   但当dlg返回后 下拉框被展开 如何才能让他自动收回呢?以下是我尝试并失败的方式:
1.       m_cbColor.SetCapture();
ReleaseCapture();2.       m_cbColor.ShowDropDown(false);//这两种根本没效果  也许是因为写在OnCbnDropdown中 那时下拉框还没有展开3.::PostMessage(GetDlgItem(IDC_COMBO_COLOR)->GetSafeHwnd(),CB_SHOWDROPDOWN,0,0);
//这种方式倒是可以在视觉上关闭  但是 当我点击其他控件时 第一次没反应 第二次才有反应也就是说 虽然那个下拉框看不见了但它还是存在的  并且如果我加上CColorDialog的DoModal 焦点就会被锁死 无论我点哪都始终会执行OnCbnDropdown 因小问题而崩溃ing

解决方案 »

  1.   

    既然你用对话框来选颜色,那你用ComboBox干什么?
      

  2.   

    http://www.codeproject.com/KB/miscctrl/XColorPickerXP.aspx
      

  3.   

    严格按照 上级指示的统一美学   combobox的edit那部分显示当前的颜色 然后点combobox的按钮弹出调色板 修改颜色  返回后将edit那部分显示的颜色进行修改
      

  4.   

    尝试在对话框的DefWindowProc中截获combobox按钮的点击事件,然后弹出颜色选择对话框。并且不要把该消息继续向下传递,使得combobox不能接收到这个消息。