1

我创建了一个从 CDockablePane 派生的类,代码如下。

class CWorkspaceBar : public CDockablePane
{
public:
    CWorkspaceBar();

// Attributes
protected:

    CXListBox   m_wndThumbList;

// Operations
public:

// Overrides

// Implementation
public:
    virtual ~CWorkspaceBar();

protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnSize(UINT nType, int cx, int cy);
    afx_msg void OnPaint();
    DECLARE_MESSAGE_MAP()
};

在函数 CWorkspaceBar::OnCreate 我创建一个 CListBox。

int CWorkspaceBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if (CDockablePane::OnCreate(lpCreateStruct) == -1)
        return -1;

    CRect rectDummy;
    rectDummy.SetRectEmpty();
    if (!m_wndThumbList.Create (WS_CHILDWINDOW | WS_VISIBLE |WS_VSCROLL|WS_HSCROLL| LBS_OWNERDRAWFIXED|LBS_HASSTRINGS|LBS_NOTIFY,rectDummy, this,IDC_THUMBNAILIMAGELIST))
    {
        TRACE0("Failed to create workspace view\n");
        return -1;
    }

    return 0;
}

在函数 CWorkspaceBar::OnSize 我调整了 CListBox 对象的大小,但它不能填满整个父窗口。

void CWorkspaceBar::OnSize(UINT nType, int cx, int cy) 
{
    CDockablePane::OnSize(nType, cx, cy);
    if(IsWindow(m_wndThumbList.GetSafeHwnd()))
        m_wndThumbList.SetWindowPos (NULL,0,0,cx,cy, SWP_NOACTIVATE | SWP_NOZORDER);
}

我测试了 CListCtrl 和 CTreeCtrl,效果很好,只有 CListBox 不能填满整个父窗口。如何修复它,这是MFC的错误吗?

漏洞
(来源:image-share.com

4

1 回答 1

2

创建列表框时使用 LBS_NOINTEGRALHEIGHT。

于 2013-09-25T10:57:00.537 回答