Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++_навч_пос14_new.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.86 Mб
Скачать

CClientDc - контекст пристрою, cPoint - точка

//обробник події WM_MOUSEMOVE

void CMy7Dlg::OnMouseMove(UINT nFlags, CPoint point)

{

if (nFlags&&MK_LBUTTON)//якщо натиснута ліва клавіша миші

{

static CPoint anchor=point;//точка для збереження попередніх координат

CClientDC *pDC=new CClientDC(this);//отримати вказівник на контекст пристрою

pDC->MoveTo(anchor.x,anchor.y);//перемістити до точки anchor

pDC->LineTo(point.x,point.y);//рисувати лінію до точки point

anchor=point;//запам’ятати точку

delete pDC;//знищити pDC

}

CDialog::OnMouseMove(nFlags, point);//обробник базового класу

}

Створення додатків Win32 з графічним інтерфейсом

Постановка задачі: за допомогою бібліотеки MFC створити додаток Win32 з графічним інтерфейсом. В головному вікні програми розмістити елемент керування – поле, запрограмувати функцію-обробник повідомлення натиску на кнопку, яка виводить в поле слово "Hello".

Примітка: Borland C++ Builder 6 містить бібліотеку MFC 6.0 та дозволяє конвертацію проектів Microsoft Visual C++.

Код програми

//My_MFC.h : файл з класом додатку

#pragma once

#ifndef __AFXWIN_H__

#error "include 'stdafx.h' before including this file for PCH"

#endif

#include "resource.h"//заголовочний файл з макросами ресурсів

//клас додатку CMy_MFCApp успадкований від CWinApp

class CMy_MFCApp : public CWinApp

{

public:

CMy_MFCApp();//конструктор

virtual BOOL InitInstance();//функція ініціалізації

DECLARE_MESSAGE_MAP()//декларація карти повідомлень

};

//специфікатор вказує, що theApp визначений в окремому файлі

extern CMy_MFCApp theApp;

//My_MFCDlg.h : файл з класом діалогового вікна

#pragma once

#include "afxwin.h"

//клас діалогового вікна CMy_MFCDlg успадкований від CDialog

class CMy_MFCDlg : public CDialog

{

public:

CMy_MFCDlg(CWnd* pParent = NULL);//стандартний конструктор

enum { IDD = IDD_MY_MFC_DIALOG };

protected:

virtual void DoDataExchange(CDataExchange* pDX);//підтримка DDX/DDV

protected:

HICON m_hIcon;//іконка

//функції-обробники повідомлень

virtual BOOL OnInitDialog();

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()//декларація карти повідомлень

public:

afx_msg void OnBnClickedOk();

public:

CEdit edit1;//елемент керування поле edit1

};

// My_MFC.cpp : визначення поведінки класу додатку

#include "stdafx.h"//заголовочні файли MFC

#include "My_MFC.h"//файл класу додатку

#include "My_MFCDlg.h"//файл класу діалогу

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

//макрос карти повідомлень для CMy_MFCApp, базовий клас CWinApp

BEGIN_MESSAGE_MAP(CMy_MFCApp, CWinApp)

ON_COMMAND(ID_HELP, &CWinApp::OnHelp)//відповідає OnHelp

END_MESSAGE_MAP()

//конструктор CMy_MFCApp

CMy_MFCApp::CMy_MFCApp()

{}

//створити об’єкт-додаток класу CMy_MFCApp

CMy_MFCApp theApp;

//ініціалізація додатку

BOOL CMy_MFCApp::InitInstance()

{

CWinApp::InitInstance();//виклик функції базового класу

//зберігати інформацію додатку в реєстрі

SetRegistryKey(_T("Local AppWizard-Generated Applications"));

CMy_MFCDlg dlg;//створити об’єкт-діалогове вікно класу CMy_MFCDlg

m_pMainWnd = &dlg;//указує на головне вікно

INT_PTR nResponse = dlg.DoModal();//викликати як модальне

if (nResponse == IDOK)//якщо натиснуто OK

{}

else if (nResponse == IDCANCEL)//якщо натиснуто Cancel

{}

return FALSE;//вихід з додатку

}

// My_MFCDlg.cpp : визначення поведінки класу діалогового вікна

//у файлі stdafx.h підключені заголовочні файли MFC такі як:

//#include <afxwin.h>//ядро MFC і стандартні компоненти

//#include <afxext.h>//розширення MFC

#include "stdafx.h"

#include "My_MFC.h"//файл класу додатку

#include "My_MFCDlg.h"//файл класу діалогу

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

//конструктор CMy_MFCDlg

CMy_MFCDlg::CMy_MFCDlg(CWnd* pParent /*=NULL*/): CDialog(CMy_MFCDlg::IDD, pParent)

{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}//завантажити іконку

//виконує обмін даними членів з елементами керування

void CMy_MFCDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, IDC_EDIT1, edit1);

}

//макрос карти повідомлень класу CMy_MFCDlg, базовий клас - CDialog

BEGIN_MESSAGE_MAP(CMy_MFCDlg, CDialog)

ON_WM_PAINT()//відповідає OnPaint

ON_WM_QUERYDRAGICON()//відповідає OnQueryDragIcon

ON_BN_CLICKED(IDOK, &CMy_MFCDlg::OnBnClickedOk)//відповідає OnBnClickedOk

END_MESSAGE_MAP()

//обробники повідомлень класу CMy_MFCDlg

//реалізація OnInitDialog - ініціалізація діалогового вікна

BOOL CMy_MFCDlg::OnInitDialog()

{

CDialog::OnInitDialog();//виклик функції базового класу

SetIcon(m_hIcon, TRUE);//установка великої іконки для діалогу

SetIcon(m_hIcon, FALSE);//установка малої іконки для діалогу

return TRUE; //повертає TRUE, якщо ви установлюєте фокус в елемент керування

}

//реалізація OnPaint, викликається при необхідності перерисування

void CMy_MFCDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); //контекст пристрою для рисування

//надіслати повідомлення WM_ICONERASEBKGND

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

//центрувати іконку в клієнтському прямокутнику

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;

dc.DrawIcon(x, y, m_hIcon);//рисувати іконку в координатах x, y

}

else//інакше викликати функцію базового класу

{CDialog::OnPaint();}

}

//викликається щоб отримати курсор при перетягуванні мінімізованого вікна

HCURSOR CMy_MFCDlg::OnQueryDragIcon()

{return static_cast<HCURSOR>(m_hIcon);}

//викликається при натиску на кнопку IDOK

void CMy_MFCDlg::OnBnClickedOk()

{edit1.SetWindowTextW(L"Hello");}//помістити в edit1 текст "Hello"

13 Створення додатків Win32 за допомогою Visual C++ .NET

Постановка задачі: за допомогою Microsoft Visual C++ .NET створити додаток Win32 з графічним інтерфейсом. В головному вікні програми розмістити елемент керування – поле, запрограмувати функцію-обробник події натиску на кнопку, яка виводить в поле слова "Hello World!".