» » » Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2


Авторские права

Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

Здесь можно купить и скачать "Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование, издательство Диалог-МИФИ, год 1996. Так же Вы можете читать ознакомительный отрывок из книги на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Рейтинг:
Название:
Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2
Издательство:
неизвестно
Год:
1996
ISBN:
нет данных
Вы автор?
Книга распространяется на условиях партнёрской программы.
Все авторские права соблюдены. Напишите нам, если Вы не согласны.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2"

Описание и краткое содержание "Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2" читать бесплатно онлайн.



Книга посвящена программированию в среде Microsoft Visual C++ с использованием библиотеки классов MFC. В ней мы расскажем о разработке приложений с многооконным пользовательским интерфейсом, использовании классов MFC для создания меню, панелей управления и состояния. Рассмотрим возможности повторного использования программного кода, предоставляемые Microsoft Visual C++. Отдельную главу книги мы посвятили разработке приложений, взаимодействующих с базами данных через драйвера ODBC.

Книга предназначена для всех, кто интересуется программированием в среде операционных систем Windows 95 и Windows NT версий 3.51 и 4.0.






Если метод PreTranslateAppMessage класса CSplashWnd возвращает значение TRUE, тогда метод PreTranslateAppMessage класса CMultiApp также сразу завершается и возвращает значение TRUE. Сообщения, обработанные классом CSplashWnd более не передаются приложению для дальнейшей обработки.

Если метод PreTranslateAppMessage класса CSplashWnd возвращает значение FALSE, тогда вызывается метод PreTranslateMessage базового класса CWinApp.

Заметим, что по умолчанию метод PreTranslateMessage класса CWinApp выполняет некоторую дополнительную обработку сообщений, например выделяет сообщения от клавиатуры, соответствующие комбинациям клавиш, определенным в таблице акселераторов и преобразует их в командные сообщения. Более подробно о таблице акселераторов вы можете прочитать в разделе “Таблица акселераторов” главы “Меню, панели управления и панели состояния”, а также в 13 томе серии “Библиотека системного программиста”:

BOOL CMultiApp::PreTranslateMessage(MSG* pMsg) {

 // CG: The following lines were added by the Splash Screen

 // component.

 if (CSplashWnd::PreTranslateAppMessage(pMsg)) return TRUE;


 return CWinApp::PreTranslateMessage(pMsg);

}

В случае, если сообщение передается для обработки методу PreTranslateMessage базового класса CWinApp – CWinApp::PreTranslateMessage, метод PreTranslateMessage класса CMultiApp возвращает результат работы этого метода.

Метод OnCreate класса CMainFrame

Метод OnCreate создает главное окно приложения и отображает в нем панели управления и состояния. Описание метода OnCreate класса CMainFrame вы можете посмотреть в разделе “Приложение Multi”.

Во время добавления компонента Splash Screen метод OnCreate класса CMainFrame модифицируется. К нему добавляется вызов метода ShowSplashScreen класса CSplashWnd.

Метод ShowSplashScreen класса CSplashWnd, который создает и отображает на экране окно заставки, будет описан нами позже:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {

 // Вызываем метод OnCreate базового класса

 if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;


 // Создаем панель управления toolbar

 if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) {

  // Ошибка при создании панели управления toolbar

  TRACE0("Failed to create toolbar\n");

  return -1;

 }


 // Создаем панель состояния status bar

 if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) {

  // Ошибка при создании панели состояния status bar

  TRACE0("Failed to create status bar\n");

  return -1;

 }


 // TODO: вы можете изменить характеристики панели

 // управления, убрав некоторые флаги CBRS_

 m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

 // TODO: вы можете запретить перемещение панели управления,

 // если удалите следующие три строки программы

 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

 EnableDocking(CBRS_ALIGN_ANY);

 DockControlBar(&m_wndToolBar);


 // CG: The following line was added by the Splash Screen

 // component.

 CSplashWnd::ShowSplashScreen(this);

 return 0;

}

Класс CSplashWnd

Практически весь программный код, отвечающий за отображение заставки Splash Screen, содержится в классе CSplashWnd. Этот класс включается в состав проекта и вы можете просмотреть его содержимое в окне проекта Project Workspace на странице ClassView (рис. 2.4).

Рис. 2.4. Окно Project Workspace, класс CSplashWnd


Определение класса CSplashWnd находится в файле Splash.h. Мы привели его полностью в листинге 2.1.

Класс CSplashWnd создан на основе базового класса CWnd. Он включает в себя ряд методов и несколько элементов данных. Класс CSplashWnd может обрабатывать сообщения, поэтому для него в  файле Splash.h определена макрокоманда DECLARE_MESSAGE_MAP, а в файле реализации — Splash.cpp — таблица сообщений класса.

Листинг2.1. Файл Splash.h

// CG: This file was added by the Splash Screen component.


#ifndef _SPLASH_SCRN_

#define _SPLASH_SCRN_


// Splash.h : header file

//


//////////////////////////////////////////////////////////////

//   Splash Screen class


class CSplashWnd : public CWnd {

// Construction

protected:

 CSplashWnd();


// Attributes:

public:

 CBitmap m_bitmap;


// Operations

public:

 static void EnableSplashScreen(BOOL bEnable = TRUE);

 static void ShowSplashScreen(CWnd* pParentWnd = NULL);

 static void PreTranslateAppMessage(MSG* pMsg);


// Overrides

 // ClassWizard generated virtual function overrides

 //{{AFX_VIRTUAL(CSplashWnd)

 //}}AFX_VIRTUAL


// Implementation

public:

 ~CSplashWnd();

 virtual void PostNcDestroy();


protected:

 BOOL Create(CWnd* pParentWnd = NULL);

 void HideSplashScreen();

 static BOOL c_bShowSplashWnd;

 static CSplashWnd* c_pSplashWnd;


// Generated message map functions

protected:

 //{{AFX_MSG(CSplashWnd)

 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

 afx_msg void OnPaint();

 afx_msg void OnTimer(UINT nIDEvent);

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()

};


#endif

Методы класса CSplashWnd определены в файле реализации – Splash.cpp. Этот файл также добавляется к проекту Multi. Мы привели полный исходный текст этого файла в листинге 2.2.

Листинг2.2. Файл Splash.cpp

Листинг 2.2. Файл Splash.cpp

// CG: Файл Splash.cpp добавляется в проект во время вставки

// компонента Splash Screen и содержит реализацию класса

// CSplashWnd


#include "stdafx.h"

#include "resource.h"


#include "Splash.h"


#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char BASED_CODE THIS_FILE[] = __FILE__;

#endif


//////////////////////////////////////////////////////////////

//   Splash Screen class


BOOL CSplashWnd::c_bShowSplashWnd;

CSplashWnd* CSplashWnd::c_pSplashWnd;

CSplashWnd::CSplashWnd() {}


CSplashWnd::~CSplashWnd() {

 // Clear the static window pointer.

 ASSERT(c_pSplashWnd == this);

 c_pSplashWnd = NULL;

}


BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)

 //{{AFX_MSG_MAP(CSplashWnd)

 ON_WM_CREATE()

 ON_WM_PAINT()

 ON_WM_TIMER()

 //}}AFX_MSG_MAP

END_MESSAGE_MAP()


void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/) {

 c_bShowSplashWnd = bEnable;

}


void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/) {

 if (!c_bShowSplashWnd || c_pSplashWnd != NULL)      return;


 // Allocate a new splash screen, and create the window.

 c_pSplashWnd = new CSplashWnd;

 if (!c_pSplashWnd->Create(pParentWnd)) delete c_pSplashWnd;

 else c_pSplashWnd->UpdateWindow();

}


BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg){

 if (c_pSplashWnd == NULL) return FALSE;


 // If we get a keyboard or mouse message, hide the splash

 // screen.

 if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN || pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_RBUTTONDOWN || pMsg->message == WM_MBUTTONDOWN || pMsg->message == WM_NCLBUTTONDOWN || pMsg->message == WM_NCRBUTTONDOWN || pMsg->message == WM_NCMBUTTONDOWN)   {

  c_pSplashWnd->HideSplashScreen();

  return TRUE; // message handled here

 }


 return FALSE;   // message not handled

}


BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/) {

 if (!m_bitmap.LoadBitmap(IDB_SPLASH)) return FALSE;


 BITMAP bm;

 m_bitmap.GetBitmap(&bm);


 return CreateEx(0, AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL);

}


void CSplashWnd::HideSplashScreen(){

 // Destroy the window, and update the mainframe.

 DestroyWindow();

 AfxGetMainWnd()->UpdateWindow();

}


void CSplashWnd::PostNcDestroy(){

 // Free the C++ class.

 delete this;

}


int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {

 if (CWnd::OnCreate(lpCreateStruct) == -1) return -1;


 // Center the window.

 CenterWindow();


 // Set a timer to destroy the splash screen.

 SetTimer(1, 750, NULL);


 return 0;

}


void CSplashWnd::OnPaint(){

 CPaintDC dc(this);


 CDC dcImage;

 if (!dcImage.CreateCompatibleDC(&dc)) return;


 BITMAP bm;

 m_bitmap.GetBitmap(&bm);


 // Paint the image.

 CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);

 dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY);

 dcImage.SelectObject(pOldBitmap);

}


void CSplashWnd::OnTimer(UINT nIDEvent) {

 // Destroy the splash screen window.

 HideSplashScreen();

}

Вы всегда можете получить файл Splash.cpp следуя инструкциям в начале раздела “Заставка для приложения”. Теперь опишем отдельные методы класса.

Конструктор и деструктор класса CSplashWnd

Конструктор класса CSplashWnd не содержит программного кода. Вы можете использовать его как заготовку, если решите расширить возможности компонента Splash Screen.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2"

Книги похожие на "Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Александр Фролов

Александр Фролов - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2"

Отзывы читателей о книге "Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.