我应该把初始化控件的代码放在哪里
Where do I put the code to initialize my controls?
我现在已经多次尝试找到一个可以插入代码部分的地方,该代码部分基本上只向对话框中的控件添加一列:
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()时,它似乎是有效的。仍然不确定这是否是的"解决方案"
您应该在MusicPlayerDialog::OnInitDialog()
中调用InitList()
,这是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
}
相关文章:
- 我的重复检查代码中的错误究竟在哪里?
- 我在哪里修复有关模板的C++代码?
- 我在哪里编写在退出 C++ 窗口窗体应用程序之前执行的代码部分
- 此代码中的右值引用在哪里?
- 我在字数C++的代码中哪里出错了
- 这些代码之间的区别在哪里?输出不应该是一样的吗?
- Microsoft计算器中的代码在哪里添加两个数字
- 我的代码到底在哪里不符合键和值类型的规范
- 此代码给出错误的输出无法找出我在哪里犯了错误
- 这个代码的瓶颈在哪里
- 在哪里放置重载<<代码?
- 此(C )代码有什么问题吗?如果是这样,有人可以告诉我我在哪里出错
- 在哪里可以在ASIO的源代码中获取有关IOCP的代码
- Win32 控制台代码在哪里运行?从多个线程使用时控制台挂起
- 在哪里可以找到C++中流行的视频游戏代码
- 我的代码中的错误在哪里
- C++在哪里可以获得sha256 openssl的代码版本
- 模板化的方法代码在哪里分配?
- 与qt设计器中所做的更改相对应的代码在哪里?
- 这段代码在哪里出现分段错误