大部分时候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);
本文介绍了一种在程序运行过程中动态更改CComboBox控件样式的有效方法。由于使用ModifyStyle函数无法达到目的,文章提供了一个具体的解决方案,通过销毁现有控件并重新创建带有所需样式的控件来实现。
2319

被折叠的 条评论
为什么被折叠?



