Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

24.11.Как корректно завершить приложение с графическим интерфейсом из него самого

Надо послать главному окну приложения сообщение WM_CLOSE из любого места программы (по крайней мере из класса вид я проверял):

AfxGetMainWnd()->PostMessage(WM_CLOSE);

Например, можно научить приложение закрываться по нажатию клавиши Escape. Для этого создайте обработчик события WM_CHAR:

void CChildView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

if(nChar==27)AfxGetMainWnd()->PostMessage(WM_CLOSE);

CWnd::OnChar(nChar, nRepCnt, nFlags);

}

Обратите внимание на то, что надо использовать именно PostMessage, а не SendMessage, и посылать сообщение WM_CLOSE а не WM_QUIT. Именно в этом случае будут корректно выполнены все деструкторы, как глобальные, так и локальные.

Если приложение находится в длительном цикле, то необходимо сначала выйти из этого цикла, а уже затем посылать сообщение WM_CLOSE. Сделать это можно так:

  • объявить где-нибудь в доступном месте переменную bool Stop=false;

  • в длительном цикле вызывать функцию ProcessMessages(), проверять значение переменной Stop и в случае «истина» выходить из цикла.

Теперь в каком-нибудь обработчике сообщения выполнить следующий код:

LRESULT CDZ_MFCView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)

{

if(Stop) AfxGetMainWnd()->PostMessage(WM_CLOSE);

Stop=(message==257)&(wParam==27);

return CView::WindowProc(message, wParam, lParam);

}

24.12.Обработка ошибок ввода

Когда в консольном приложении выполняется ввод числовых данных, то при вводе некорректных символов (например, букв вместо цифр) с помощью объекта cin пользователь никаких сообщений об ошибке не увидит, например:

int iNum=0;

cin>>iNum; /* пользователь вводит, например, символ А; никакой ошибки не

наблюдается*/

cout<<iNum; // выводится 0

Проконтролировать наличие ошибки ввода можно так:

int iNum=0;

while(1)

{

cout<<Rus("Введи целое число>");

cin>>iNum;

if(cin.fail())

{

cout<<Rus("Ошибка в формате введенного числа.")<<endl;

char s[128];

cin.clear(); cin>>s;

}

else

{

cout<<Rus("Вам удалось ввести число - поздравляю!!! ");

cout<<Rus("Число=")<<iNum<<endl;

break;

}

}

25.Интегрированная среда Microsoft Visual Studio 2005

Так как интегрированная среда Microsoft Visual Studio 2005 (ИС MVS-2005) имеет довольно большое число тем меню и всевозможных окон, значительной частью которых многие программисты могут и не пользоваться, я не буду стараться осветить «все и вся», а буду дополнять этот раздел теми сведениями, которые мне понадобились при составлении конспекта и лабораторных работ и вообще при изучении этой самой ИС.

Заметьте, что вид ИС (меню, окна) зависит от ее состояния: пока не открыт ни один проект – меню одно, после открытия какого-либо проекта – другое, после запуска приложения на выполнение – третье … То же относится и к окнам, которые можно открыть или показать.

25.1.Терминология

В справочной системе ИС MVS-2005 – MSDN – можно найти пояснения многих терминов через индексы «glossary» или «Glossary», по-нашему «словарь», «классификатор». Очень полезный раздел MSDN. Вот кое-что оттуда в моем переводе (с помощью Lingvo 12) и из других разделов MSDN. Большинство сведений можно получить из поиска по индексу (Index).

Solution (решение) и project (проект). ИС MVS-2005 реализует некоторые концептуальные контейнеры, называемые проектами (projects) и решениями (solutions). Проект обычно представляет собой приложение (application), динамически подключаемую библиотеку (DLL), сервис (service) и т.п. Проект размещается в отдельном каталоге и, часто, включает довольно большое число файлов. В каталоге проекта как правило создаются другие каталоги, например, Debug (содержит отладочную версию приложения) или Release (содержит окончательную, готовую к распространению версию приложения). Решение – это объединение нескольких проектов, концептуально объединенных для решения (извините за тавтологию) некоторой большой задачи. Чаще всего решение включает один проект.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]