Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > CFileDialog, release


Автор: Rickert 3.10.2008, 05:16
По выбору пункта меню срабатывает функция:
Код
void aArchymanDlg::OnProjectLoad()
{
  CFileDialog dialog(TRUE, L"prj", L"*.prj", OFN_HIDEREADONLY, L"*.prj", 0, 0);

  if (dialog.DoModal() == IDOK)
    aaLoadProject(dialog.GetPathName().GetString());
}


В дебаге всё как у людей, а вот в релизе, когда выполняет dialog.DoModal - программа просто выскакивает без всяких сообщений. Т.е. dialog.DoModal даже не успевает вернуть значение.
Это проявляется лишь в том случае, если запускать release версию не из под VS (F5), а как бы уже самостоятельным приложением.

Автор: Rickert 3.10.2008, 05:33
Видимо я что-то не так заполняю в параметрах конструктора, потому что если сделать как писали тут - http://forum.shelek.ru/index.php/topic,5030.msg92905.html
То бишь конструктор просто с TRUE, а остальные параметры - отдельно, то всё нормально будет работать.
Но что не так заполнено?

Автор: deniska 3.10.2008, 08:25
было нечто подобное. правда только под 98 виндой. долго тыркался в итоге на чистом WINAPI
Код

    OPENFILENAME ofn = {0};
    TCHAR buff[MAX_PATH] = _T("");
    TCHAR *filter = _T("Data files (*.dat)\0*.dat\0");
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.lpstrFilter = filter;
    ofn.lpstrFile = buff;
    ofn.nMaxFile = MAX_PATH;
    ofn.Flags = 0;
    if(GetSaveFileName( &ofn ) == IDOK )
    {
         //ofn.lpstrFile;
    }

вроде заработало.

Автор: Earnest 3.10.2008, 08:32
Скорее всего, переменная с фильтром (последняя строка): у тебя неправильный формат. Должно быть что-то вроде
"My Files (*.dat)|*.dat||";

Автор: Rickert 3.10.2008, 12:13
Earnest, попробую в понедельник.

Автор: Rickert 6.10.2008, 03:43
Earnest, ты как всегда была права smile 

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