Windows API GetOpenFileName с шаблоном и хуком - PullRequest
0 голосов
/ 30 августа 2010

Я пытаюсь использовать шаблон с GetOpenFileName без успеха. Я нашел очень мало по этой теме в MSDN или в Интернете. Я основал свою попытку на том, что увидел здесь

http://visual -c.itags.org / видео-с-с ++ / 77687 /

Мой код следующий. Комментарии ШАБЛОНА показывают, где я внес изменения в код b4 попытки шаблона; в основном для удаления определенных строк. Отображаются открытые окна обычного типа проводника Windows, но без дополнений, которые я хочу сделать с шаблоном. Я совсем не уверен, что должно быть в функции ловушки, но я знаю, что она не вызывается, поскольку я установил точку останова там.

// Global variable

OPENFILENAME    IFN;

// In WndProc

    case WM_CREATE:
        IFN.hInstance = ((LPCREATESTRUCT)lParam)->hInstance;    // TEMPLATE
        IFN.hwndOwner = hWnd;               // TEMPLATE
        break;

// In WndProc menu processing

    case IDM_INPUT_FILE:
    {
//      OPENFILENAME    IFN;                        // TEMPLATE
        strcpy (szFile,"NEWEXPORT.GED");
        IFN.lStructSize     = sizeof(IFN);
//      IFN.hwndOwner       = hWnd;                 // TEMPLATE
//      IFN.hInstance       = NULL;                 // TEMPLATE
        IFN.lpstrFilter     = "All\0*.*\0GEDCOM\0*.GED\0";
        IFN.nFilterIndex    = 2;
        IFN.lpstrCustomFilter   = NULL;
        IFN.lpstrFile       = szFile;
        IFN.nMaxFile        = 510;
        IFN.lpstrFileTitle  = NULL;
        IFN.lpstrInitialDir = NULL;
        IFN.lpstrTitle      = NULL;
        IFN.Flags       = OFN_FILEMUSTEXIST || OFN_PATHMUSTEXIST || OFN_EXPLORER || OFN_ENABLETEMPLATE || OFN_ENABLEHOOK ; // TEMPLATE
        IFN.lpstrDefExt     = NULL;
        IFN.lpfnHook        = FileAddOn;                // TEMPLATE NULL;
        IFN.lpTemplateName  = MAKEINTRESOURCE(IDD_FILEADDON);   // TEMPLATE

        if (!GetOpenFileName(&IFN))
        {
            Beep (1000,500);
            break;
        }

// **************** Hook function

UINT_PTR CALLBACK FileAddOn (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
                return TRUE;

        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
            {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }
            break;
    }
    return TRUE;
}

// IDD_FILEADDON was made with the visual C dialog editor and has the following properties
// Style=Child, Border=none,clip siblings,3D look

1 Ответ

0 голосов
/ 30 августа 2010

Вы должны ИЛИ флажки OPENFILENAME с |, а не ||

...