Вопрос по winapi, savefiledialog, customization, c++, ofnhookproc – Настройка диалога сохранения файла в Win32
Я пытаюсь сохранить файл используяGetSaveFileName
и хочу иметь пару дополнительных всплывающих окон в нижней части диалогового окна сохранения файла, чтобы пользователь мог указать дополнительные параметры. Я пытаюсь следоватьДокументация MSDN (в частности,Настройка в стиле проводника) по теме но могуПохоже, что мой пользовательский элемент появился. Я считаю, что я создалOPENFILENAME
правильно структурировать, как яя получаю звонки в мойOFNHookProc
, Насколько я знаю, это во время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);
}
Я также возвращаю 1 из моегоOFNHookProc
дляWM_INITDIALOG
сообщение и 0 для всего остального.
Во всех моих попытках отобразить комбинированный список в диалоговом окнене подходит. Чего мне не хватает в моем коде, чтобы сделать выпадающий список частью моей настройки диалога сохранения файла?
вам нужно использовать 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);
когда вы добавляете элементы управления в общий диалог, эти новые элементы управления находятся в шаблоне диалога (как ресурс или в памяти). Таким образом, окна заботятся о положении.
Если вы все еще хотите создать свои элементы управления во время выполнения, яЯ предполагаю, что вы также должны изменить размер и поместить своих родителей вWM_INITDIALOG
или жеCDN_INITDONE
(Ваш родитель - пустой диалог внутри основного диалога).WinSpy ++ к "отлаживать» диалог во время выполнения