Четверг, 16.05.2024, 18:31
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » Visual C++ и MFC

Краткий обзор кода, который автоматически генерируется для диалогового приложения
Краткий обзор автоматически сгенерированного кода для диалогового приложения

Краткий обзор кода, который автоматически генерируется для диалогового приложения

Итак, как вы можете заметить, щелкнув по вкладке FileView (слева), Class Wizard создал для вас 7 файлов:

  • Resource.h - файл описания ресурсов, который содержит определения идентификаторов элементов управления (каждому идентификатору присваивается целочисленная константа)
  • First.h (имя файла обычно совпадает с названием проекта, но это совсем не обязательно) - заголовочный файл класса приложения
  • First.cpp - исходный файл класса приложения
  • FirstDlg.h - заголовочный файл класса окна
  • FirstDlg.cpp - исходный файл класса окна
  • StdAfx.h - заголовочный файл, включающий стандартные системные заголовочные файлы и заголовочные файлы, специфические для данного проекта
  • StdAfx.cpp - исходный файл, содержащий только стандартные подключения (содержит строку #include "stdafx.h")
Рассмотрим код классов приложения и окна

Файл First.h

// First.h : main header file for the FIRST application
//
#if !defined(AFX_FIRST_H__DA4A2945_6FFD_11D5_BB2A_90C85119D547__INCLUDED_)
#define AFX_FIRST_H__DA4A2945_6FFD_11D5_BB2A_90C85119D547__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
 #error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h" // main symbols
 // Основные символические константы
//////////////////////////////////////////////////////////////////////
// CFirstApp:
// See First.cpp for the implementation of this class
// Реализация данного класса смотри First.cpp

class CFirstApp : public CWinApp
{
public:
 CFirstApp();

// Overrides
 // ClassWizard generated virtual function overrides
 // Переопределение виртуальных функций, сгенерированных Class Wizard
 //{{AFX_VIRTUAL(CFirstApp)
 public:
 virtual BOOL InitInstance();
 //}}AFX_VIRTUAL

// Implementation

 //{{AFX_MSG(CFirstApp)
 // NOTE - the ClassWizard will add and remove member functions here.
 // DO NOT EDIT what you see in these blocks of generated code !
 // ВНИМАНИЕ - здесь Class Wizard вставляет и удаляет функции класса
 // НЕ ИЗМЕНЯЙТЕ этих частей сгенерированного кода !
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
 // Макрос, определяющий очередь сообщений
};
//////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations
// immediately before the previous line.

#endif


Файл First.cpp

// First.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "First.h"
#include "FirstDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//////////////////////////////////////////////////////////////////////
// CFirstApp
// Начало очереди сообщений
BEGIN_MESSAGE_MAP(CFirstApp, CWinApp)
 //{{AFX_MSG_MAP(CFirstApp)
 // NOTE - the ClassWizard will add and remove mapping macros here.
 // DO NOT EDIT what you see in these blocks of generated code!
 //}}AFX_MSG
 ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
// Конец очереди сообщений

//////////////////////////////////////////////////////////////////////
// CFirstApp construction

CFirstApp::CFirstApp()
{
 // TODO: add construction code here,
 // Place all significant initialization in InitInstance
 // Добавьте код конструктора
 // Инициализация наиболее важных переменных и функций
 // должна выполнятся в InitInstance
}

//////////////////////////////////////////////////////////////////////
// The one and only CFirstApp object
// Один и только один экземпляр приложения
CFirstApp theApp;

//////////////////////////////////////////////////////////////////////
// CFirstApp initialization

BOOL CFirstApp::InitInstance() 
{ // Функция отвечает за инициализацию экземпляра приложения

 // Standard initialization
 // If you are not using these features and wish to reduce the size
 // of your final executable, you should remove from the following
 // the specific initialization routines you do not need.
 // Стандартная инициализация
 // Если вы не пользуетесь какими-либо функциями и желаете сократить
 // размер выполняемого файла, удалите ненужные процедуры инициализации

#ifdef _AFXDLL
 Enable3dControls(); // Call this when using MFC in a shared DLL
 // Если используются разделяемые библиотеки
#else
 Enable3dControlsStatic(); // Call this when linking to MFC statically
 // Если используется статическая компоновка
#endif
 
 CFirstDlg dlg; // Объект диалога
 m_pMainWnd = &dlg; // Данный объект является главным окном
 int nResponse = dlg.DoModal(); // Отображение диалога
 if (nResponse == IDOK)
 {
 // TODO: Place code here to handle when the dialog is
 // dismissed with OK
 // Если для закрытия окна пользователь нажал OK
 }
 else if (nResponse == IDCANCEL)
 {
 // TODO: Place code here to handle when the dialog is
 // dismissed with Cancel
 // Если для закрытия окна пользователь нажал Cancel
 }

 // Since the dialog has been closed, return FALSE so that we exit the
 // application, rather than start the application's message pump.
 return FALSE;
}


Файл FirstDlg.h

// FirstDlg.h : header file
//

#ifndef (AFX_FIRSTDLG_H__DA4A2947_6FFD_11D5_BB2A_90C85119D547__INCLUDED_)
#define AFX_FIRSTDLG_H__DA4A2947_6FFD_11D5_BB2A_90C85119D547__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//////////////////////////////////////////////////////////////////////
// CFirstDlg dialog

class CFirstDlg : public CDialog
{
// Construction
public:
 CFirstDlg(CWnd* pParent = NULL); // standard constructor
 // Стандартный конструктор
// Dialog Data
 //{{AFX_DATA(CFirstDlg)
 enum { IDD = IDD_FIRST_DIALOG };
 // NOTE: the ClassWizard will add data members here
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CFirstDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
 // Поддерожка DDX/DDV
 //}}AFX_VIRTUAL

// Implementation
protected:
 HICON m_hIcon;

 // Generated message map functions
 //{{AFX_MSG(CFirstDlg)
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};


Файл FirstDlg.cpp

// FirstDlg.cpp : implementation file
//

#include "stdafx.h"
#include "First.h"
#include "FirstDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
// Класс диалога About
class CAboutDlg : public CDialog
{
public:
 CAboutDlg();

// Dialog Data
 //{{AFX_DATA(CAboutDlg)
 enum { IDD = IDD_ABOUTBOX };
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CAboutDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:
 //{{AFX_MSG(CAboutDlg)
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
 //{{AFX_DATA_INIT(CAboutDlg)
 //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CAboutDlg)
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
 //{{AFX_MSG_MAP(CAboutDlg)
 // No message handlers
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

//////////////////////////////////////////////////////////////////////
// CFirstDlg dialog

CFirstDlg::CFirstDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CFirstDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CFirstDlg)
 // NOTE: the ClassWizard will add member initialization here
 //}}AFX_DATA_INIT
 // Note that LoadIcon doesn't require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 // Загрузка пиктограммы приложения
}

void CFirstDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CFirstDlg)
 // NOTE: the ClassWizard will add DDX and DDV calls here
 //}}AFX_DATA_MAP
}
// Начало очереди сообщений диалогового класса
BEGIN_MESSAGE_MAP(CFirstDlg, CDialog)
 //{{AFX_MSG_MAP(CFirstDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
// Конец очереди сообщений
//////////////////////////////////////////////////////////////////////
// CFirstDlg message handlers
// Обработчики сообщений диалогового класса
BOOL CFirstDlg::OnInitDialog()
{ // Переопределяемая функция для инициализации
 // элементов диалогового окна.
 // Вызывается до появления окна на экране
 
 CDialog::OnInitDialog(); // Стандартный обработчик

 // Add "About..." menu item to system menu.
 // Добавление пункта About... в системное меню

 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
 CString strAboutMenu;
 strAboutMenu.LoadString(IDS_ABOUTBOX);
 if (!strAboutMenu.IsEmpty())
 {
 pSysMenu->AppendMenu(MF_SEPARATOR);
 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
 }
 }

 // Set the icon for this dialog. The framework does this automatically
 // when the application's main window is not a dialog
 // Установка пиктограммы приложения
 SetIcon(m_hIcon, TRUE); // Set big icon
 SetIcon(m_hIcon, FALSE); // Set small icon
 
 // TODO: Add extra initialization here
 // Здесь пользователь может вставить собственный вариант инициализации
 // диалогового окна, например, вызвать какую-нибудь функцию, установить
 // начальные значение каких-то параметров и т. п.
 return TRUE; // return TRUE unless you set the focus to a control
 // Если возвращается истина, то фокус уснавливается на первый элемент 
 // управления, если нет - на элемент, указанный пользователем
}

void CFirstDlg::OnSysCommand(UINT nID, LPARAM lParam)
{ // Обработчик выбора системного меню
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
 CAboutDlg dlgAbout; // Создание объекта окна
 dlgAbout.DoModal(); // Отображение окна
 }
 else
 { // Стандартный обработчик
 CDialog::OnSysCommand(nID, lParam);
 }
}

// If you add a minimize button to your dialog, you will need the code
// below to draw the icon. For MFC applications using the document/view
// model, this is automatically done for you by the framework.

void CFirstDlg::OnPaint() 
{ // Функция отвечает за перерисовку пиктограммы приложения,
 // если на диалоге присутствует кнопка минимизации
 if (IsIconic())
 {
 CPaintDC dc(this); // device context for painting

 SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

 // Center icon in client rectangle
 int cxIcon = GetSystemMetrics(SM_CXICON);
 int cyIcon = GetSystemMetrics(SM_CYICON);
 CRect rect; // Объект прямоугольник
 // Заполнение прямоугольника координатами клиентской области окна
 GetClientRect(&rect); 
 int x = (rect.Width() - cxIcon + 1) / 2;
 int y = (rect.Height() - cyIcon + 1) / 2;

 // Draw the icon
 dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
 CDialog::OnPaint();
 }
}

// The system calls this to obtain the cursor to display while the user
// drags the minimized window.
// Вызывается системой для получения указателя, отображаемого при
// перетаскивании свернутого окна
HCURSOR CFirstDlg::OnQueryDragIcon()
{
 return (HCURSOR) m_hIcon;
}


Примечание:
Старайтесь, по возможности, прислушиваться к советам Class Wizard'а.
Категория: Visual C++ и MFC | Добавил: slava (26.09.2009)
Просмотров: 2026 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]