Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Open File Dialog с hook-функцией, не хочет корректно работать 
V
    Опции темы
mitrich
  Дата 30.4.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



Решил я в стандартный диалог открытия файла добавить окошко предпросмотра. Сделал шаблон диалога с доп. контролами, ф-цию обработки сообщений...
Реагируя на CDN_SELCHANGE (смена выделения) хочу получить имя выделенного файла для загрузки и отображения в окошке предпросмотра. Пробовал и так:
Код

SendMessage(hdlg, CDM_GETFILEPATH, (WPARAM)1024, (LPARAM)fpath);

...и так:
Код

CommDlg_OpenSave_GetFilePath(hdlg, fpath, 1024);

Возвращается 0, т. е. ничего   smile 
Может флаги какие в структуре OPENFILENAME прописать забыл, или еще чего?
Привожу код:
Код

char fpath[1024];
int fp_length;

UINT APIENTRY OpenExHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uiMsg)
    {
    case WM_NOTIFY:
        if(((OFNOTIFY *)lParam)->hdr.code == CDN_SELCHANGE)
        {
            //fp_length = CommDlg_OpenSave_GetFilePath(hdlg, fpath, 1024);
            fp_length = SendMessage(hdlg, 
                CDM_GETFILEPATH,
                (WPARAM)1024, (LPARAM)fpath);
            //fp_length всегда 0  : (
            OutputDebugString("CDN_SELCHANGE\n");
            OutputDebugString((LPCSTR)fpath); //ничего не пишет
        }
        break;
    }

    return 0;
}

void SelectFileEx(char *fname)
{
    OPENFILENAME ofn;

    ofn.lStructSize       = sizeof(OPENFILENAME);
    ofn.hwndOwner         = 0;
    ofn.hInstance         = g_hInst;
    ofn.lpstrFilter       = "Bitmap files (*.bmp)\0*.BMP\0";
    ofn.lpstrCustomFilter = NULL;
    ofn.nFilterIndex      = 0;
    ofn.lpstrFile         = fname;
    ofn.nMaxFile          = 1024;
    ofn.lpstrFileTitle    = NULL;
    ofn.lpstrInitialDir   = NULL;
    ofn.lpstrTitle        = "Open File...(1)";
    ofn.Flags             = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | 
        OFN_HIDEREADONLY |
        OFN_EXPLORER | OFN_ENABLETEMPLATE | OFN_ENABLEHOOK |
        OFN_ENABLESIZING;
    ofn.lpstrDefExt       = "BMP";
    ofn.lpfnHook          = (LPOFNHOOKPROC)OpenExHookProc;
    ofn.lpTemplateName    = MAKEINTRESOURCE(IDD_OPENEX);

    GetOpenFileName(&ofn);
}
 
PM MAIL   Вверх
mitrich
Дата 1.5.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



В общем, я и сам нашел в чем дело: в хук-функцию передается хэндл дочернего окна (с добавленными элементами), а хэндл главного диалога передается в ((OFNOTIFY *)lParam)->hdr.hwndFrom.
Т.е., надо было делать:
Код

CommDlg_OpenSave_GetFilePath(((OFNOTIFY *)lParam)->hdr.hwndFrom, fpath, 1024);
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.