Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > GetOpenFileName вешает прогу


Автор: NeoRus 21.8.2009, 12:08
Вызываю из диалога:
Код

TCHAR file[512];
wcscpy(file, L"\0");
OPENFILENAME open;
ZeroMemory(&open, sizeof(OPENFILENAME));
            
open.lStructSize = sizeof(OPENFILENAME);
open.hwndOwner = mainHwnd;
open.hInstance = hInst;
open.lpstrFilter = _T("EXE (*.exe)\0*.wgt\0DLL\0*.dll\0All files\0*.*\0\0");
open.lpstrCustomFilter = L"\0";
open.nMaxCustFilter = 0;
open.nFilterIndex = 1;
open.lpstrFile = file;
open.nMaxFile = sizeof(file);
open.lpstrFileTitle = NULL;
open.nMaxFileTitle = 0;
open.lpstrInitialDir = NULL;
open.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
open.lpfnHook = NULL;
open.lpstrDefExt = _T("exe");
            

if(GetOpenFileName(&open))
{
MessageBox(NULL, file, L"File", MB_OK);
}


На GetOpenFileName прога зависает, если точнее на:
Код

00433AC6  call        @ILT+2190(_GetOpenFileNameW@4) (430893h) //breakpoint на этой строке срабатывает
00433ACB  test        eax,eax  // а на этой уже нет

Автор: GremlinProg 21.8.2009, 12:45
убери эту строчку:
Код

open.lpstrCustomFilter = L"\0";

Автор: NeoRus 21.8.2009, 15:24
тоже самое

Автор: GremlinProg 21.8.2009, 15:28
Код

open.nMaxFile = sizeof(file) / sizeof(file[0]);

Автор: NeoRus 21.8.2009, 15:43
тоже самое...
по виду похоже что диалог открывается, но не показывается..

Автор: GremlinProg 22.8.2009, 12:04
Цитата(NeoRus @  21.8.2009,  17:43 Найти цитируемый пост)
по виду похоже что диалог открывается, но не показывается..

тогда разбирайся с hwndOwner,
для быстрой проверки, просто не заполняй это поле, пусть будет NULL

Автор: NeoRus 22.8.2009, 12:14
Поставил NULL, тоже самое.
Создал окно класса Button со стилем WS_TILED, тоже диалога не было..

Автор: GremlinProg 22.8.2009, 12:34
Код

TCHAR file[512];
file[0]    = _T('\0');
OPENFILENAME open;

::ZeroMemory(&open, sizeof(OPENFILENAME));
open.lStructSize = sizeof(OPENFILENAME);
open.lpstrFilter = _T("EXE\0*.exe\0WGT\0*.wgt\0DLL\0*.dll\0All files\0*.*\0");
open.nFilterIndex = 1;
open.lpstrFile = file;
open.nMaxFile = sizeof(file) / sizeof( file[0] );
open.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

if(GetOpenFileName(&open)){
    ::MessageBox(NULL, file, _T("File"), MB_OK);    //
}


это работает
хотя и предыдущий вариант работал, без лишних параметров
здесь я изменил только строку фильтра, которая была сформирована некорректно (было нечетное число строк и как следствие - неправильный формат)

Автор: NeoRus 22.8.2009, 19:38
В том проекте не работала, сделал новый и просто в WinMain вписал этот код - заработало..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)