GetOpenFileName
BOOL GetOpenFileName(LPOPENFILENAME)
а вот недавно написал тот же код в билдероском приложении и ничего - все тупо молчит, как будто я и не вызывал никакой функции.
И ошибки никакой не выдает.... :-(
В старое доброе время пользрвался я функцией
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);
все выводит нормально... А что у тебя написано?
У меня стандартное
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
Сделал голый проект, скопировал твой код. И ничего - пусто. При нажатии на кнопку, в обработчике которой написан этот код, окно моргает, как будто фокус на время теряется.
И все....
BCB6Ent
У меня аналогичная ситуация! когда я перелез с VC на C++BUILDER 6 ent upd2.
Есть еще одно наблюдене:
- компилируем.
- запускаем компиленый файл под WIN 98SE окно выбора файла непоявляется.
- Запускаем этот файл под XP, все работает!!!
Что за хрень!??
Если сделать проверку на ошибки в win98 comdlglasterror
то она говорит что код ошибки равен 1 (типа неверная структура), и функция возвращает 0.
Но этот нарабочий под 98ой проект без проблем пускается под XP в котором этой ошибки невозникает!
Как быть люди?!
ЗЫ. Присоеденил свой пример с проектом... может у меня настройки компилятора не так выставлены?
В старое доброе время пользрвался я функцией
BOOL GetOpenFileName(LPOPENFILENAME)
а вот недавно написал тот же код в билдероском приложении и ничего - все тупо молчит, как будто я и не вызывал никакой функции.
И ошибки никакой не выдает.... :-(
Сделай вот так:
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
а ведь она о многом рассказать может. Впрочем если бы кто нить поставил Box на Watch, увидел бы что в Box.lpstrFile находится мусор и как следствие FNERR_INVALIDFILENAME.
У меня аналогичная ситуация! когда я перелез с VC на C++BUILDER 6 ent upd2.
Есть еще одно наблюдене:
- компилируем.
- запускаем компиленый файл под WIN 98SE окно выбора файла непоявляется.
- Запускаем этот файл под XP, все работает!!!
...
Настройки компилятора... сомневаюсь. К сожалению машины под Win98 рядом нет, но в Quick Info сказано что NT, 32s и 95 = Yes. Так что дело скорее всего в коде.
Единственное что помогло это:
если добавить ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
То все начинает работать без проблем, и под XP и под 98SE !
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)
ЗЫ.Как всегда ответил сам на свой вопрос =)
Ничего непомогает!(
Единственное что помогло это:
если добавить ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
То все начинает работать без проблем, и под XP и под 98SE !
ЗЫ.Как всегда ответил сам на свой вопрос =)
Если происходит проблема пишите отладочный код см. выше про DWORD CommDlgExtendedError();
Ничего непомогает!(
Единственное что помогло это:
если добавить ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
То все начинает работать без проблем, и под XP и под 98SE !
ЗЫ.Как всегда ответил сам на свой вопрос =)
Посмотри заголовок commdlg.h
там увидишь
#if _WIN32_WINNT >=0x0500
...
вот Ты ее и вылечил.
Чей баг?