Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пример из MSDN, не могу понять почему так написано? 
:(
    Опции темы
Darked
Дата 23.6.2005, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



Всем привет.
В MSDN при описании класса CFileDialog в описании метода DoModal приведен такой пример:
Код

void CChildFrame::OnFileOpen() 
{
   // szFilters is a text string that includes two file name filters:
   // "*.my" for "MyType Files" and "*.*' for "All Files."
   char CChildFrame::szFilters[]=
      "MyType Files (*.my)|*.my|All Files (*.*)|*.*||";

   // Create an Open dialog; the default file name extension is ".my".
   CFileDialog fileDlg (TRUE, "my", "*.my",
      OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
   
   // Display the file dialog. When user clicks OK, fileDlg.DoModal() 
   // returns IDOK.
   if( fileDlg.DoModal ()==IDOK )
   {
      CString pathName = fileDlg.GetPathName();
   
      // Implement opening and reading file in here.
      ...
      //Change the window's title to the opened file's title.
      CString fileName = fileDlg.GetFileTitle ();
   
      SetWindowText(fileName);
   }

}


Мне интересно почему char CChildFrame::szFilters[]="MyType Files (*.my)|*.my|All Files (*.*)|*.*||"; определена так? Что говорит такое объявление строки? Есть соображения?


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
Earnest
Дата 23.6.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Это просто соглашение MFC:
Описание фильтра - это пары строк, разделенные символом '|'. Первая подстрока пары - описание, которое появится в списке "Тип файла", вторая - маска.
В конце все это дело должно завершаться '||'.
Вообще-то Windows API требует, чтобы подстроки фильтров отделялись друг от друга NULL, а в конце всей строки хочет видеть NULL NULL. Но попробуйте создать такую строку в ресурсах. Вот, видимо, разработчики MFC и прикрутили такой костылек.


--------------------
...
PM   Вверх
Darked
Дата 23.6.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



Earnest, меня не интересует сам фильтр, меня интересует почему так переменная объявлена:
Код

char CChildFrame::szFilters[]=
      "MyType Files (*.my)|*.my|All Files (*.*)|*.*||";

а не так:
Код

char szFilters[]=
      "MyType Files (*.my)|*.my|All Files (*.*)|*.*||";



--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
Любитель
Дата 23.6.2005, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



А потому что хотелось типа неаглядней... smile


--------------------
PM MAIL ICQ Skype   Вверх
Earnest
Дата 23.6.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Darked, извини, не заметила. Действительно странно. Разве так можно писать? Переменная вроде как автоматическая, а квалифицируется именем класса...
Теперь мне тоже стало интересно - если это, конечно, не косяк.

Это сообщение отредактировал(а) Earnest - 23.6.2005, 16:44


--------------------
...
PM   Вверх
chaos
Дата 24.6.2005, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



да инетесно, я даже и не видел такого))
я обычно делаю всегда так:
Код

{
    TCHAR title[] = "Sample";    

    CFileDialog fileDlg(TRUE);
    
    CString str("All files (*.*)"); str += (TCHAR)NULL;
    str += "*.*"; str += (TCHAR)NULL;

    str += ("All text files (*.txt)"); str += (TCHAR)NULL;
    str+= "*.txt"; str += (TCHAR)NULL;
         
    fileDlg.m_ofn.lpstrFilter = str;
    fileDlg.m_ofn.nFilterIndex = 2;

    TCHAR strName[_MAX_PATH];
    strName[0] = (TCHAR)NULL;
    fileDlg.m_ofn.lpstrFile = strName;

    fileDlg.m_ofn.lpstrTitle = title;

    if (fileDlg.DoModal() == IDOK)
    {
                 //......                 
    }
}

PM WWW   Вверх
DENNN
Дата 24.6.2005, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата(Darked @ 23.6.2005, 15:08)
меня не интересует сам фильтр, меня интересует почему так переменная объявлена:

Объявлена как сам тип в классе. Если завтра в этом классе тип изменится, то в этом участке кода тип будет соотвествовать изменениям. В идеале тебе вообще не нужно беспокоиться что же именно это за тип данных. Но это в идеале, реальность, как известно, вносит свои коррективы.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.