MFC dialog 记住上次窗口大小
时间: 2024-10-09 11:01:59 浏览: 45
在MFC(Microsoft Foundation Classes)中,如果你想要一个对话框在下次显示时记住其上次关闭时的位置和大小,你可以通过保存和恢复对话框的几何信息来实现。当你创建对话框时,可以设置`CDC`(Device Context)的剪贴区(ClipRect)属性来保存对话框的尺寸,然后在对话框隐藏前将这个信息存储到系统注册表或者配置文件中。
例如,在对话框的`OnDestroy()`处理程序中,你可以这样做:
```cpp
void MyDialog::OnDestroy() {
CDialogEx::OnDestroy();
// 保存对话框的矩形位置
CRect rect;
GetWindowRect(rect);
// 保存到注册表或其他持久存储
// Registry::SaveDialogGeometry(this, rect);
// 清空剪贴区以便下一次创建时使用保存的信息
CDC* pDC = GetDC();
pDC->SetClipRect(RECT());
ReleaseDC(pDX);
}
```
当再次打开对话框时,可以在初始化阶段读取并应用之前保存的尺寸:
```cpp
void MyDialog::OnInitDialog() {
CDialogEx::OnInitDialog();
// 从注册表或其他存储加载对话框的几何信息
// CRect savedRect = Registry::LoadDialogGeometry(this);
// 如果有数据,调整对话框大小和位置
if (!savedRect.IsEmpty()) {
SetWindowPos(NULL, savedRect.left, savedRect.top, savedRect.Width(), savedRect.Height(),
SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
}
}
```
请注意,这只是一个基础示例,实际应用中可能需要处理错误和异常,并选择合适的存储机制。同时,为了兼容性考虑,最好还是在对话框的`PreCreateWindow()`或`OnPrepareDocument()`等恰当时刻保存和恢复尺寸,而不是销毁时。
阅读全文