How To Develop A Windows Application Using VC++
Rate this article
5.00 out of 5
In this tutorial we will show you how to develop a windows application in VC++ and MFC libraries with an example simple interest. After viewing the video tutorial, download the source code and try to modify the code so as to get a feel of what is learned in this video tutorial.

Windows Application Using VC++ Part1 



Windows Application Using VC++ Part2

This part of the program will guide on how to design an input dialog in VC++ and Call it in an SDI application.


Source Code

SimpleInterestDlg.cpp 

// SimpleInterestDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SimpleInterest.h"
#include "SimpleInterestDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App 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()

/////////////////////////////////////////////////////////////////////////////
// CSimpleInterestDlg dialog

CSimpleInterestDlg::CSimpleInterestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSimpleInterestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSimpleInterestDlg)
m_iPrincipalAmount = 0.0f;
m_iNoOfMonths = 0;
m_fInterestPerMonth = 0.0f;
m_fTotalAmount = 0.0f;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSimpleInterestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSimpleInterestDlg)
DDX_Text(pDX, IDC_EDIT_PRINCIPAL_AMOUNT, m_iPrincipalAmount);
DDX_Text(pDX, IDC_EDIT_NO_OF_MONTHS, m_iNoOfMonths);
DDX_Text(pDX, IDC_EDIT_INTEREST, m_fInterestPerMonth);
DDX_Text(pDX, IDC_EDIT_TOTAL, m_fTotalAmount);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSimpleInterestDlg, CDialog)
//{{AFX_MSG_MAP(CSimpleInterestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(ID_CALCULATE_TOTAL, OnCalculateTotal)
ON_COMMAND(ID_UTILS_CALCULATETOTAL, OnUtilsCalculatetotal)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSimpleInterestDlg message handlers

BOOL CSimpleInterestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

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

// 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 CSimpleInterestDlg::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 CSimpleInterestDlg::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 CSimpleInterestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CSimpleInterestDlg::OnCalculateTotal() 
{
UpdateData(TRUE);//Get the data from edit control
m_fTotalAmount=m_iPrincipalAmount+(m_iPrincipalAmount*m_iNoOfMonths*m_fInterestPerMonth)/100;
UpdateData(FALSE);//Display the data in the edit control
}

void CSimpleInterestDlg::OnUtilsCalculatetotal() 
{
OnCalculateTotal(); 
}

SimpleInterest.cpp

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

#include "stdafx.h"
#include "SimpleInterest.h"
#include "SimpleInterestDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CSimpleInterestApp

BEGIN_MESSAGE_MAP(CSimpleInterestApp, CWinApp)
//{{AFX_MSG_MAP(CSimpleInterestApp)
// 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()

/////////////////////////////////////////////////////////////////////////////
// CSimpleInterestApp construction

CSimpleInterestApp::CSimpleInterestApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CSimpleInterestApp object

CSimpleInterestApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CSimpleInterestApp initialization

BOOL CSimpleInterestApp::InitInstance()
{
AfxEnableControlContainer();

// 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

CSimpleInterestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
//  dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
//  dismissed with 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;
}




Download Source Code

About The Author
KTS Training

KTS InfoTech Training division offers various short-term programming courses for Students and Professionals who are looking for a bright career in the field of Software development.

The programming video tutorials presented in this web site are taken from some of the training sessions conducted by KTS InfoTech.

You can also learn the Programming packages through Internet directly form our English Speaking Technical experts at an affordable rate.

For more details click here and submit your training requirements.



Number Of articles Posted      : 60
Number Of Messages Posted  : 3
Joined Date : 2012/11/14
   
Author
Messages
Posted:
Post Your Comments  
Name (Max 50 Chars)
Comments
 
 

 
TekTipsDownload
GateExam
Academic Projects
TekTipsExperts
Android