2014-01-15 2 views
2

Я пытаюсь использовать собственный шаблон в структуре OPENFILENAME на C++ и не могу понять, что именно я делаю неправильно. Вот то, что я до сих пор:Как использовать ресурс для шаблона диалогового окна Windows API?

#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» из списка доступных ресурсов. Это добавило новый ресурс в проект, который можно просмотреть, когда я переключусь на «Просмотр ресурсов» в 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.

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

+0

В шаблоне может быть использован пользовательский элемент управления, о котором вы забыли зарегистрироваться –

ответ

0

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