Я пытаюсь использовать пользовательский шаблон для структуры OPENFILENAME в C ++ и не могу понять, что именно я делаю неправильно. Вот что у меня так далеко:
#include <windows.h>
#include <iostream>
#include "resource.h"
void main() {
HWND hwnd = NULL;// owner window
OPENFILENAME ofn;
CHAR File[256];
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.hInstance = NULL;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 0;
ofn.lpstrFile = File;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(File);
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = MAX_PATH;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = NULL;
ofn.Flags = OFN_ENABLETEMPLATE;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0L;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = "IDD_DIALOGBAR";if (GetOpenFileName(&ofn)==TRUE)
{
//do something with filename
}
std::cout << CommDlgExtendedError();
}
IDD_DIALOGBAR
пользовательский ресурс, который я добавил в проект. Я сделал это, создав новый пустой проект C ++ в Visual Studio, затем щелкнув правой кнопкой мыши имя проекта в обозревателе решений и выбрав «Добавить» -> «Ресурс». Затем я выбрал «IDD_DIALOGBAR» из списка доступных ресурсов. Это добавило новый ресурс в проект, который можно просмотреть, когда я переключусь на «Resource View» в Visual Studio.
Когда я запускаю программу, диалоговое окно вообще не появляется. Результат CommDlgExtendedError()
является CDERR_FINDRESFAILURE: The common dialog box function failed to find a specified resource
,
Я также пытался изменить
ofn.lpTemplateName = "IDD_DIALOGBAR"
в
ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DIALOGBAR)
но это привело к другому сообщению об ошибке:
CDERR_DIALOGFAILURE: The dialog box could not be created. The common dialog box function's call to the DialogBox function failed. For example, this error occurs if the common dialog box call specifies an invalid window handle.
Что мне не хватает? Я не ссылаюсь на ресурс правильно?
ofn.hInstance
должен быть установлен на HINSTANCE
модуля (исполняемый или DLL), который имеет ресурс шаблона диалога.
Других решений пока нет …