Problems using the Windows API Common File Dialog

0

I'm trying to use a windows API called Common File Dialog to create a window to open and save files. However I can not use the sample code that is there: link
First of all: IFileDialog. It seems to be contained in a library called "Shobjidl", in which I can not find complete I only find the header. Then you have this function: CDialogEventHandler_CreateInstance (). In this section:

Note Several examples in this topic use the CDialogEventHandler_CreateInstance helper function to create an instance of the IFileDialogEvents implementation. To use this function in your own code, copy the source code for the CDialogEventHandler_CreateInstance function from the Common File Dialog Sample, from which all of the examples in this topic are taken.

It says that I should copy from the Common File Dialog Sample, which would be this link: link < br> however the page does not load.

The sample code I'm trying to use is this:

HRESULT BasicFileOpen()
{
// CoCreate the File Open Dialog object.
IFileDialog *pfd = NULL;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, 
                  NULL, 
                  CLSCTX_INPROC_SERVER, 
                  IID_PPV_ARGS(&pfd));
if (SUCCEEDED(hr))
{
    // Create an event handling object, and hook it up to the dialog.
    IFileDialogEvents *pfde = NULL;
    hr = CDialogEventHandler_CreateInstance(IID_PPV_ARGS(&pfde));
    if (SUCCEEDED(hr))
    {
        // Hook up the event handler.
        DWORD dwCookie;
        hr = pfd->Advise(pfde, &dwCookie);
        if (SUCCEEDED(hr))
        {
            // Set the options on the dialog.
            DWORD dwFlags;

            // Before setting, always get the options first in order 
            // not to override existing options.
            hr = pfd->GetOptions(&dwFlags);
            if (SUCCEEDED(hr))
            {
                // In this case, get shell items only for file system items.
                hr = pfd->SetOptions(dwFlags | FOS_FORCEFILESYSTEM);
                if (SUCCEEDED(hr))
                {
                    // Set the file types to display only. 
                    // Notice that this is a 1-based array.
                    hr = pfd->SetFileTypes(ARRAYSIZE(c_rgSaveTypes), c_rgSaveTypes);
                    if (SUCCEEDED(hr))
                    {
                        // Set the selected file type index to Word Docs for this example.
                        hr = pfd->SetFileTypeIndex(INDEX_WORDDOC);
                        if (SUCCEEDED(hr))
                        {
                            // Set the default extension to be ".doc" file.
                            hr = pfd->SetDefaultExtension(L"doc;docx");
                            if (SUCCEEDED(hr))
                            {
                                // Show the dialog
                                hr = pfd->Show(NULL);
                                if (SUCCEEDED(hr))
                                {
                                    // Obtain the result once the user clicks 
                                    // the 'Open' button.
                                    // The result is an IShellItem object.
                                    IShellItem *psiResult;
                                    hr = pfd->GetResult(&psiResult);
                                    if (SUCCEEDED(hr))
                                    {
                                        // We are just going to print out the 
                                        // name of the file for sample sake.
                                        PWSTR pszFilePath = NULL;
                                        hr = psiResult->GetDisplayName(SIGDN_FILESYSPATH, 
                                                           &pszFilePath);
                                        if (SUCCEEDED(hr))
                                        {
                                            TaskDialog(NULL,
                                                       NULL,
                                                       L"CommonFileDialogApp",
                                                       pszFilePath,
                                                       NULL,
                                                       TDCBF_OK_BUTTON,
                                                       TD_INFORMATION_ICON,
                                                       NULL);
                                            CoTaskMemFree(pszFilePath);
                                        }
                                        psiResult->Release();
                                    }
                                }
                            }
                        }
                    }
                }
            }
            // Unhook the event handler.
            pfd->Unadvise(dwCookie);
        }
        pfde->Release();
    }
    pfd->Release();
}
return hr;
}

I find very little on the internet about these problems, which is strange since many software seems to use this method to manage files, I would like to know how to install the necessary libraries to run the program and where to find the function: CDialogEventHandler_CreateInstance ( ) that by what I saw in some forums it does not even exist.

I'm using the Mingw compiler in Codeblocks I intend to use this function in a program made in SDL2. Thanks in advance to anyone who can help me.

    
asked by anonymous 28.01.2018 / 01:02

0 answers