MFC创建线程函数放到OnInitDialog初始化代码中报错
时间: 2024-02-28 11:57:52 浏览: 100
在 MFC 的 OnInitDialog 函数中创建线程是不推荐的,因为该函数是用于创建对话框的,应该尽量避免在其中执行耗时操作。如果您必须在该函数中创建线程,请确保您在调用 CreateThread 函数之前先调用 AfxBeginThread 函数,以确保线程的正确启动和管理。例如:
```
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 创建线程
AfxBeginThread(MyThreadProc, this);
return TRUE;
}
```
其中 MyThreadProc 是您自己定义的线程函数,this 指针是传递给线程函数的参数。请注意,这种方法仍然可能会导致一些问题,因为线程可能在对话框销毁之前仍在运行。因此,最好在对话框销毁之前关闭线程,以避免内存泄漏和其他问题。
相关问题
MFC初始化中设置DIALOG的大小
在 MFC 中,可以在对话框类的 OnInitDialog 函数中设置对话框的大小。
1. 在对话框资源中设置对话框的大小
首先,在对话框资源中设置对话框的大小,可以通过拖拽边框或者在属性窗口中设置对话框的大小。
2. 在对话框类的 OnInitDialog 函数中设置对话框的大小
在对话框类的 OnInitDialog 函数中,可以通过 GetWindowRect 函数获取对话框的矩形区域,然后使用 SetWindowPos 函数设置对话框的大小。
例如:
```
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// 获取对话框的矩形区域
CRect rect;
GetWindowRect(&rect);
// 设置对话框的大小
SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(), SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW);
return TRUE;
}
```
其中,SWP_NOMOVE 表示不改变窗口的位置,SWP_NOZORDER 表示不改变窗口的 Z 序。
这样,就可以在对话框类的 OnInitDialog 函数中设置对话框的大小了。需要注意的是,如果在对话框资源中已经设置了对话框的大小,可以省略这一步,直接在 OnInitDialog 函数中调用父类的 OnInitDialog 函数,不需要再次设置对话框的大小。
vs2008mfc怎么添加oninitdialog
在 VS2008 MFC 中,您可以通过以下步骤添加 OnInitDialog 函数:
1. 打开您的 MFC 对话框类头文件 (.h)。
2. 在类声明中添加以下函数声明:
```
virtual BOOL OnInitDialog();
```
3. 打开您的 MFC 对话框类源文件 (.cpp)。
4. 在类实现中添加以下函数实现:
```
BOOL YourDialogClass::OnInitDialog()
{
CDialog::OnInitDialog();
// Add your initialization code here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
```
5. 将 "YourDialogClass" 替换为您的对话框类名。
6. 在 OnInitDialog 函数中添加您的自定义初始化代码。
这样就可以在您的 MFC 对话框类中使用 OnInitDialog 函数了。
阅读全文