试试这个版本的 combo 呱呱,出现问题了, 竟然没有滚动条,以前没发现。。。
属性设置了hscorllbar=”true” vscrollbar=”true” 然并软。。
于是跟了下代码,发现 其实 是有调用 滚动条,但是 没有资源,,
很自然的进入 CComboUI::DoPaint 没发现啥然后发现
CComboWnd* m_pWindow;这个变量。
继续研究发现
LRESULT CComboWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if( uMsg == WM_CREATE ) {
m_pm.SetForceUseSharedRes(true);
...
}
...
else if( uMsg == WM_CLOSE ) {
m_pOwner->SetManager(m_pOwner->GetManager(), m_pOwner->GetParent(), false);
if( !m_pOwner->IsFloat() ) m_pOwner->SetPos(m_pOwner->GetPos(), false);
else m_pOwner->SetPos(m_pOwner->GetRelativePos(), false);
m_pOwner->SetFocus();
看来是找到了 ,发现重点是 m_pLayout->EnableScrollBar(); 里面设置了 滚动条默认开启,
但是资源是空的,哈哈,原来是 CPaintManagerUI m_pm, 这个变量的问题了,
那既然定位到了 原因,那离结果就不远了。
修改代码如下,即可。
if( uMsg == WM_CREATE ) {
m_pm.SetForceUseSharedRes(true);
m_pm.Init(m_hWnd);
// The trick is to add the items to the new container. Their owner gets
// reassigned by this operation - which is why it is important to reassign
// the items back to the righfull owner/manager when the window closes.
m_pLayout = new CComboBodyUI(m_pOwner);
m_pLayout->SetManager(&m_pm, NULL, true);
LPCTSTR scroll_bar_value = m_pOwner->GetManager()->GetDefaultAttributeList(_T("HScrollBar"));
if (scroll_bar_value) {
m_pm.AddDefaultAttributeList(_T("HScrollBar"), scroll_bar_value);
}
scroll_bar_value = m_pOwner->GetManager()->GetDefaultAttributeList(_T("VScrollBar"));
if (scroll_bar_value) {
m_pm.AddDefaultAttributeList(_T("VScrollBar"), scroll_bar_value);
}
即在create的时候,设置HScrollBar 和 VScrollBar 。
效果如下: