Мегаобучалка Главная | О нас | Обратная связь


Пример программы, использующей меню, акселераторы и окна сообщений



2016-01-02 446 Обсуждений (0)
Пример программы, использующей меню, акселераторы и окна сообщений 0.00 из 5.00 0 оценок




menu.hpp #include "stdafx.h" // Класс основного окна class CMainWin: public CFrameWnd { public: CMainWin(); afx_msg void OnPaint(); // Обработчики команд меню и акселераторов afx_msg void OnCommand_Alpha(); afx_msg void OnCommand_Beta(); afx_msg void OnCommand_Gamma(); afx_msg void OnCommand_Epsilon(); afx_msg void OnCommand_Zeta(); afx_msg void OnCommand_Eta(); afx_msg void OnCommand_Theta(); afx_msg void OnCommand_Help(); afx_msg void OnCommand_Time(); //Только акселератор DECLARE_MESSAGE_MAP() }; // Класс приложения class CApp: public CWinApp { public: BOOL InitInstance(); }; menu.cpp #include "stdafx.h" #include <string.h> #include <stdio.h> #include "MENU.HPP" #include "IDS.H" CMainWin::CMainWin() { // Прямоугольник для построения окна RECT rect; rect.left = 20; rect.top = 10; rect.right = 600; rect.bottom = 460; this->Create(0, "Menus", WS_OVERLAPPEDWINDOW, rect, 0, "MYMENU"); // Загрузка таблицы акселераторов this->LoadAccelTable("MYMENU"); } BOOL CApp::InitInstance() { m_pMainWnd = new CMainWin; m_pMainWnd->ShowWindow(SW_RESTORE); m_pMainWnd->UpdateWindow(); return TRUE; } // Карта откликов на сообщения BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd) ON_WM_PAINT() ON_COMMAND(IDM_ALPHA, OnCommand_Alpha) ON_COMMAND(IDM_BETA, OnCommand_Beta) ON_COMMAND(IDM_GAMMA, OnCommand_Gamma) ON_COMMAND(IDM_EPSILON, OnCommand_Epsilon) ON_COMMAND(IDM_ZETA, OnCommand_Zeta) ON_COMMAND(IDM_ETA, OnCommand_Eta) ON_COMMAND(IDM_THETA, OnCommand_Theta) ON_COMMAND(IDM_HELP, OnCommand_Help) ON_COMMAND(IDM_TIME, OnCommand_Time) END_MESSAGE_MAP() afx_msg void CMainWin::OnPaint() { CPaintDC dc(this); CString s("Press Ctrl-T to get current date and time"); dc.TextOut(100, 200, s); } // Далее идут обработчики сообщений WM_COMMAND. // В них используется функция для вывода окон // сообщений // CWnd::MessageBox(LPCTSTR, LPCTSTR, UINT). afx_msg void CMainWin::OnCommand_Alpha() { // Использование окна сообщений this->MessageBox("OnCommand_Alpha() handler called.", "WM_COMMAND message", MB_OK | MB_ICONINFORMATION); } afx_msg void CMainWin::OnCommand_Beta() { this->MessageBox("OnCommand_Beta() handler called.", "WM_COMMAND message", MB_OK | MB_ICONINFORMATION); } afx_msg void CMainWin::OnCommand_Gamma() { this->MessageBox("OnCommand_Gamma() handler called.", "WM_COMMAND message", MB_OK | MB_ICONINFORMATION); } afx_msg void CMainWin::OnCommand_Epsilon() { this->MessageBox("OnCommand_Epsilon() handler called.", "WM_COMMAND message", MB_OK | MB_ICONINFORMATION); } afx_msg void CMainWin::OnCommand_Zeta() { this->MessageBox("OnCommand_Zeta() handler called.", "WM_COMMAND message", MB_OK | MB_ICONINFORMATION); } afx_msg void CMainWin::OnCommand_Eta() { this->MessageBox("OnCommand_Eta() handler called.", "WM_COMMAND message", MB_OK | MB_ICONINFORMATION); } afx_msg void CMainWin::OnCommand_Theta() { this->MessageBox("OnCommand_Theta() handler called.", "WM_COMMAND message", MB_OK | MB_ICONINFORMATION); } afx_msg void CMainWin::OnCommand_Help() { this->MessageBox("OnCommand_Help() handler called.", "WM_COMMAND message", MB_OK | MB_ICONINFORMATION); } afx_msg void CMainWin::OnCommand_Time() { // Получаем текущее время, используя класс MFC CTime CTime currentTime = CTime::GetCurrentTime(); CString s = currentTime.Format("%A %B %#d, %Y, %#I:%M%p"); s = "OnCommand_Time() handler called.\n\n" + ("Current date and time:\n" + s); this->MessageBox(s, "WM_COMMAND message"); } CApp App; // Единственный объект приложения


Рис. 6. Программа, использующая меню, акселераторы и окна сообщений


Для упрощения первоначального ознакомления, идентификаторы ресурсов и команд были перенесены в файл IDS.H. В каждом обработчике WM_COMMAND выводится окно сообщения, сообщающее о том, какое действие произошло. Один из обработчиков активизируется только с клавиатуры, и при этом выводится окно сообщения с текущим временем и датой, о чем и говорит строка в середине основного окна. Попробуйте выбирать различные пункты в меню.

Также внимательно изучите исходные тексты. Попробуйте изменить меню и акселераторы с помощью редактора ресурсов. Обратите внимание, что мы использовали в проекте два новых файла: stdafx.h и stdafx.cpp. Первый из них включает все самые распространенные заголовочные файлы MFC, а второй - ничего не делающий модуль, использующий заголовочный файл. Это сделано для облегчения использования прекомпилированных заголовочных файлов. Также, в этом случае файл stdafx.obj включает всю необходимую информацию о типах.

 

2. Обзор потоков. Основы потока.

Обзор потоков

Поток (thread) — это независимая единица выполнения в контексте процесса. Программист, разрабатывающий многопоточную программу, должен организовать выполнение потоков таким образом, чтобы это позволило упростить программу и воспользоваться предоставляемыми самим хост-компьютером возможностями распараллеливания задач.

При традиционном подходе программы выполняются в виде единственного потока. Несмотря на возможность организации параллельного выполнения нескольких процессов, что было продемонстрировано на ряде примеров в главе 6, и даже их взаимодействия между собой посредством таких механизмов, как разделение памяти или каналы (глава 11), однопоточные процессы имеют ряд недостатков.

• Переключение между выполняющимися процессами потребляет заметную долю временных и других ресурсов ОС, а в случаях, аналогичных многопроцессному поиску (grepMP, программа 6.1), все процессы заняты выполнением одной и той же программы. Организация параллельной обработки файла с помощью потоков в контексте единственного процесса позволяет снизить общие накладные расходы системы.

• Не считая случаев разделения памяти, между процессами существует лишь слабая взаимосвязь, а организация разделения ресурсов, например, открытых файлов, вызывает затруднения.

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

• Тесно связанные с выполнением операций ввода/вывода программы, подобные рассмотренной в главе 2 программе преобразования файлов из ASCII в Unicode (atou, программа 2.4), вынуждены ограничиваться простой моделью "чтение-изменение-запись". При обработке последовательностей файлов гораздо эффективнее инициализировать выполнение как можно большего числа операций чтения. Windows NT предлагает дополнительные возможности перекрывающегося асинхронного ввода/вывода (глава 14), однако потоки позволяют добиться того же эффекта с меньшими усилиями.

• В SMP-системах планировщик Windows распределяет выполнение отдельных потоков между различными процессорами, что во многих случаях приводит к повышению производительности.

В этой главе обсуждаются потоки и способы управления ими. Использование потоков рассматривается на примере задач параллельного поиска и многопоточной сортировки содержимого файлов. Эти две задачи позволяют сопоставить применение потоков в операциях ввода/вывода и в операциях, связанных с выполнением интенсивных вычислений. Кроме того, в этой главе представлен общий обзор планирования выполнения процессов и потоков в Windows.



2016-01-02 446 Обсуждений (0)
Пример программы, использующей меню, акселераторы и окна сообщений 0.00 из 5.00 0 оценок









Обсуждение в статье: Пример программы, использующей меню, акселераторы и окна сообщений

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (446)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)