Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
388
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

Классы фреймов окон

Вархитектуре документ/представление фреймы окон являются окнами, которые содержат представления. Они также поддерживают панели элементов управления, присоединенные к ним.

Вприложениях с многодокументным интерфейсом главное окно является производным от CMDIFrameWnd, которое содержит фреймы документов, являющихся объектами CMDIChildWnd.

Вприложениях с однодокументным интерфейсом главное окно является производным от CFrameWndn содержит представление текущего документа.

CFrameWnd базовыйклассдляглавногоокнаоднодокументногоинтерфейса; крометого, являетсябазовымдлявсехдругихклассовфреймовокон

CMDIFrameWnd базовый класс для главного окна многодокументного интерфейса CMDIChildWnd базовый класс для окна документа многодокументного интерфейса

CMiniFrameWnd окно с заголовком половинной высоты, обычно показывающее границу плавающейпанелиинструментов

COIelPFrameWnd предоставляет окно для представления, когда документ-сервер редактируется по месту; см. "Серверные классы OLE"

Получение информации о приложении

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

CWinApp* AfxGetAppO -

возвращает указатель на единственный объект CWinApp приложения.

LPCTSTR AfxGetAppNameO -

возвращаетстроку, заканчивающуюсянулем, содержащуюимяприложения.

HINSTANCE AfxGetlnstanceHandleO -

возвращает дескриптор текущего приложения для исполняемого файла (.ЕХЕ); в случае, если она вызвана из динамически подключаемой библиотеки, связанной с USRDLL-версией MFC, то возвращается HINSTANCE этой библиотеки DLL.

CWnd* AfxGetMainWndO -

возвращает значение переменной m_pMainWnd объекта приложения, если оно не является сервером OLE, или указатель на активное главное окно приложения впротивномслучае.

HINSTANCE AfxGetResourceHandleO -

возвращаетдескрипторзагруженныхпоумолчаниюресурсовприложения

void AfxSetResourceHandle(HINSTANCE hlnstResource) -

устанавливает дескриптор экземпляра приложения или модуля .ЕХЕ или .DLL, изкоторого будутзагруженыресурсыприложения.

LPCTSTR AFXAPI AfxRegisterWndClass( DINT nClassStyle,

HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hlcon = 0) -

возвращаетстроку, заканчивающуюсянулем, котораясодержитимязарегистрированного класса. В качестве параметров в эту функцию передаются: nClassStyle — стиль или комбинация стилей класса окна Windows, которые будут рассмотрены при описании регистрации класса окна, hCursor — дескриптор ресурса курсора, hbrBackground — дескриптор ресурса кисти, определяющей цвет фона, hlcon — дескриптор ресурса пиктограммы.

BOOL AFXAPI AfxRegisterClass(WNDCLASS* IpWndClass) -

возвращает значение TRUE при успешной регистрации класса окна и FALSE приошибке. В качестве параметра в функцию передается указатель на структуру WNDCLASS, которая

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

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR IpszModuleName) -

загружает в память модуль (файл .DLL или .ЕХЕ), имя которого передается в качестве параметра IpszModuleName. Если загрузка прошла успешно, то возвращается дескриптор модуляиувеличиваетсясчетчикссылокдляэтойбиблиотеки; в противном случае возвращается

NULL.

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hlnstLib) -

уменьшает счетчик ссылок для загруженного модуля DLL, определяемого параметром hlnstLib. Когда счетчик ссылок становится равным нулю, модуль выгружаетсяизадресного пространстватекущегопроцесса.

Основные составляющие приложения на базе библиотеки классов MFC

Цель этой главы — проанализировать общую структуру программы для Windows, написанной с использованием тех возможностей, которые предоставляет библиотека классов MFC, и показать тесную взаимосвязь между классами библиотеки и интерфейсом прикладного программирования

Win32 API.

Начнем с рассмотрения полного текста первого минимального приложения First, создающего простое окно с заголовком, бордюром и системным меню.

////////////////////////////////////////////у////////////

// Файл First.h

/1111! 11111111111111 /111111111111111111111111111111111111

#ifndef _____ AFXWIN_H_

terror сначала надо включить 'stdafx.h' для поддержки РСН #endif

class CFirstApp : public CWinApp

(

public:

CFirstApp();

//Переопределяемые функции

//{{AFX_VIRTUAL(CFirstApp) public:

virtual BOOL Initlnstance (); //}}AFX_VIRTUAL };

1 1 1 1 1 1 1 1 1 1 1 1 1 1 / 1 1 1 1 1 / 1 / 1 1 1 1 1 1 1 1 1 / 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I/ Файл First.cpp

// Copyright (c) 1997 Мешков А., Тихомиров Ю.

111 /11111 /111111111111111! 1111111111111111111111111111111 tinclude "stdafx.h"

tinclude "First. h" tinclude "MainFrm.h"

//CFirstApp CFirstApp::CFirstApp()

//Может бытьсозданодин итолько одинобъект CFirstApp CFirstApp theApp;

//ИнициализацияобъектаCFirstApp BOOL CFirstApp: : Initlnstance () {

const char *szWndClass = Af xRegisterWndClass ( CS_HREDRAW | CS_HREDRAW, LoadStandardCursor (IDC_ARROW) , (HBRUSH)COLOR_BACKGROUND + 1, Loadlcon(IDR_MAINFRAME));

CMainFrame *pWnd = new CMainFrame;

pWnd->CreateEx(

 

О,

// дополнительные стили

szWndClass,

// классокна

"Перваяпрограмма",

// заголовок

WS_OVERLAPPEDWINDOW,

// стиль

CWJJSEDEFAULT, CW_USE DEFAULT,

// левыйверхнийугол(х, у)

CWJJSEDEFAULT, CW_USEDEFAULT,

// размеры(сх, су)

NULL,

// родительское окно

NULL);

// идентификатор меню

pWnd->ShowWindow(m_nCmdShow) ;

 

m_pMainWnd = pWnd;

 

return TRUE;

 

///////////////////////I/////////////////////////////////

II Файл MainFrm.h

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 / 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

class CMainFrame : public CWnd

{

public:

CMainFrame();

public:

virtual ~CMainFrame();

1 1 1 1 1 1 1 1 / 1 1 1 / 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 // Файл MainFrm.cpp

I / / / I I I I / I I / ПI I / I I I I I I I I I I I I I I I I / I I I I I I I I I I I I I I I I I I I I I I I

#include "stdafx.h" #include "First.h" finclude "MainFrm.h"

// Конструктор/деструкторCMainFrame CMainFrame::CMainFrame()

CMainFrame::-CMainFrame()

11/11/III//III/11111/IIIIIIII/II//1/II/I/11/1/II111IIIIII /I ФайлStdafx.h

//Copyright (c) 1997 МешковА., ТихомировКЗ.

I 11/11/11111111//11111/1/111111/11111111111111/11111/1111

II stdafx.h : заголовочныйфайл, подключающийстандартные,

//наиболее часто используемые заголовочные файлы

#define VC_EXTRALEAN // Исключаетредкоиспользуемыечасти

// заголовочныхфайловWindows f include <afxwin.h> // СердцевинаMFC истандартныекомпоненты

I 111111111111111111/1111111111111111/111111111/1111111111

IIФайлStdafx.cpp

//Copyright (с) 1997 МешковА. , ТихомировЮ.

111111111111111111111111111111111111111111111111111111111

11stdafx.cpp : исходный файл, который подключает только

//стандартные включаемые файлы

//First. pch : файлпрекомпилированныхзаголовков

//stdafx.obj : файл, содержащий прекомпилированные типы информации

#include "stdafx.h"

//ФайлResource. h

//Copyright (с) 1997 Мешков А., Тихомиров Ю.

111111111111111/1111111111111111/1111111/11111111111/1111

//( {NO_DEPENDENCIES} }

//Microsoft Developer Studio generated include file.

//Used by Template. re

//

// Next default values for new objects