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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Практическое задание 
:(
    Опции темы
Skorpion
Дата 30.11.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 12.11.2006

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



Практическое занятие №5
Задание №1. 
Создайте программу, которая предназначена для рисования с помощью мыши линий установленного цвета и размера, программа будет рисовать линию в соответствии с движениями мыши. При нажатии на кнопку Exit программа завершается. 
Все каркасные файлы для вашей программы напишите с помощью мастера настроек MFC AppWizard.
Спроектируйте диалоговую панель.
Выполните слдеующие действия 
•  Щелкните два раза по надписи IDD_DRAW_DIALOG. Справа появится окно проектирования диалоговой панели. 
•  С помощью панели Controls расставьте элементы, управления как показано на рис. и согласно таблице. 
 
Объект    Свойство    Установка
Dialog Box    ID    IDD_DRAW_DIALOG
    Caption    The Draw Program
    Font    System, Size 10, страница Styles
Static Text    ID    IDC_INSTRUCTION_STATIC
    Caption    To Draw: Press the left button of the mouse and move the mouse (Рисование: нажмите левую кнопку мыши и перемещайте) 
    Align Text    Center, страница Styles
    Client edge    отмечен, страница Extended Styles
    Static edge    отмечен, страница Extended Styles
Push Button    ID    IDC_EXIT_BUTTON
    Caption    E&xit
    Client edge    отмечен, страница Extended Styles
    Static edge    отмечен, страница Extended Styles
    Modal frame    отмечен, страница Extended Styles
•  В объекте Dialog Box вы задаете следующие данные:
Caption - название диалогового окна.
Font - здесь вы уcтановили шрифт -System и его размер 10
•  Static Text - это элемент текста, он вставляется как обычный элемент управления, но не выполняет никаких функций, так как служит для показа текста, который вы зададите в Captions. Так же мы задали некоторые графические установки для статистического текста - это Client Edge и Static Edge.
Связывание событий с элементами управления
Связывание кода с событием BN_CLICKED кнопки Exit
Чтобы связать код с событием BN_CLICKED кнопки EXIT, выполните следующие действия: 
•    Выберете ClassWizard в меню View 
•    Выберете закладку Message Maps в панели ClassWizard 
•    Используйте диалоговую панель ClassWizard для выбора следующего события:
•    Class Name: CDrawDlg Object ID: IDC_EXIT_BUTTON Messages: BN_CLICKED
•    Щелкните на кнопку Add Fucntion и в раскрывшемся окне нажмите кнопку OK. 
•    Сейчас ваша панель MFC ClassWizard должна будет выглядеть так: 
 
    Нажмите кнопку Edit Code и напишите следующий код в функции OnExitButton(): 
void CDrawDlg::OnExitButton()
{
// TODO: Add your control notification handler code here 
////////Мой код начинается здесь/////////// 
OnOK(); 
////////Мой код заканчивается здесь/////////// 
}
    Функция OnOK(), которую вы ввели завершает программу, при нажатии на кнопку Exit. 
Связывание кода с событием WM_MOUSEMOVE диалоговой панели
Сечас мы свяжем код с событием WM_MOUSEMOVE, которое будет автоматически выполняться при передвижении мыши. 
    Чтобы связать код с событием WM_MOUSEMOVE диалоговой панели, выполните следующие действия: 
•    Выберете ClassWizard в меню View 
•    Выберете закладку Message Maps в панели ClassWizard 
•    Используйте диалоговую панель ClassWizard для выбора следующего события:
Class Name: CDrawDlg Object ID: CDrawDlg Messages: WM_MOUSEMOVE
•    Щелкните на кнопку Add Fucntion. 
    Нажмите кнопку Edit Code и напишите следующий код в функции OnMouseMove(): 
void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
////////Мой код начинается здесь/////////// 
if( (nFlags & MK_LBUTTON)==MK_LBUTTON )
{
CClientDC dc(this);
dc.SetPixel(point.x, point.y, RGB(0,0,0));
}
//конец структуры IF 
////////Мой код заканчивается здесь/////////// 
///....
    Код который вы ввели содержит единственный оператор IF: 
    Оператор IF содержит в себе функции, которые будут выполняться, если условие оператора IF верно. Условие таково, если левая кнопка мыши нажата и произошло перемещение, то функции внутри оператора IF выполняются. 
    Функция OnMouseMove выполняется при любом передвижении мыши, ее параметр nFlags показывает была ли нажата какая-нибудь клавиша клавиатуры( типа ALT или Shift) и кнопка мыши. Операция & проверяет прижата ли левая кнопка мыши при ее перемещении. Если это так, то выполняется код ниже оператора IF. 
    Код в блоке оператора IF CClientDC dc(this); создает объект контексного устройства, c помощью него вы сможете рисовать, его можно назвать воображаемым экраном в памяти компьютера. Научно говоря, dc(this) - это экземпляр класса CClientDC c параметром конструктора this, с помощью экземпляра класса вы можете обращаться к функциям этого класса. 
    Следующий оператор, который вы напечатали рисует точку в заданном месте (место щелчка мыши), используя параметры point.x и point.y, которые ему передает функция OnMouseMove, и заданного цвета, с помощью функции RGB();.
Сейчас у нас установлен черный цвет, чтобы установить красный, синий или зеленый, надо заменить параметры функции RGB() соответственно на 255,0,0, 0,255,0, 0,0,255. 
Рисование изображения точка за точкой
Чтобы увидеть в действии свой код, выполните следующие действия: 
    Скомпонуйте и скомпилируйте программу. 
    Запустите ее. 
    Удерживая нажатой левую кнопку мыши, претащите ее в сторону. 
    Вы видите, что точки рисуются не слитно друг с другом, это происходит по тому, что WINDOWS должен выполнять и другие задачи и не может полностью следить за Draw. Поэтому мы модифицируем нашу программу, так чтобы эти точки соединялись линиями. 
    При выполнении функции OnMouseMove параметр point передает положение курсора во время последней проверки его положения. 
Расширение возможностей программы DRAW
Сейчас вы расширите возможности программы Draw. Вы сделаете так, чтобы при передвижении мыши, рисовалась сплошная линия. 
    Модифицируем программу следующим образом. 
    Чтобы соединить точки линией функция OnMouseMove должна знать предыдущие координаты мыши, для этого нам нужно объявить две переменные m_PrevX и m_PrevY, для хранения координат по X и Y. 
    Выведем на экран файл DrawDlg.h, для этого откроем Project Workspace, щеклнем на закладке File View и выполним двойной щелчек на пункте DrawDlg.h. 
    Включите объявления переменных m_PrevX и m_PrevY следующим образом: 
// DrawDlg.h : header file///
// CDrawDlg dialog
class CDrawDlg : public CDialog
{
// Construction public:
CDrawDlg(CWnd* pParent = NULL); // standard constructor 
////////Мой код начинается здесь/////////// 
int m_PrevX;
int m_PrevY; 
////////Мой код заканчивается здесь/////////// 
}
    Вы объявили две переменные целого типа для хранения предыдущих координат мыши. Заметьте, что вы их включили после слова public: - это означает, что эти переменные доступны всем функциям класса. 
    Теперь модифицируем функцию OnMouseMove в файле DrawDlg.cpp 
void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
////////Мой код начинается здесь/////////// 
if((nFlags & MK_LBUTTON)==MK_LBUTTON)
{
CClientDC dc(this);
// dc.SetPixel(point.x, point.y, RGB(123,211,98)); 
CPen NewPen(PS_SOLID, 10, RGB(255,0,0) ;
dc.SelectObject(&NewPen); 
dc.MoveTo(m_PrevX, m_PrevY);
dc.LineTo(point.x, point.y);
m_PrevX=point.x;
m_PrevY=point.y;

////////Мой код заканчивается здесь/////////// 
CDialog::OnMouseMove(nFlags, point);
}
    Рассмотрим код приведенный выше: 
    Код вызова функции SetPixel(), помещен в коментарий, так как он нам больше не понадобиться. 
    Следующий код CPen NewPen(PS_SOLID, 10, RGB(255,0,0) ) создает новое перо с именем NewPen класса CPen c заданным размером шрифта 10 пикселов и красным цветом. Параметр PC_SOLID говорит, что будет рисоваться сплошная линия. 
    После этого выполняется функция SelectObject, выбирающая новое перо: 
dc.SelectObject(&NewPen); 
Этой функцией вы включаете перо в работу. 
    Следующие два оператора: 
dc.MoveTo(m_PrevX, m_PrevY);
dc.LineTo(point.x, point.y); 
рисуют линию, используя координаты начала(это определяет функция MoveTo()) и координат конца (LineTo). 
    И последнии два оператора: 
m_PrevX=point.x;
m_PrevY=point.y; 
сохраняют в переменных m_PrevX и m_PrevY, текущие координаты, которые в следующий раз будут использоваться, как предыдущие(начальная позиция). 
    Теперь запустите программу и проверьте правильность ее работы. 
    Вы должны заметить, что при первом нажатии на кнопку мышки в любой области диалоговой панели, есть лишняя линия, которая выходит из краев окна. Дело в том, что вы при первом рисовании линии, т.е после первого щелчка мыши и ее передвижении, начальные координаты не определены, а будут известны только текущие. 
    •  Для решения этой проблемы вы должны связать код событием WM_LBUTTONDOWN, которое происходит при нажатии на левую кнопку мыши. 
    Выберете ClassWizard в меню View 
    Выберете закладку Message Maps в панели ClassWizard 
Используйте диалоговую панель ClassWizard для выбора следующего события:
Class Name: CDrawDlg
Object ID: CDrawDlg
Messages: WM_LBUTTONDOWN
    Щелкните на кнопку Add Fucntion. 
    Нажмите кнопку Edit Code и напишите следующий код в функции OnLButtonDown(): 
void CDrawDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default 
////////Мой код начинается здесь/////////// 
m_PrevX=point.x;
m_PrevY=point.y; 
////////Мой код заканчивается здесь/////////// 
}
    Код, который вы напечатали, обновляет значения переменных m_PrevX и m_PrevY, тем местоположением мыши, где был совершен щелчек по ее левой кнопке, соответственно при первом и последующих нажатиях кнопки, линия будет начинаться из данной точки нажатия. 
    Поэксперементируйте с программой Draw и щелкните на кнопку Exit для ее прекращения. 
Задание №3.
Сделайте так, чтобы линия, которую вы рисуете, была шириной 5 пикселов.
Задание №4.
Создайте программу MYKEY которая при нажатии на клавиатуру выводила панель сообщения, показывающую различные флаги, представляющие клавишу, которая была нажата. 
Создайте проект программы. Окно Вашей программы должно выглядеть как на рисунке.
Теперь рассмотрим все пункты попорядку.
•  В объекте Dialog Box вы задаете следующие данные:
Caption - название диалогового окна.
Font - здесь вы уcтановили шрифт -System и его размер 10
•  Static Text - это элемент текста, он вставляется как обычный элемент управления, но не выполняет никаких функций, так как служит для показа текста, который вы зададите в Captions. Так же мы задали некоторые графические установки для статистического текста - это Client Edge и Static Edge.

 

•  Объект    Свойство    Установка
Dialog Box    ID    IDD_MYKEY_DIALOG
    Caption    The MyKey Program
    Font    System, Size 10, страница Styles
Static Text    ID    IDC_INSTRUCTION_STATIC
    Caption    Press keys on the keyboard 
    Align Text    Center, страница Styles
    Client edge    отмечен, страница Extended Styles
    Static edge    отмечен, страница Extended Styles
    Disabled    отмечен (General)
Связывание кода с событием WM_KEYDOWN клавиатуры
При нажатии на клавишу будет появляться окно сообщения, которое будет показывать ее флаг. 
    Чтобы связать код с событием WM_KEYDOWN, выполните следующие действия: 
    Выберете ClassWizard в меню View 
    Выберете закладку Message Maps в панели ClassWizard 
    Используйте диалоговую панель ClassWizard для выбора следующего события:
Class Name: CMyKeyDlg
Object ID: CMyKeyDlg
Messages: WM_KEYDOWN
    Щелкните на кнопку Add Fucntion и в раскрывшемся окне нажмите кнопку OK. 
    Нажмите кнопку Edit Code и напишите следующий код в функции OnKeyDown(): 
    void CMyKeyDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call default 
    ////Мой код начинается здесь//// 
    char strnChar[10];
char strnRepCnt[10];
char strnFlags[10];
CString strKeyPressed;
itoa(nChar, strnChar, 10);
itoa(nRepCnt, strnRepCnt,10);
itoa(nFlags, strnFlags, 10);
strKeyPressed=(CString)"You pressed the key: "+
"\n"+"nChar="+ 
strnChar+
"\n"+"
nReptCnt="+
strnRepCnt+
"\n"+
"nFlags="+
strnFlags;
MessageBox(strKeyPressed); 
////Мой код заканчивается здесь//// 
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
    Взгляните на параметры функции OnKeyDown: 
    (UINT nChar, UINT nRepCnt, UINT nFlags)
    Первым параметром является nChar, который показывает код нажатой клавиши. 
    Вторым параметром является nRepCnt, представляет число повторных нажатий на клавишу. Например, если вы долго удерживаете клавишу B, то этот параметр сохранит кол-во нажатий на эту клавишу. 
    Третий параметр - nFlags представляет число нажатой специальной клавишы(такие как ALT, SHIFT). 
    Код, который вы ввели объявляет три строки: 
char strnChar[10];
char strnRepCnt[10];
char strnFlags[10]; 
Они будут хранить значения переменных nChar, nRepCnt, nFlags соответственно. 
    Затем вы объявили переменную strKeyPressed типа CString.
CString strKeyPressed;
Затем, в конце программы, вы присваиваете этой переменной значение строки, которая будет выведена в собщении. 
    После этого, с помощью оператора itoa вы присваивате переменным strnChar, strnRepCnt, strnFlags числовые значения соответсвующих переменных. Функция itoa переводит число в текстовую строку. Рассмотрим следующие три строки: 
itoa(nChar, strnChar, 10);
itoa(nRepCnt, strnRepCnt,10);
itoa(nFlags, strnFlags, 10); 
    Первым аргументом функции itoa, является чисовая переменная, которую надо перевести. 
    Вторым аргументом является переменная типа char, в нее будет записываться число. 
    Третий аргументом - число, показывающее систему счисления числовой переменной, к примеру число 10 - это десятичная С/C, значит число nChar или л.д десятичное. 
    Теперь, кога все три переменные сохранены как строки, вы можете их все связать в строке strKetPressed: 
strKeyPressed=(CString)"You pressed the key: "+"\n"+"nChar="+ strnChar+"\n"+"nReptCnt="+strnRepCnt+"\n"+"nFlags="+strnFlags;
MessageBox(strKeyPressed); 
    Знак /n - это перевод каретки, символ новой строки. 
    Теперь, когда все переменные увязаны в одной тестовой переменной, мы можем вывести ее на экран с помощью функции: 
MessageBox(strKeyPressed); 
Аргумент этой функции есть текст, который будет показан в окне сообщения. 
    Поэксперементируйте с программой MyKey и щелкните на значек x для ее прекращения. 
Задание №5. Создайте программу (Speed) основанную на диалоговом окне, оснащенном меню: File и Help, в середине главного окна, расположено окно редактирования, в котором можно вводить только числа, а, если зайти в меню File->Current, то появится окно сообщения показывающее число в окне редактирования. 
При запуске вашей программы, главное окно должно будет выглядеть так: 
 
Для этого:
1. Создание проекта программы
2. Создайте меню программы:
•  Для того, чтобы создать меню программы зайдите в закладку Resource View, раскройте там пункт Speed Resources, затем щелкните на правую кнопку мыши . 
•  В раскрывшемся контекстном меню выберите пункт Insert..., появиться такая диалоговая панель:
 
•  Выберите здесь Menu и нажмите на кнопку New для создания нового меню. 
•  Затем зайдите в пункт Menu, в закладке Resource View, и нажмите на IDR_MENU1 справа в окошке появиться окно визуального проектирования меню. Оно будет выглядеть так:
 
•  Вы видите в левом верхнем углу этого окна небольшой прямоугольник, этот прямоугольник является областью для ввода названия пункта меню. 
•  Нажмите на него мышкой, затем нажмите на правую кнопку мыши и в появившемся контекстном меню нажмите на Properties, а в раскрывшемся диалоговом окне: 
 
задайте заголовок пункта меню в Caption - &File, первый заначек &, подчеркивает первую букву F слова File, это означает, что при нажатии на клавиши ALT+F всплывет пункт меню File. 
•  Нажмите Enter, в прямоугольнике появиться File, а ниже откроется еще одно окошко с прямоугольником, в этом прямоугольнике вы уже будете задавать названия пунктов меню File. 
•  Выделите мышкой этот прямоугольник, раскройте контекстное меню Properties, и в раскрывшемся окне:
 
•  Задайте в Captions название пункта меню &Сurrent Speed и нажмите Enter. 
•  Теперь опять зайдите в Properties, можно использовать комбинацию клавиш ALT+ENTER, и посмотрите в ID, вы увидите там запись ID_FILE_CURRENTSPEED - это идентификатор пункта меню Current Speed, с помощью него вы сможете связывать этот пункт меню с событиями. Этот идентификатор Viusal C++ сгенерировал сам. 
•  Ниже включите еще один пункт с названием &Exit, для выхода из программы. 
•  Теперь мы создадим меню Help. Спроектируйте его так, как показано на следующем рисунке:
 
•  Щелкните на пустой прямоугольник в главной строчке, задайте ему имя Help, в нижнем прямоугольнике напишите About. Произведите проектирование пункта меню как было описано выше.
•  Теперь, когда меню визуально спроектировано, его надо связать с диалоговой панелью, для этого меню вы добавите в класс диалоговой панели. Для этого выберете мастер ClassWizard в меню View, в ответ Visual C++ выведет вам диалоговою панель Adding a class(добавление класса):
 
•  Выберете здесь Select an existing class(выбрать уже существующий класс), это значит, что вы хотите включить меню уже в существующий класс, нажмите на кнопку OK. 
•  Раскроется еще одно окно Select Class(выбрать класс), выберите класс CSpeedDlg, отвечающий за диалоговую панель, не оставляйте установки по умолчанию!
 
•  Нажмите на кнопку Select. 
3. Спроектируйте диалоговую панель:
 Для этого вначале выберите закладку "Recourse View" и раскройте пункт Speed Resource, как показано на рис.
 
•  Щелкните два раза по надписи IDD_SPEED_DIALOG. Справа появится окно проектирования диалоговой панели. 
•  С помощью панели Controls расставьте элементы, как показано на рис. и в таблице. 
 
Объект    Свойство    Установка
Dialog Box    ID    IDD_SPEED_DIALOG
    Caption    The Speed Program
    Menu    IDR_MENU1
    Font    System, Size 10, страница Styles
Static Text    ID    IDC_STATIC
    Caption    Speed: 
Edit Box    ID    IDC_SPEED_EDIT
•  В объекте Dialog Box вы задаете следующие данные:Caption - название диалогового окна.Font - здесь вы уcтановили шрифт -System и его размер 10. Menu - в диалоговой панели Dialog Box Properties в пункте Menu вы должны выбрать меню, которое будет включено в диалоговое окно, в нашем случае, мы выбираем меню IDR_MENU1. 
•  Static Text - это элемент текста, он вставляется как обычный элемент управления, но не выполняет никаких функций, так как служит для показа текста, который вы зададите в Captions. 
4. Свяжите событий с элементами управления
Связывание переменной с окном редактирования. 
    Сейчас вы свяжете переменную с окном редактирования, это нам необходимо для того, чтобы иметь доступ к содержимому окна редактирования. Чтобы связать переменную с окном редактирования IDC_SPEED_EDIT выполните следующие действия
    Выберете ClassWizard в меню View 
    Выберете закладку Member Variables в панели ClassWizard 
•    Щелкните на кнопку Add Varible и задайте переменную следующим образом:
Varible Name: m_SpeedEdit
Category: Value
Varible Type: int
Щелкните на кнопку OK. 
•    Теперь диалоговая панель MFC ClassWizard должна будет выглядеть так: 
 
•    Так как вы определили переменную m_SpeedEdit как переменную типа int, то вы можете задать максимальное и минимальное значение этой переменной. 
•    Задайте в Maximum Value значение 100, это значит, что вы сможете задавать значение переменной в интервале от 0 до 100. 
•    Щелкните на кнопку OK диалоговой панели ClassWizard. 
Связывание кода с событием EN_CHANGE окна редактирования
Событие EN_CHANGE происходит каждый раз при изменении содержимого окна редактирования, это мы будем использовать для того, чтобы при каждом изменении присваивать новое значение переменной m_SpeedEdit. 
•  Чтобы связать код с событием EN_CHANGE, выполните следующие действия: 
•    Выберете ClassWizard в меню View 
•    Выберете закладку Message Maps в панели ClassWizard 
•    Используйте диалоговую панель ClassWizard для выбора следующего события:
Class Name: CSpeedDlg
Object ID: IDC_SPEED_EDIT
Messages: EN_CHANGE
•    Щелкните на кнопку Add Fucntion и в раскрывшемся окне нажмите кнопку OK. 
•    Сейчас ваша панель MFC ClassWizard должна будет выглядеть так: 
 
    Нажмите кнопку Edit Code и напишите следующий код в функции OnChangeSpeedEdit(): 
void CSpeedDlg::OnChangeSpeedEdit() 
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you modify CDialog::OnInitDialog()
// function to send the EM_SETEVENTMASK message to the control
// with the ENM_CHANGE flag ORed into the lParam mask.
// TODO: Add your control notification handler code here 
///Мой код начинается здесь//// 
//Обновить экран
UpdateData(TRUE); 
////Мой код заканчивается здесь////
}
    Вы ввели единственный оператор, который обновляет переменные элементов управления, исходя из текущего содержимого диалогового окна:
UpdateData(TRUE); 
    Следовательно после выполнения данного оператора переменной m_SpeedEdit будет присвоено значение содержимого окна редактирования. 
Связывание кода с пунктом CurrentSpeed меню File
Сейчас вы свяжете код с событием COMMAND, которое возникает при выборе пункта меню, в данном случае при выборе пункта Current Speed. 
•  Чтобы связать код с событием COMMAND, выполните следующие действия: 
•  Откройте закладку Resource View, раскройте пункт Speed View, а там выберите Menu. Выполните двойной щелчок по IDR_MENU1. 
•    Теперь выполняем следующее: 
•    Выберете ClassWizard в меню View 
•    Выберете закладку Message Maps в панели ClassWizard 
•    Используйте диалоговую панель ClassWizard для выбора следующего события:
Class Name: CSpeedDlg
Object ID: ID_FILE_CURRENTSPEED
Messages: COMMAND
•    Щелкните на кнопку Add Fucntion и в раскрывшемся окне нажмите кнопку OK. 
•    Нажмите кнопку Edit Code и напишите следующий код в функции OnFileCurrentspeed(): 
void CSpeedDlg::OnFileCurrentspeed() 
{
// TODO: Add your command handler code here 
////Мой код начинается здесь//// 
char strSpeed[100];
itoa(m_SpeedEdit,strSpeed,10);
MessageBox(strSpeed); 
////Мой код заканчивается здесь//// 
}
•    Первые два оператора, преобразуют в строку целое значение, хранящееся в переменной m_SpeedEdit:
char strSpeed[100]; itoa(m_SpeedEdit,strSpeed,10); 
•    Последний оператор использует функцию MessageBox() для вывода значения строки, хранящееся в переменной strSpeed: 
MessageBox(strSpeed);
Связывание кода с пунктом Exit меню File
Сейчас вы свяжете код с событием COMMAND, которое возникает при выборе пункта меню, в данном случае при выборе пункта Exit. 
•  Чтобы связать код с событием COMMAND, выполните следующие действия: 
•  Откройте закладку Resource View, раскройте пункт Speed View, а там выбирите Menu. Выполните двойной щелчок по IDR_MENU1. 
•    Теперь выполняем следующее: 
•    Выберете ClassWizard в меню View 
•    Выберете закладку Message Maps в панели ClassWizard 
•    Используйте диалоговую панель ClassWizard для выбора следующего события:
Class Name: CSpeedDlg
Object ID: ID_FILE_EXIT
Messages: COMMAND
•    Щелкните на кнопку Add Fucntion и в раскрывшемся окне нажмите кнопку OK. 
•    Нажмите кнопку Edit Code и напишите следующий код в функции OnFileExit(): 
void CSpeedDlg::OnFileExit() 
{
// TODO: Add your command handler code here 
////Мой код начинается здесь//// 
OnOK(); ////Мой код заканчивается здесь//// 
}
•    Единственный оператор, который вы ввели завершает работу программы. 
Связывание кода с пунктом About меню Help
Сейчас вы свяжете код с событием COMMAND, которое возникает при выборе пункта меню, в данном случае при выборе пункта About. 
•  Чтобы связать код с событием COMMAND, выполните следующие действия: 
•  Откройте закладку Resource View, раскройте пункт Speed View, а там выбирите Menu. Выполните двойной щелчок по IDR_MENU1. 
•    Теперь выполняем следующее: 
•    Выберете ClassWizard в меню View 
•    Выберете закладку Message Maps в панели ClassWizard 
•    Используйте диалоговую панель ClassWizard для выбора следующего события:
Class Name: CSpeedDlg
Object ID: ID_HELP_ABOUT
Messages: COMMAND
•    Щелкните на кнопку Add Fucntion и в раскрывшемся окне нажмите кнопку OK. 
•    Нажмите кнопку Edit Code и напишите следующий код в функции OnHelpAbout(): 
void CSpeedDlg::OnHelpAbout() 
{
// TODO: Add your command handler code here 
////Мой код начинается здесь//// 
//Создать объект класса CAboutDlg
CAboutDlg dlg; 
//Вывести диалоговую панель About
dlg.DoModal(); 
////Мой код заканчивается здесь//// 
}
•    Первый оператор введенный вами создает объект класса CAboutDlg с именем dlg:
CAboutDlg dlg; 
•    Класс CAboutDlg dlg; был создан тогда, когда вы создавали проект программы, его написал Visual C++, этот класс связан с диалоговой панелью About. 
•    Следующий оператор выводит диалоговую панель About используя функцию элемент к объекту dlg:
dlg.DoModal();
•    Как и предполагает имя функции, DoModal() выводит диалоговую панель, как модальную диалоговую панель, это значит что пока это окно выведено на экран, вы не сможете активировать другие окна программы. 
•    Программа Speed завершена! Запустите ее и поэксперементируейте с ней! 



Выручите плиззззззззз  smile 
PM MAIL   Вверх
JackYF
Дата 30.11.2007, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Тебе в Центр Помощи. И пользуйся кнопкой "Код".


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 30.11.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Skorpion
Дата 30.11.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 12.11.2006

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



Должна получится программа типа pait 
PM MAIL   Вверх
Solomon
Дата 30.11.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



мдаа... и ты думаеш твое сообщение кто нибуть дочитает до конца??? smile 
ты б хоть привел его к нормальному виду


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Rodman
Дата 1.12.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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




M
Rodman
Модератор: Название темы должно отражать ее суть!

PM MAIL WWW Skype GTalk YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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