如何在另一个窗口中正确创建CMFCListCtrl?

时间:2012-12-12 14:48:37

标签: c++ winapi mfc

我遇到以下代码问题

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
    {
        return -1;
    }

    DWORD dwStyle = LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | WS_CLIPSIBLINGS | WS_CHILD;

    CMFCListCtrl TempCtrl;
    TempCtrl.Create(dwStyle, CRect(0, 0, 0, 0), this, IDC_FILTERLIST);
    CMFCHeaderCtrl& HeaderCtrl = TempCtrl.GetHeaderCtrl();
    if (!::IsWindow(HeaderCtrl.GetSafeHwnd()))
    {
        AfxMessageBox("Failed to create CMFCListCtrl properly!");
    }

    ....

未正确创建/初始化CMFCListCtrl的标头控件部分。有谁知道我做错了什么?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我注意到你在CView派生类中创建了一个控件。请注意,id必须从值AFX_IDW_PANE_FIRST开始。否则它会失败。只需谷歌AFX_IDW_PANE_FIRST,您就会找到解释原因。

所以,只需用以下代码替换你的行:

TempCtrl.Create(dwStyle, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST);

答案 1 :(得分:0)

我在创建时使用WS_VISIBLE样式解决了上述问题,但我仍然不明白为什么会这样。