使用DoModal调用时,对话框不显示CListBox内容

时间:2014-11-13 21:53:14

标签: user-interface visual-studio-2008 mfc

我正在尝试初始化一个包含CListBox的CDialog框。我想通过在CDialogBox上调用DoModal来做到这一点。但是问题是,当我调用DoModal时,会打开对话框,但CListBox是EMPTY。 (其项目已初始化) 当我调用ShowWindow(SW_SHOW)时,对话框也会显示,并且CListBox包含我插入其中的项目。但是,我不想使用此方法,因为它不会暂停程序的执行。 (DoModal暂停程序执行直到窗口关闭)

所以我的问题是:如何使用DoModal打开对话框,让CListBox显示其内容? 非常感谢。

初始化CDialog子类,并调用start(打开对话框)

loadNewWorld = new LoadNewWorld(this);
loadNewWorld->Create(IDD_LOAD_NEW_WORLD , this);
loadNewWorld->Start();

LoadNewWorld类:

//Constructor header
LoadNewWorld::LoadNewWorld(CWnd* pParent /*=NULL*/) : CDialog(LoadNewWorld::IDD, pParent)

//This shows the dialog box, but does NOT show the items in CListBox
    void LoadNewWorld::Start ()
    {
        populateList();
        DoModal();
    }

//This shows the dialog box AND shows the populated CListBox. However, don't want to do this way
    void LoadNewWorld::Start ()
    {
        populateList();
        ShowWindow(SW_SHOW);
    }

1 个答案:

答案 0 :(得分:2)

在Dialog启动并创建时填充列表视图。

未创建对话框时,无法填充列表框。最好的地方是OnInitDialog。您的问题是您希望在创建列表框之前(在调用DoModal之前)填充列表框。

正如笔记已经告诉你的那样:你不能混合DoModal和Create。