SDI ALKALMAZÁS I. Feladat: Készítsünk egy olyan alkalmazást, amely az év végi adózás céljából rögzíti egyetlen évközi bevételnek az adatait: bruttó jövedelem adóel ı leg nettó bevétel jövedelem forrása dátum Elı készületek: File / New / Projects Name: tax MFC AppWizard (exe) Location: \tax Platforms: Win32 Varázsló: 1. lépés Single document 4. lépés Printing and print preview Advanced: File extension: tax Törlések: Workspace / ResourceView / Toolbar / IDR_MAINFRAME Felesleges (szerkesztéshez és nyomtatáshoz kapcsolódó) nyomógombok lehúzása Workspace / ResourceView / Menu / IDR_MAINFRAME Felesleges (szerkesztéshez kapcsolódó) menüpontok törlése Workspace / ResourceView / Accelerator / IDR_MAINFRAME Felesleges (szerkesztéshez kapcsolódó) gyorsbillentyő k lehúzása Workspace / ResourceView / String Table / String Table Felesleges (szerkesztéshez kapcsolódó) státus üzenetek törlése 1
Az Income osztály: Létrehozás: Insert / New Class Class type: Name: General Income Adattagok definiálása: Workspace / ClassView / Income / (jobb egérfül) /Add member variable Name Type Access total_amount int protected tax_paid int protected net_income int protected source CString protected date CString protected Adattagok kezd ı érték-adása a konstruktorban: Income::Income() total_amount = tax_paid = net_income = 0; source = date =_T(""); Tagfüggvények deklarálása: Workspace / ClassView / Income / (jobb egérfül) /Add member function Declaration Type Access TotalAmount() const int public TaxPaid() const int public NetIncome() const int public Source() const CString public Date() const CString public SetTotalAmount(int i) void public SetTaxPaid(int i) void public SetNetIncom(int i) void public SetSource(CString s) void public SetDate(CString s) void public 2
Tagfüggvények definiálása: Workspace / ClassView / (függvény választás) int Income::TotalAmount() const return total_amount; int Income::TaxPaid() const return tax_paid; int Income::NetIncome() const return net_income; CString Income::Source() const return source; CString Income::Date() const return date; void Income::SetTotalAmount(int i) total_amount = i; void Income::SetTaxPaid(int i) tax_paid = i; void Income::SetNetIncome(int i) net_income = i; void Income::SetSource(CString s) source = s; void Income::SetDate(CString s) date = s; Egy Income típusú objektum deklarálása a CtaxDoc dokumentum osztályban: Workspace / ClassView / CTaxDoc / (jobb egérfül) /Add member variable Name Type Access in Income protected 3
Dialógus ablak: Tervezés Insert / Resource / Dialog Változók hozzárendelése a vezérl ı khöz: Control ID Style Variable name Type Tab order IDC_TOTAL_AMOUNT Number, Right total_amount int 1 IDC_TAX_PAID Number, Right tax_paaid int 2 IDC_NET_INCOME net_income int 3 IDC_SOURCE source CString 4 IDC_DATE date CString 5 IDOK 6 IDCANCEL 7 Új elemek az alkalmazás fı ablakára: Új gomb: Workspace / ResourceView / Toolbar / IDR_MAINFRAME -Megrajzolás -Eszköztár gombjai közé helyezés -Dupla kattintás a gombon: 4
Új menüpont: Workspace / ResourceView / Menu / IDR_MAINFRAME -Üres menüpont sorba helyezése -Dupla kattintás az üres menüponton: Új gyorsbillentyő : Workspace / ResourceView / Accelerator / IDR_MAINFRAME -Dupla kattintás az ID_INCOME-on: 5
Kapcsolódó callback függvény: ClassWizard / Message Maps Project: tax Class Name: CTaxDoc Object IDs: ID_INCOME Message: COMMAND Add member function / Edit Code #include IncomeDlg.h... void CTaxDoc::OnIncome() IncomeDlg dlg; dlg.setincome(in); if ( dlg.domodal() == IDOK ) dlg.getincome(in); Dialógus ablak tagfüggvényei: Workspace / ClassView / IncomeDlg / (jobb egérfül) /Add member function IncomeDlg.h: #include "Income.h"... class IncomeDlg : public CDialog // Construction public: void GetIncome(Income &in); void SetIncome(const Income &in); IncomeDlg(CWnd* pparent = NULL);... IncomeDlg.cpp: void IncomeDlg::GetIncome(Income &in) in.settotalamount(total_amount); in.settaxpaid(tax_paid); in.setnetincome(net_income); in.setsource(source); in.setdate(date); void IncomeDlg::SetIncome(const Income &in) total_amount = in.totalamount(); tax_paid = in.taxpaid(); net_income = in.netincome(); source = in.source(); date = in.date(); 6
Alkalmazás ikonok átrajzolása: Workspace / ResourceView / Icon / IDR_MAINFRAME Workspace / ResourceView / Icon / IDR_TAXTYPE Nézet és Dokumentum kapcsolata: Workspace / ClassView / CTaxDoc / OnIncome() void CTaxDoc::OnIncome() IncomeDlg dlg; dlg.setincome(in); if ( dlg.domodal() == IDOK ) dlg.getincome(in); UpdateAllViews(NULL); Workspace / ClassView / CTaxView / OnDraw(CDC* pdc) void CtaxView::OnDraw(CDC* pdc) CtaxDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CString str; str.format( Total Amount: %d, pdoc->totalamount() ); pdc->textout(10, 10, str); Workspace / ClassView / CTaxDoc int TotalAmount() return in.totalamount(); 7