Как использовать ресурс для настраиваемого диалогового шаблона Windows API?

Я пытаюсь использовать пользовательский шаблон для структуры 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.

Что мне не хватает? Я не ссылаюсь на ресурс правильно?

2

Решение

ofn.hInstance должен быть установлен на HINSTANCE модуля (исполняемый или DLL), который имеет ресурс шаблона диалога.

0

Другие решения

Других решений пока нет …