Sunteți pe pagina 1din 8

Ministerul Educaţiei al Republicii Moldova

Universitatea de Stat din Moldova


Facultatea de Fizică şi Inginerie
Departamentul Fizică Aplicată şi Informatică

Laboratorul nr.4
Tema: „ Elaborarea
aplicațiilor de dialog cu
utilizarea bibliotecilor
MFC”

Chişinău 2017
Elaborarea aplicațiilor de dialog cu utilizarea bibliotecilor MFC

Scopul lucrării: a forma deprinderi de eleaborare a aplicațiilor de dialog.


Teoria lucrării
Aplicațiile bazate pe ferestre de dialog, care utilizează bibliotecile MFC, permit dezvoltarea unei
interfețe de utilizator folosind editorul de resurse Visual C++, prin urmare nu mai e nevoie de
programat cod.
La crearea unei aplicații bazate pe ferestre de dialog, asistentul de proiect creează trei clase, de
exemplu CLR2_App, CLR2_Dlg, și Cabout_Dlg. Principalele clase sunt primele două: clasa
aplicației și clasa ferestrei de dialog. Clasa de aplicație contruiește obiectul ”fereastră principală” a
aplicației, încarcă setările programului din registrul Windows.
Clasa ferestrei de dialog efectuează operațiunea principală a programului. Descrierea ferestrei de
dialog constă din două părți: o descriere a resurselor ferestrei de dialog și o descriere a clasei
ferestrei de dialog.

Mersul lucrării

1. Porniți Microsoft Visual Studio. Alegeți din menu de comandă File/New/Project. În fereastra
apărută alegeti Visual C++/MFC/MFV Aplication și introduce-ți numele proiectului, de ex.
Laborator4.
2. Alegeți tipul aplicației pe baza ferestrelor de dialog(Dialog based). Ceilalți parametri rămân
neschimbați.
3. Compilați proiectul și rulați aplicația.
4. Deschideți în mediul de programare fereastra resurselor și alegeți fereastra de dialog
IDD_Laborator4_DIALOG.
5. Ștergeți elementul ID_STATIC1 cu textul ” TODO: Place dialog controls here.” Puneți
pe suprafața ferestrei de dialog elementele: Static Text, Edit Control, Check Box. O posibilă
aranjare a elementelor o puteți găsi în figura 4.
6. În fereastra proprietăților modificați identificatorii elementelor Edit Control și Check
Box, astfel încât în denumirea lor să se reflecte modul de utilizare. De exemplu
ID_EDIT_PROBABILITY.
7. Adăugați în clasa Claborator4_Dlg variabila, legată cu câmpul de introducere a
probabilității realizării atacului. Pentru aceasta în fereastra de dialog selectați elementul
ID_EDIT_PROBABILITY și faceți clic dreapta. În contextul apărut alegeți punctul
Adăugați o variabilă (Add variable..). În fereastra de dialog apărută setați categoria
”Value”, tipul variabilei – float. Numele variabilei îl introduceți la dorință. Deasemenea
setați valorile pentru minim și maxim, care le pot lua variabila dată.
8. Analogic adăugați variabile pentru celelalte elemente Edit Control. Pentru elementul
Check Box alegeți tipul de date BOOL, elementul pentru afișarea rezultatului calcului
ID_STAIC_SUMMA punem Cstring.
9. Pentru câmpul de introducere a măriri nivelului de securitate în urma folosirii măsurilor de
protecție mai adăugăm o variabilă. Pentru această variabilă în câmpul categorie alegem
Control.
10. Schimbați identificatorul butonului IDOK în ID_BUTTON_CALCULATE. Iar în
proprietatea ”Caption” pentru butonul dat introduceți ”Calculare”, iar pentru
IDCANCEL – ”Ieșire”.
11. Creați un handler de evenimente pentru butonul ID_BUTTON_CALCULATE al
evenimentului apăsând BN_CLICED. Pentru aceasta faceți dublu clic cu mouse-ul pe
butonul din fereastra de dialog.
12. Adăugați codul, care efectuiază calculele valorii daunelor produse conform formule din
problemă.
13. Adăugați un handler de eveniment BN_CLICED pentru elementul Check Box. În
handler-ul de eveniment scriți cod, care face indisponibil câmpul de editare pentru
”Defense increase” la scoaterea bifei. Pentru aceasta folosiți metoda clasa fereastră
EnableWindow.
14. Deschideți fereastra claselor și selectați Claborator4_Dlg. Apoi selectați OnInitDialog.
Adăugați în această metodă codul, care la pornirea programei să debifețe utilizarea de
mijloacelor de protecție și sa inițializeze valorile inițiale pentru câmpurile de editare.
15. Compilați programa și verificați corectitudinea lucrului acesteia.
16. Formați un raport asupra lucrării de laborator.

Condiția :
Elaborați o aplicație Windows pe baza ferestrelor de dialog, care va calcula valoarea unui
prejudiciu posibil produs unei sisteme informaționale în urma atacurilor.
// MFCApplication2Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "MFCApplication2.h"
#include "MFCApplication2Dlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialogEx


{ public:
CAboutDlg();

// Dialog Data
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

// Implementation
protected:
DECLARE_MESSAGE_MAP()

3
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)


{
CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()

// CMFCApplication2Dlg dialog

CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=NULL*/)


: CDialogEx(IDD_MFCAPPLICATION2_DIALOG, pParent)

, m_num1(0)
, m_num2(0)
, m_num3(0)
, m_num4(0)
, m_point(FALSE)
, m_result(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX)


{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, ID_num1, m_num1);
DDX_Text(pDX, ID_num2, m_num2);
DDX_Text(pDX, id_result, m_result);
DDX_Text(pDX, ID_num3, m_num3);
DDX_Text(pDX, ID_num4, m_num4);
DDX_Check(pDX, ID_Check, m_point);
DDX_Text(pDX, id_result, m_result);
}

BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(ID_calculate, &CMFCApplication2Dlg::OnBnClickedcalculate)
ON_BN_CLICKED(ID_Check, &CMFCApplication2Dlg::OnBnClickedCheck)
ON_EN_CHANGE(ID_num4, &CMFCApplication2Dlg::OnEnChangenum4)
ON_EN_CHANGE(ID_num3, &CMFCApplication2Dlg::OnEnChangenum3)
ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication2Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()

// CMFCApplication2Dlg message handlers

BOOL CMFCApplication2Dlg::OnInitDialog()
{ CDialogEx::OnInitDialog();

// Add "About..." menu item to system menu.

4
// 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)
{
BOOL bNameValid; CString
strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
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
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 CMFCApplication2Dlg::OnSysCommand(UINT nID, LPARAM lParam)


{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::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 CMFCApplication2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<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

5
{
CDialogEx::OnPaint();
}
}

// The system calls this function to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMFCApplication2Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}

void CMFCApplication2Dlg::OnBnClickedcalculate()
{
UpdateData();
m_result =
m_num1 * (1-
m_num4)*m_num2
*m_num4*365;
UpdateData(fal
se);
// TODO: Add your control notification handler code here
}

void CMFCApplication2Dlg::OnBnClickedCheck()
{
UpdateData();
CWnd* Pfield = GetDlgItem(ID_num4);
Pfield->EnableWindow(m_point);
UpdateData(false);
// TODO: Add your control notification handler code here
}

void CMFCApplication2Dlg::OnEnChangenum4()
{

// TODO: If this is a RICHEDIT control, the control will not


// send this notification unless you override the CDialogEx::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code here


}

void CMFCApplication2Dlg::OnEnChangenum3()
{
UpdateData();
CWnd* Pfield = GetDlgItem(ID_num4);
Pfield->EnableWindow(FALSE);
UpdateData(false);
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialogEx::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code here


}

void CMFCApplication2Dlg::OnBnClickedButton1()

6
{
MessageBox(L"Efectuat de\nstudenta gr 3.2T\nLoghinova Veronica",L"Visual Studio", MB_OK
|| MB_ICONINFORMATION);
// TODO: Add your control notification handler code here
}
REZULTATUL OBTINUT:

7
CONCLUZIE:
În laboratorul am elaborat o aplicație Windows pe baza ferestrelor de dialog, care va calcula
valoarea unui prejudiciu posibil produs unei sisteme informaționale în urma atacurilor.
utilizind deja cunoscute pentru noi funcțiile WM_PAINT, WM_COMMAND ,
CreateWindow() dar si unele noi funcții -funcții MFC pentru blocarea a unui edit folosind
codul
CEdit *m_pEdit;
m_pEdit=(CEdit*)GetDlgItem(IDC_EDIT_lEVEL
); m_pEdit->EnableWindow(m_bMeans);
Pentru a face schimb de date între elementele de control și elementele de date ale clasei
ferestrei de dialog, utilizam metoda UpdateData.

Aplicatia se apelează prin metoda UpdateData definită în clasa CWnd si nu direct prin metoda
DoDataExchange.
Functia DoDataExchange(), aceasta primeste un pointer la un obiect CDataExchange(pDx).
Aceasta retine toate detaliile asociate cu directia transferului de date si cu fereastra vizata
de transfer.
Pentru a preveni erorile de introducere a datelor, adesea este nevoie de a face anumite elemente
de control indisponibile. Pentru aceasta, utilizam metoda EnableWindow din clasa CWnd:
BOOL EnableWindow( BOOL bEnable = TRUE );
Urmatorul cod face linia de intrare să fie indisponibilă:
CEdit *m_pEdit;
m_pEdit=(CEdit*)GetDlgItem(IDC_EDIT_lEVEL);
m_pEdit->EnableWindow(m_bMeans);
În primul pas, definim un pointer la un obiect al clasei CEdit. Metoda GetDlgItem specific
adresa obiectului cu IDC_EDIT. În funcție de valoare bool-eanului bMeans, câmpul text
devine disponibil sau nu.

S-ar putea să vă placă și