//m_combo是对话框上的一个comboboxvoid CTestcomboDlg::OnButton2() 
{
   DWORD x = m_combo.GetStyle();
   ASSERT(m_combo.ModifyStyle(0,CBS_DROPDOWNLIST));
   DWORD y = m_combo.GetStyle();
   ASSERT(x != y);
}//为何?
修改style后要执行何种操作才能生效

解决方案 »

  1.   

    或许 CBS_DROPDOWNLIST 这种属性必须在创建的时候就指定, 以后指定是无效的吧.
      

  2.   

    m_combo.ModifyStyle(0,CBS_DROPDOWNLIST, SWP_DRAWFRAME );
    ModifyStyle时使用第三个参数,加上SWP_DRAWFRAME即可。
      

  3.   

    还应该移走原来的属性,如:
    m_combo.ModifyStyle(CBS_DROPDOWN,CBS_DROPDOWNLIST, SWP_DRAWFRAME );
      

  4.   

    ASSERT(m_a.ModifyStyle(CBS_DROPDOWN,CBS_DROPDOWNLIST, SWP_DRAWFRAME ));
    无效
      

  5.   

    可以使用下面的代码实现:DWORD theStyle;
    HWND theChild;
    theChild = ::GetWindow( m_combo.m_hWnd , GW_CHILD );
    theStyle = ::GetWindowLong( m_combo.m_hwnd , GWL_STYLE );
    theStyle |= !CBS_DROPDOWN;
    theStyle |= CBS_DROPDOWNLIST;
    ::DestroyWindow( theChild );
    ::SetWindowLong( m_combo.m_hWnd , GWL_STYLE , theStyle );
      

  6.   

    咦~我试了一下!好像这样就可以了!不明白!而且要反过来就不行!
    DWORD theStyle;
    HWND theChild;
    theChild = ::GetWindow( m_combo.m_hWnd , GW_CHILD );
    theStyle = ::GetWindowLong( m_combo.m_hwnd , GWL_STYLE );
    ::DestroyWindow( theChild );
    ::SetWindowLong( m_combo.m_hWnd , GWL_STYLE , theStyle );
      

  7.   

    属性一定要有的,不可以省略如果你是需要返过来的话
    将程序中的DestroyWindow改为ShowWindow( theChild , SW_HIDE )就可以了combobox需要输入时用ShowWindow( theChild , SW_SHOW )就可以了另外记得在还原时加上属性
      

  8.   

    m_combo.ModifyStyle(CBS_DROPDOWN,CBS_DROPDOWNLIST, SWP_DRAWFRAME );
    中的SWP_DRAWFRAME改为SWP_FRAMECHANGED试试看
      

  9.   

    Certain window data is cached, so changes you make using SetWindowLong will not take effect until you call the SetWindowPos function. Specifically, if you change any of the frame styles, you must call SetWindowPos with the SWP_FRAMECHANGED flag for the cache to be updated properly.
      

  10.   

    对不起,用showwindow的方法是不行的。因为combobox在建立的时候就决定了它的style,建议使用两个combobox来转换使用。
      

  11.   

    对不起,又发现一个地方错了,Beginner就是Beginner!theStyle |= !CBS_DROPDOWN;这里应该是theStyle |= ~CBS_DROPDOWN;才对,"!"是"否"的意思,"~"才是按位取反
      

  12.   

    先用getsafehand(),然后dword =getstyle(),然后dword |= 具体值你自己查查,然后setstyle()。
      

  13.   

    错了,是getsafehwnd,GetExtendedStyle,SetExtendedStyle你查一下这几个函数,应该可以用