Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该把初始化控件的代码放在哪里?_C++_Mfc_Wtl - Fatal编程技术网

C++ 我应该把初始化控件的代码放在哪里?

C++ 我应该把初始化控件的代码放在哪里?,c++,mfc,wtl,C++,Mfc,Wtl,我现在已经尝试了几次,试图找到一个可以插入代码部分的地方,该代码部分基本上只向对话框中的控件添加一列: void MusicPlayerDialog::InitList() { m_trackList.InsertColumn(0, "Tracks"); m_trackList.SetColumnWidth(0, 60); } 然而,到目前为止,我尝试插入的每一点都给了我一个::IsWindow(m_hWnd)断言失败 我很确定这是由于对话框尚未初始化或已被破坏造成的 但是,我

我现在已经尝试了几次,试图找到一个可以插入代码部分的地方,该代码部分基本上只向对话框中的控件添加一列:

void MusicPlayerDialog::InitList()
{
    m_trackList.InsertColumn(0, "Tracks");
    m_trackList.SetColumnWidth(0, 60);
}
然而,到目前为止,我尝试插入的每一点都给了我一个
::IsWindow(m_hWnd)
断言失败

我很确定这是由于对话框尚未初始化或已被破坏造成的

但是,我现在想知道我可以在哪里插入它,以便安全地执行

这是我创建对话框的代码段:

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hInstPrev,
    LPSTR szCmdLine, int nCmdShow)
{
    UNREFERENCED_PARAMETER(szCmdLine);
    UNREFERENCED_PARAMETER(hInstPrev);

    MusicPlayerDialog myDialog;
    MSG msg;

    myDialog.Create(NULL, NULL);

    myDialog.ShowWindow(nCmdShow);
    myDialog.UpdateWindow();

    while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}
在这里,我在消息列表之前和之后都试过了,但都给出了错误。循环后面的那个有点明显,但我认为它前面的那个很好用

另外,我在我的对话框构造函数中尝试了它,但也有点失败

我想到目前为止最好的办法是使用消息映射,比如:

MESSAGE_HANDLER(WM_INITDIALOG, OnInit);
然而,我找不到一个工作。。。。创建窗口后将触发的消息。我浏览了MSDN上的列表,但从我的阅读来看,没有一个合适的

然后,连接到它的方法将调用我的所有控件初始化方法

有人能给我指点解决办法吗

编辑:


当我把它放在OnInit()中并在它前面执行DoDataExchange()时,它似乎可以工作。仍然不确定这是否是“解决方案”

您应该在
MusicLayerDialog::OnInitDialog()中调用
InitList()
,它是
CDialog
的虚拟函数:

.h:

.cpp:

virtual BOOL OnInitDialog();
BOOL MusicPlayerDialog::OnInitDialog()
{
    CDialog::OnInitDialog();

    // more code

    // TODO: Add extra initialization here
    InitList();

    return TRUE;  // return TRUE  unless you set the focus to a control
}