//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后要执行何种操作才能生效
{
DWORD x = m_combo.GetStyle();
ASSERT(m_combo.ModifyStyle(0,CBS_DROPDOWNLIST));
DWORD y = m_combo.GetStyle();
ASSERT(x != y);
}//为何?
修改style后要执行何种操作才能生效
ModifyStyle时使用第三个参数,加上SWP_DRAWFRAME即可。
m_combo.ModifyStyle(CBS_DROPDOWN,CBS_DROPDOWNLIST, SWP_DRAWFRAME );
无效
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 );
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 );
将程序中的DestroyWindow改为ShowWindow( theChild , SW_HIDE )就可以了combobox需要输入时用ShowWindow( theChild , SW_SHOW )就可以了另外记得在还原时加上属性
中的SWP_DRAWFRAME改为SWP_FRAMECHANGED试试看