微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

资源管理器类型的自定义对话框在应用程序中第一次打开时最大化

如何解决资源管理器类型的自定义对话框在应用程序中第一次打开时最大化

自定义一个资源管理器类型的浏览对话框并添加了一些控件。打开对话框时,即使我在模板资源上指定了宽度和高度,它也以最大化状态显示

Maximized dialog image

我试图通过使用 SetwindowPos、MoveWindow 和 ShowWindow API 来覆盖此行为,但它们似乎都没有调整对话框的大小。

下面是具体的代码,在对话框初始化时调用

HWND hTrueDlg = GetParent(hwndDlg);
::SetwindowPos(hTrueDlg,HWND_TOP,iXPx,iYPx,iWinWidthPx,iWinHeightPx,SWP_SHOWWINDOW);
::ShowWindow(hTrueDlg,SW_RESTORE);

这是资源文件

    WPOPENDLGCUSTOM DIALOG  0,600,40
    STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION

// I have also tried this 
    STYLE (DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION) & ~WS_MAXIMIZE

当我双击标题栏时,它是“已恢复”,下次我打开对话框时,它会显示正确的大小。问题仅在第一次打开时。当用户不知道这个变通办法时,它可能会导致一些问题。

解决方法

资源管理器风格的对话框从第一个打开的注册表配置单元中读取大小值,然后将大小值记录并读取到 Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\CIDSizeMRU 之后的一个注册表配置单元。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。