大部分时候CComboBox的风格由设计时来选定,但有些时候也需由程序动态的改变其风格;这时我们发现用其自带的ModifyStyle函数并不会起作用,::GetWindowLong获取其风格然后再加入或去除我们的目标风格再用::SetWindowLong我们发现也并不起作用;那么如何实现动态的改变其风格呢?
我们知道CComboBox中有一个Create函数用于创建CComboBox实例;这样我们就可以用Create方法来动态的改变其风格,只是在Create之前我们需要把原来的窗口给销毁而已;具体代码如下:
CRect rRect;
UINT unID=0;
DWORD dwStyleEx = 0;
CFont * pfont=NULL;
pfont=m_rGHS.GetFont();
dwStyleEx = m_rGHS.GetExStyle();
//去除原来之CBS_DROPDOWNLIST风格,加入CBS_DROPDOWN风格
dwStyleEx = dwStyleEx & ~CBS_DROPDOWNLIST | CBS_DROPDOWN;
m_rGHS.GetWindowRect(&rRect);
ScreenToClient(&rRect);
unID=m_rGHS.GetDlgCtrlID();
m_rGHS.DestroyWindow();
m_rGHS.Create(dwStyleEx, rRect, this, unID);
m_rGHS.ShowWindow(SW_SHOW);
m_rGHS.SetFont(pfont, TRUE);