Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Предпросмотр файла собственного типа в OpenDialog |
Автор: fridkaratel 11.7.2008, 22:34 |
Создал программу, которая открывает файлы собственного файла, например, *.abcd Файл содержит некоторые модели (скажем, рисунки). Этот файл не откроется ничем другим, кроме этой программы. Как при выборе этого файла в OpenDialog отобразить модель, содержащуюся в нем, как бы предпросмотром в OpenDialog? Что требуется: 1. При выборе файла в OpenDialog выполнить функцию. 2. В результате функции будет создан TBitmap, который надо поместить в OpenDialog как предпросмотр |
Автор: jonie 13.7.2008, 02:22 |
см в функцию GetOpenFileName параметр OPENFILENAME::lpfnHook (и про темплейт тож не забывайте). гугл найдет примеры. |
Автор: fridkaratel 17.7.2008, 23:38 | ||
Спасибо за наводку - нашел я материал по этой теме... читал долго, пришлось даже с делфей на си часть кода переводить.. Но вот уже 2ю ночь сижу и не могу дорубиться:
В результате получаю пустое место... картинкой и не пахнет - в чем дело? |
Автор: fridkaratel 20.7.2008, 07:37 |
Суть вот в чем: Я хочу поменять картинку в диалоге в RealTime, т.е. при выборе файла в окне диалога... Но у меня не получается ее установить даже при первом открытии.... Вот ресурс: ----------------------- 101 DIALOG 0, 0, 200, 100 STYLE DS_SETFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS FONT 8, "MS Shell Dlg" { LTEXT "Preview:", 105, 120, 50, 25, 10, NOT WS_GROUP CONTROL "", 106, "STATIC", SS_BITMAP, 80, 0, 300, 30 } ----------------------- Картинку пытаюсь открыть из файла и назначить контролу 106 при инициализации, но в итоге картинка все равно пустая... ЧТо я не так делаю? |
Автор: mekhanikus 21.7.2008, 13:08 |
Имхо, для "static control" логичней применить STM_SETIMAGE. |
Автор: fridkaratel 21.7.2008, 13:47 | ||
Все зачипись - заработало! Спасибо ;) А это правильно, что я использую STATIC? Может есть более правильные варианты? PS: А как отловить выбор файла в диалоге? |
Автор: fridkaratel 22.7.2008, 01:57 | ||
Короче, порылся я в dialogs.pas - и нашел то, что нужно! Вот код, который берет имя файла:
![]() |
Автор: fridkaratel 9.8.2008, 17:22 | ||
Когда я поднимаюсь на папку вверх (или выбираю быстрый путь слева), то элементы диалога не прорисовываются, пока на них не наведешь курсор... почему? |
Автор: Ant 11.8.2008, 09:38 |
UpdateWindow? |
Автор: fridkaratel 11.8.2008, 22:04 | ||
И куда UpdateWindow вставить? ![]() |
Автор: Ant 12.8.2008, 08:24 | ||
Что-то типа этого, набросал быстро, поэтому не уверен в работоспособности этого кода, но принцип, думаю, понятен.
|
Автор: Ant 12.8.2008, 08:24 |
удалил. ![]() |
Автор: fridkaratel 12.8.2008, 10:03 |
Не получилось... глюк так и остался... Все равно окно не прорисовывается... Оно прорисовывается, т.е. бордюр, фон, заголовок, список файлов - это есть... Мои контролы тоже видны.. Но вот стандартные кнопки "Вверх", "Назад", "Открыть" и т.п. - они не видны, пока на них не наведешь мышкой... :( |
Автор: fridkaratel 14.8.2008, 14:36 | ||||
Откопал причину проблемы... Если я делаю так:
Окно диалога прорисовывается нормально во время навигации. Но если я подключаю свой шаблон и добавляю соответствующий флаг:
То окно не прорисовывается как надо... В чем может быть проблема? |
Автор: fridkaratel 20.8.2008, 01:09 |
Оказалось, что дело в шаблоне... У меня был такой шаблон: 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 } Убрал NOT WS_GROUP, а для диалога поставил STYLE WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | DS_3DLOOK И все заработало! ![]() |