gpt4 book ai didi

c++ - 自定义 Win32 的保存文件对话框

转载 作者:行者123 更新时间:2023-11-30 03:12:10 25 4
gpt4 key购买 nike

我正在尝试使用 GetSaveFileName 保存文件,并希望在保存文件对话框的底部有几个额外的弹出窗口,以允许用户指定更多选项。我正在尝试关注 MSDN documentation (特别是 Explorer-style customization )关于这个主题,但似乎无法让我的自定义项目出现。我相信我在调用我的 OFNHookProc 时正确设置了 OPENFILENAME 结构。据我所知,在 WM_INITDIALOG 消息中,我应该创建我的子控件,这就是我正在做的:

HWND settings_popup =
::CreateWindowExW(WS_EX_CLIENTEDGE | WS_EX_NOPARENTNOTIFY,
L"COMBOBOX",
L"Settings:",
WS_CHILD | WS_CLIPSIBLINGS | WS_VSCROLL | WS_BORDER | CBS_DROPDOWNLIST,
10,
10,
150,
30,
dialog, // the window parameter from the OFNHookProc
NULL,
::GetModuleHandle(NULL),
NULL);

if (settings_popup)
{
HWND parent = ::GetParent(settings_popup); // for verification
::ShowWindow(settings_popup, SW_SHOW);
::EnableWindow(settings_popup, true);
}

我还从 OFNHookProc 中为 WM_INITDIALOG 消息返回 1,为其他所有内容返回 0。

在我尝试让组合框显示在对话框中的所有尝试中,它都没有出现。我的代码中缺少什么使组合框成为我的保存文件对话框自定义的一部分?

最佳答案

当调用 CreateWindowEx() 创建子窗口时,您需要使用 GetParent() 获取对话框的父窗口,然后使用该 HWND 作为您的父窗口。不要使用对话框本身作为父级。换句话说:

HWND settings_popup =
::CreateWindowExW(WS_EX_CLIENTEDGE | WS_EX_NOPARENTNOTIFY,
L"COMBOBOX",
L"Settings:",
WS_CHILD | WS_CLIPSIBLINGS | WS_VSCROLL | WS_BORDER | CBS_DROPDOWNLIST,
10,
10,
150,
30,
::GetParent(dialog),
NULL,
::GetModuleHandle(NULL),
NULL);

关于c++ - 自定义 Win32 的保存文件对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com