Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Предпросмотр файла в окне выбора - Проблема с отрисовкой окна

490
08 августа 2008 года
frid-karatel
357 / / 15.09.2007
Код:
/* Hook-функция для диалогового окна */
UINT CALLBACK Dialog_HookProc(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
  if (Msg == WM_NOTIFY)
  {
    if (((OFNOTIFY*)lParam)->hdr.code == CDN_SELCHANGE)  // Сообщение о выборе файла
    {
      char FileName[MAX_PATH];
      SendMessage(GetParent(Wnd), CDM_GETFILEPATH, sizeof(FileName), Integer(&FileName));
      Dialog_PreviewFile(FileName, Wnd);
      return true;
    }
  }

  return false;
}
//---------------------------------------------------------------------------
/* Инициализация диалогового окна и его отображение */
bool Dialog_Execute()
{
  TOpenFilename ofn;

  char szFile[MAX_PATH - 1];
  int Result;

  memset(&ofn, 0, sizeof(TOpenFilename));
  memset(&szFile, 0, MAX_PATH);

  ofn.lStructSize     = sizeof(TOpenFilename);
  ofn.hwndOwner       = Application->MainForm->Handle;
  ofn.hInstance       = HInstance;
  ofn.lpstrFile       = szFile;
  ofn.nMaxFile        = MAX_PATH;
  ofn.lpstrFilter     = "Все файлы (*.*)\0*.*\0";
  ofn.nFilterIndex    = 0;
  ofn.lpstrTitle      = "Открыть файл";
  ofn.lpstrInitialDir = NULL;
  ofn.lCustData       = LPARAM(&Info); // Передаем нашу структуру
  ofn.lpfnHook        = Dialog_HookProc; // Указатель на хук-процедуру
  ofn.lpTemplateName  = MAKEINTRESOURCE(101);
  ofn.Flags           = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
                        OFN_ENABLEHOOK | OFN_ENABLETEMPLATE; // <-- это главное

  Result = GetOpenFileName(&ofn);

  if (Result)
  {
    Info.FileName = ofn.lpstrFile; // Записываем имя файла в структуру
  }

  return Result;
}
//---------------------------------------------------------------------------
/* Предпросмотр файла в диалоговом окне выбора*/
void Dialog_PreviewFile(AnsiString FileName, HWND Wnd)
{
  if (!FileExists(FileName)) return;
  fMain->Caption = FileName;
}
//---------------------------------------------------------------------------


Когда я поднимаюсь на папку вверх (или выбираю быстрый путь слева), то элементы диалога не прорисовываются, пока на них не наведешь курсор... почему?
14
18 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Ну для начала стоит определить, это из-за хука или из-за шаблона..
490
19 августа 2008 года
frid-karatel
357 / / 15.09.2007
Цитата: Phodopus
Ну для начала стоит определить, это из-за хука или из-за шаблона..



Откопал причину проблемы...

Если я делаю так:

 
Код:
ofn.Flags           = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLEHOOK /*| OFN_ENABLETEMPLATE*/;

Окно диалога прорисовывается нормально во время навигации.

Но если я подключаю свой шаблон и добавляю соответствующий флаг:
 
Код:
ofn.Flags           = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLEHOOK | OFN_ENABLETEMPLATE;


То окно не прорисовывается как надо...

В чем может быть проблема?
14
19 августа 2008 года
Phodopus
3.3K / / 19.06.2008
В шаблоне! :D (он у тебя WS_CHILD?)
490
19 августа 2008 года
frid-karatel
357 / / 15.09.2007
Цитата: Phodopus
В шаблоне! :D (он у тебя WS_CHILD?)



101 DIALOG 0, 0, 400, 75
STYLE DS_SETFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE
FONT 8, "MS Shell Dlg"
{
LTEXT "Высота:", 100, 68, 0, 30, 10, NOT WS_GROUP
LTEXT "Ширина:", 101, 68, 15, 30, 10, NOT WS_GROUP
LTEXT "12", 103, 100, 0, 15, 10, NOT WS_GROUP
LTEXT "12", 104, 100, 15, 15, 10, NOT WS_GROUP
CONTROL "", 106, "STATIC", SS_BITMAP, 130, 0, 350, 100, WS_EX_CLIENTEDGE
}

Так-так, что тут надо подправить? :)

14
19 августа 2008 года
Phodopus
3.3K / / 19.06.2008
:eek: что такое NOT WS_GROUP, убери срочно (вааааапсче, с предшествующей запятой)
для самого диалога попробуй STYLE WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | DS_3DLOOK
490
20 августа 2008 года
frid-karatel
357 / / 15.09.2007
Цитата: Phodopus
:eek: что такое NOT WS_GROUP, убери срочно (вааааапсче, с предшествующей запятой)
для самого диалога попробуй STYLE WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | DS_3DLOOK



Все решилось! Спасибо ;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог