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

Ваш аккаунт

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

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

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

GetOpenFileName

362
03 апреля 2003 года
_kolyan
339 / / 03.12.2002
В старое доброе время пользрвался я функцией
BOOL GetOpenFileName(LPOPENFILENAME)
а вот недавно написал тот же код в билдероском приложении и ничего - все тупо молчит, как будто я и не вызывал никакой функции.
И ошибки никакой не выдает.... :-(
443
03 апреля 2003 года
REmindER
292 / / 23.03.2003
Цитата:
Originally posted by _kolyan
В старое доброе время пользрвался я функцией
BOOL GetOpenFileName(LPOPENFILENAME)
а вот недавно написал тот же код в билдероском приложении и ничего - все тупо молчит, как будто я и не вызывал никакой функции.
И ошибки никакой не выдает.... :-(


У меня стандартное

char File[256];

OPENFILENAME Box;
Box.lStructSize = sizeof(OPENFILENAME);
Box.hwndOwner = NULL;
Box.hInstance = NULL;
Box.lpstrFilter = NULL;
Box.lpstrCustomFilter = NULL;
Box.nMaxCustFilter = NULL;
Box.nFilterIndex = 0;
Box.lpstrFile = &File[0];
Box.nMaxFile = 256;
Box.lpstrFileTitle = NULL;
Box.nMaxFileTitle = NULL;
Box.lpstrInitialDir = NULL;
Box.lpstrTitle = NULL;
Box.Flags = Box_EXPLORER;
Box.nFileOffset = 0;
Box.nFileExtension = 0;
Box.lpstrDefExt = NULL;
Box.lCustData = NULL;
Box.lpfnHook = NULL;
Box.lpTemplateName = NULL;

GetOpenFileName(&Box);

все выводит нормально... А что у тебя написано?

362
04 апреля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by REmindER

У меня стандартное

char File[256];

OPENFILENAME Box;
Box.lStructSize = sizeof(OPENFILENAME);
Box.hwndOwner = NULL;
Box.hInstance = NULL;
Box.lpstrFilter = NULL;
Box.lpstrCustomFilter = NULL;
Box.nMaxCustFilter = NULL;
Box.nFilterIndex = 0;
Box.lpstrFile = &File[0];
Box.nMaxFile = 256;
Box.lpstrFileTitle = NULL;
Box.nMaxFileTitle = NULL;
Box.lpstrInitialDir = NULL;
Box.lpstrTitle = NULL;
Box.Flags = Box_EXPLORER;
Box.nFileOffset = 0;
Box.nFileExtension = 0;
Box.lpstrDefExt = NULL;
Box.lCustData = NULL;
Box.lpfnHook = NULL;
Box.lpTemplateName = NULL;

GetOpenFileName(&Box);

все выводит нормально... А что у тебя написано?



Сделал голый проект, скопировал твой код. И ничего - пусто. При нажатии на кнопку, в обработчике которой написан этот код, окно моргает, как будто фокус на время теряется.
И все....
BCB6Ent

13K
10 августа 2005 года
DDMZ
2 / / 10.08.2005
Цитата:
Originally posted by _kolyan
Сделал голый проект, скопировал твой код. И ничего - пусто. При нажатии на кнопку, в обработчике которой написан этот код, окно моргает, как будто фокус на время теряется.
И все....
BCB6Ent



У меня аналогичная ситуация! когда я перелез с VC на C++BUILDER 6 ent upd2.

Есть еще одно наблюдене:
- компилируем.
- запускаем компиленый файл под WIN 98SE окно выбора файла непоявляется.
- Запускаем этот файл под XP, все работает!!!

Что за хрень!??
Если сделать проверку на ошибки в win98 comdlglasterror
то она говорит что код ошибки равен 1 (типа неверная структура), и функция возвращает 0.
Но этот нарабочий под 98ой проект без проблем пускается под XP в котором этой ошибки невозникает!

Как быть люди?!

ЗЫ. Присоеденил свой пример с проектом... может у меня настройки компилятора не так выставлены?

585
10 августа 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by _kolyan
В старое доброе время пользрвался я функцией
BOOL GetOpenFileName(LPOPENFILENAME)
а вот недавно написал тот же код в билдероском приложении и ничего - все тупо молчит, как будто я и не вызывал никакой функции.
И ошибки никакой не выдает.... :-(


Сделай вот так:

Код:
char File[256] = {0};

OPENFILENAME Box;
Box.lStructSize = sizeof(OPENFILENAME);
Box.hwndOwner = this->Handle;
Box.hInstance = NULL;
Box.lpstrFilter = NULL;
Box.lpstrCustomFilter = NULL;
Box.nMaxCustFilter = NULL;
Box.nFilterIndex = 0;
Box.lpstrFile = File;
Box.nMaxFile = 256;
Box.lpstrFileTitle = NULL;
Box.nMaxFileTitle = NULL;
Box.lpstrInitialDir = NULL;
Box.lpstrTitle = NULL;
Box.Flags = OFN_EXPLORER;
Box.nFileOffset = 0;
Box.nFileExtension = 0;
Box.lpstrDefExt = NULL;
Box.lCustData = NULL;
Box.lpfnHook = NULL;
Box.lpTemplateName = NULL;

GetOpenFileName(&Box);

и будет тебе щастье :D
585
10 августа 2005 года
honeybeer
297 / / 06.09.2004
Почему то все забыли про чудо-функцию
 
Код:
DWORD CommDlgExtendedError();

а ведь она о многом рассказать может. Впрочем если бы кто нить поставил Box на Watch, увидел бы что в Box.lpstrFile находится мусор и как следствие FNERR_INVALIDFILENAME.
585
10 августа 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by DDMZ
У меня аналогичная ситуация! когда я перелез с VC на C++BUILDER 6 ent upd2.

Есть еще одно наблюдене:
- компилируем.
- запускаем компиленый файл под WIN 98SE окно выбора файла непоявляется.
- Запускаем этот файл под XP, все работает!!!

...


Настройки компилятора... сомневаюсь. К сожалению машины под Win98 рядом нет, но в Quick Info сказано что NT, 32s и 95 = Yes. Так что дело скорее всего в коде.

362
10 августа 2005 года
_kolyan
339 / / 03.12.2002
Про мусор - это верно. Если его убрать, то все работает.
13K
10 августа 2005 года
DDMZ
2 / / 10.08.2005
Ничего непомогает!(

Единственное что помогло это:
если добавить ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;

То все начинает работать без проблем, и под XP и под 98SE !
Цитата:
char fName[MAX_PATH];
ZeroMemory( fName, sizeof(fName) );

OPENFILENAME ofn;
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
ofn.Flags = OFN_EXPLORER;
ofn.lpstrFile = fName;
ofn.nMaxFile = 256;
ofn.lpstrFilter = FILTER;
//ofn.hwndOwner = g_hwnd;
//ofn.lpstrTitle = "открытие файла для воспроизведения!";

if( GetOpenFileName( &ofn ) == 0) exit(-1)



ЗЫ.Как всегда ответил сам на свой вопрос =)

585
11 августа 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by DDMZ
Ничего непомогает!(

Единственное что помогло это:
если добавить ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;

То все начинает работать без проблем, и под XP и под 98SE !


ЗЫ.Как всегда ответил сам на свой вопрос =)


Если происходит проблема пишите отладочный код см. выше про DWORD CommDlgExtendedError();

246
11 августа 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by DDMZ
Ничего непомогает!(

Единственное что помогло это:
если добавить ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;

То все начинает работать без проблем, и под XP и под 98SE !


ЗЫ.Как всегда ответил сам на свой вопрос =)


Посмотри заголовок commdlg.h
там увидишь
#if _WIN32_WINNT >=0x0500
...
вот Ты ее и вылечил.
Чей баг?

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