2013-09-16 2 views
1

I CDockablePane에서 파생되는 클래스를 만듭니다.이 코드는 다음과 같습니다.CDockablePane에서 CListBox를 만들고 전체 크기를 채우는 방법은 무엇입니까?

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 I 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의 버그입니까?

bug

+1

당신이'CListBox'를 만들 때'LBS_NOINTEGRALHEIGHT' 스타일을 설정했는지 확인하십시오 - 기본적으로 그것은 정수로 된 항목 수에 맞게 크기가 제한됩니다. –

+0

@RogerRowland 답변은 괜찮습니다. 고마워요! 이 Integral Height의 기능은 무엇입니까? – tfzxyinhao

답변

2

사용 LBS_NOINTEGRALHEIGHT 당신은 목록 상자를 만들 때.

관련 문제