我现在已经多次尝试找到一个可以插入代码部分的地方,它基本上只会在我的对话框中为控件添加一列:
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);
但是,我无法找到在窗口创建后触发的WM _....消息。我浏览了MSDN上的可用列表,但是从我的阅读中可以看出没有一个能够正常使用的列表。
连接到它的方法将调用我的所有控件初始化方法。
有人能指出我的解决方案吗?
编辑:
当我把它放在OnInit()中并在它前面执行DoDataExchange()时似乎有效。仍然不确定那些"""溶液
答案 0 :(得分:3)
您应该在InitList()
中拨打MusicPlayerDialog::OnInitDialog()
,这是CDialog
的虚拟功能:
·H:
virtual BOOL OnInitDialog();
的.cpp:
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
}