Code:
// -----By Resistance----
#define IDC_SQR 101
#define IDC_PLUSMIN 102
#define IDC_BACK 103
#define IDC_INVERT 104
#define IDC_PI 105
#define DIALOG_NAME 106
#define IDR_ICO_MAIN 2
#define IDC_RESULT 1002
#define IDC_PLUS 1003
#define IDC_EQUAL 1004
#define IDC_MINUS 1005
#define IDC_BY 1006
#define IDC_CLEAR 1007
#define IDC_DIVISION 1008
#define IDC_ONE 1010
#define IDC_TWO 1011
#define IDC_THREE 1012
#define IDC_FOUR 1013
#define IDC_FIVE 1014
#define IDC_SIX 1015
#define IDC_SEVEN 1016
#define IDC_EIGHT 1017
#define IDC_NINE 1018
#define IDC_ZERO 1019
#define IDC_POINT 1020
#define IDM_MYMENU 1021
#define IDM_ABOUT 6001
#define DLG_ABOUT 6003
#define IDA_MYACCEL 6005
//////////////////////Resource.rc //////
////
#include <windows.h>
#include "resource.h"
IDR_ICO_MAIN ICON "calc.ico" // Please Include an icon for your App
IDM_MYMENU MENU
BEGIN
POPUP "&Help"
BEGIN
MENUITEM "&About", IDM_ABOUT
END
END
DIALOG_NAME DIALOG 76, 6, 131, 133
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU |
WS_MINIMIZEBOX
CAPTION "Calculator Program"
MENU IDM_MYMENU
FONT 9, "Tahoma"
{
CONTROL "7", IDC_SEVEN, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 6, 46, 20, 16
CONTROL "8", IDC_EIGHT, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 30, 46, 20, 16
CONTROL "9", IDC_NINE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 54, 46, 20, 16
CONTROL "C", IDC_CLEAR, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 82, 24, 40, 16
CONTROL "4", IDC_FOUR, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 6, 66, 20, 16
CONTROL "5", IDC_FIVE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 30, 66, 20, 16
CONTROL "6", IDC_SIX, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 54, 66, 20, 16
CONTROL "x", IDC_BY, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 78, 66, 20, 16
CONTROL "1", IDC_ONE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 6, 87, 20, 16
CONTROL "2", IDC_TWO, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 30, 87, 20, 16
CONTROL "3", IDC_THREE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 54, 87, 20, 16
CONTROL "+", IDC_PLUS, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 78, 109, 20, 16
CONTROL "0", IDC_ZERO, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 6, 109, 20, 16
CONTROL ".", IDC_POINT, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 54, 109, 20, 16
CONTROL "/", IDC_DIVISION, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 78, 46, 20,
16
CONTROL "-", IDC_MINUS, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 78, 87, 20, 16
CONTROL "PI", IDC_PI, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 102, 66, 20, 16
CONTROL "", IDC_RESULT, "EDIT", ES_RIGHT | ES_READONLY | WS_CHILD | WS_VISIBLE, 6, 8,
116, 12, WS_EX_CLIENTEDGE
CONTROL "=", IDC_EQUAL, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE,
102, 109, 20, 16
CONTROL "SqR", IDC_SQR, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE,
102, 46, 20, 16
CONTROL "+/-", IDC_PLUSMIN, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE,
30, 109, 20, 16
CONTROL "Backspace", IDC_BACK, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD |
WS_VISIBLE, 38, 24, 40, 16
CONTROL "1/x", IDC_INVERT, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE,
102, 87, 20, 16
}
DLG_ABOUT DIALOG 6, 18, 196, 79
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "About Calculator"
FONT 8, "MS Sans Serif"
{
CONTROL "OK", IDOK, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 75,
53, 45, 15
CONTROL "Program made by You", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP,
53, 12, 104, 10
CONTROL "Version 1.0", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 53, 25,
76, 10
CONTROL "Copyright (c) All rights reserved", -1, "STATIC", SS_LEFT | WS_CHILD |
WS_VISIBLE | WS_GROUP, 53, 37, 119, 12
CONTROL IDR_ICO_MAIN, IDR_ICO_MAIN, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 17, 20,
21, 20
}
IDA_MYACCEL ACCELERATORS
BEGIN
"C",IDC_CLEAR,ASCII
"c",IDC_CLEAR,ASCII
"0",IDC_ZERO,ASCII
"1",IDC_ONE,ASCII
"2",IDC_TWO,ASCII
"3",IDC_THREE,ASCII
"4",IDC_FOUR,ASCII
"5",IDC_FIVE,ASCII
"6",IDC_SIX,ASCII
"7",IDC_SEVEN,ASCII
"8",IDC_EIGHT,ASCII
"9",IDC_NINE,ASCII
"/",IDC_DIVISION,ASCII
"*",IDC_BY,ASCII
"-",IDC_MINUS,ASCII
"+",IDC_PLUS,ASCII
"=",IDC_EQUAL,ASCII
".",IDC_POINT,ASCII
112,IDM_ABOUT,VIRTKEY
13,IDC_EQUAL,VIRTKEY
END
/////////////////////Calculator.cpp ////
///
#define STRICT
//#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
//#include <commctrl.h>
#include <tchar.h>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include "resource.h"
//#ifdef __BORLANDC__
// #pragma argsused
//#endif
using namespace std;
HBRUSH hredBrush;
HBRUSH g_hbrEdit;
HBRUSH g_hbrBackground;
bool CALLBACK AboutDlgProc( HWND, UINT, WPARAM, LPARAM );
bool CALLBACK InitProc( HWND hwndDlg, UINT Message, WPARAM wParam, LPARAM lParam );
HACCEL haccl;
static HINSTANCE ghInstance;
HWND hMainDlg;
HWND hwndResult;
char display[256] =
{
0
};
double Op1, Op2, Mem, Result;
int Operator;
bool bPointUsed;
void ClearDisplay( void );
void Dlg_OnPaint( HWND hwnd );
bool Dlg_OnInitDialog( HWND hwnd, HWND hwndFocus, LPARAM lParam );
HBRUSH Dlg_OnCtlColorStatic( HWND hwnd, HDC hdc, HWND hwndChild, int type );
HBRUSH Dlg_OnCtlColorBtn( HWND hwnd, HDC hdc, HWND hwndChild, int type );
HBRUSH Dlg_OnCtlColorDlg( HWND hwnd, HDC hdc, HWND hwndChild, int type );
void Dlg_OnCommand( HWND hwnd, int id, HWND hwndCtl, UINT codeNotify );
void Dlg_OnClose( HWND hwnd );
void Dlg_OnDestroy( HWND hwnd );
enum TOperator
{
Multiplicacion = 1, Division, Suma, Resta
};
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int
nCmdShow )
{
//HWND hWnd;
MSG Msg;
ghInstance = hInstance;
//Create a modeless dialog box
hMainDlg = CreateDialog( hInstance, MAKEINTRESOURCE( DIALOG_NAME ), NULL, ( DLGPROC
)InitProc );
if ( !hMainDlg )
{
MessageBox( NULL, TEXT( "CreateDialog failed" ), TEXT( "Info" ), MB_OK );
return 0;
}
//hMainDlg = hWnd;
haccl = LoadAccelerators( hInstance, MAKEINTRESOURCE( IDA_MYACCEL ) );
if ( !haccl )
MessageBox( NULL, TEXT( "LoadAccelators failed" ), TEXT( "Info" ), MB_OK );
while ( GetMessage( & Msg, NULL, 0, 0 ) > 0 )
{
if ( !IsDialogMessage( hMainDlg, & Msg ) )
{
if ( TranslateAccelerator( hMainDlg, haccl, & Msg ) == 0 )
{
TranslateMessage( & Msg );
DispatchMessage( & Msg );
}
}
}
return static_cast < int > ( Msg.wParam );
}
bool CALLBACK InitProc( HWND hwndDlg, UINT Message, WPARAM wParam, LPARAM lParam )
{
switch ( Message )
{
HANDLE_MSG( hwndDlg, WM_PAINT, Dlg_OnPaint );
HANDLE_MSG( hwndDlg, WM_INITDIALOG, Dlg_OnInitDialog );
HANDLE_MSG( hwndDlg, WM_CTLCOLORSTATIC, Dlg_OnCtlColorStatic );
HANDLE_MSG( hwndDlg, WM_CTLCOLORBTN, Dlg_OnCtlColorBtn );
HANDLE_MSG( hwndDlg, WM_CTLCOLORDLG, Dlg_OnCtlColorDlg );
HANDLE_MSG( hwndDlg, WM_COMMAND, Dlg_OnCommand );
HANDLE_MSG( hwndDlg, WM_CLOSE, Dlg_OnClose );
HANDLE_MSG( hwndDlg, WM_DESTROY, Dlg_OnDestroy );
}
return FALSE;
}
void Dlg_OnCommand( HWND hwndDlg, int id, HWND hwndCtl, UINT codeNotify )
{
//char buffer[80]={0};
switch ( id )
{
case IDM_ABOUT:
DialogBox( ghInstance, MAKEINTRESOURCE( DLG_ABOUT ), hwndDlg, ( DLGPROC )AboutDlgProc
);
break;
case IDC_EQUAL:
case 13: //Enter key
case 0x3D: // equal key
{
switch ( operator )
{
case Multiplicacion: //Multiplication
Op2 = atof( display );
Result = Op1 * Op2;
break;
case Division: //Division
Op2 = atof( display );
if ( Op2 == 0.0 )
{
strcpy( display, "Cannot divide by zero" );
SendMessage( GetDlgItem( hwndDlg, IDC_RESULT ), WM_SETTEXT, 0, ( LPARAM )(
LPCSTR )display );
strcpy( display, "" );
Op1 = Op2 = 0.0;
Mem = 0.0;
return;
}
Result = Op1 / Op2;
break;
case Suma: //Sum
Op2 = atof( display );
Result = Op1 + Op2;
break;
case Resta: //Resta
Op2 = atof( display );
Result = Op1 - Op2;
break;
}
sprintf( display, "%.8f", Result );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
strcpy( display, "" );
Mem = Result; //IPORTANT ASIGNMENT
Op1 = Op2 = 0.0;
bPointUsed = FALSE;
}
break;
case IDC_SQR:
if ( Mem != 0 )
Op1 = Mem;
else
Op1 = atof( display );
//
SendMessage(GetDlgItem(hMainDlg,IDC_RESULT),WM_GETTEXT,(WPARAM)79,(LPARAM)buffer);
// Op1 = atof(buffer);
Op2 = sqrt( Op1 );
sprintf( display, "%.8f", Op2 );
//SendMessage( hwndResult, WM_SETTEXT, 0
// , ( LPARAM )( LPCSTR )display );
Edit_SetText( hwndResult, display );
strcpy( display, "" );
Mem = Op2;
Op2 = Op1 = 0.0;
bPointUsed = FALSE;
break;
case IDC_PLUSMIN:
//
SendMessage(GetDlgItem(hMainDlg,IDC_RESULT),WM_GETTEXT,(WPARAM)79,(LPARAM)buffer);
if ( Mem != 0 )
Op1 = Mem;
else
Op1 = atof( display );
if ( Op1 == 0.0 )
{
//MessageBox(NULL,"Op1 = 0.0","",MB_OK);
//
return;
}
Op2 = -Op1;
sprintf( display, "%.8f", Op2 );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = Op2;
Op2 = Op1 = 0.0;
bPointUsed = FALSE;
break;
// case IDC_BACK:
//break;
case IDC_INVERT:
if ( Mem != 0 )
Op1 = Mem;
else
Op1 = atof( display );
//
SendMessage(GetDlgItem(hMainDlg,IDC_RESULT),WM_GETTEXT,(WPARAM)79,(LPARAM)buffer);
if ( Op1 == 0.0 )
{
// MessageBox(NULL,"Op1 = 0.0","",MB_OK)
// ;
return;
}
Op2 = 1 / Op1;
sprintf( display, "%.8f", Op2 );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
strcpy( display, "" );
Mem = Op2;
Op1 = Op2 = 0.0;
bPointUsed = FALSE;
break;
case IDC_PI:
strcpy( display, "" );
strcat( display, "3.14159265" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 3.141592;
bPointUsed = FALSE;
break;
case IDC_MINUS:
case 0x96:
operator = Resta;
if ( Mem != 0 )
Op1 = Mem;
else
Op1 = atof( display );
strcpy( display, "" );
bPointUsed = FALSE;
break;
case IDC_BY:
case 0x2A:
operator = Multiplicacion;
if ( Mem != 0 )
Op1 = Mem;
else
Op1 = atof( display );
strcpy( display, "" );
bPointUsed = FALSE;
break;
case IDC_DIVISION:
case 0x2F:
operator = Division;
if ( Mem != 0 )
Op1 = Mem;
else
Op1 = atof( display );
strcpy( display, "" );
bPointUsed = FALSE;
break;
case IDC_PLUS:
case 0x2B:
{
operator = Suma;
if ( Mem != 0 )
Op1 = Mem;
else
Op1 = atof( display );
bPointUsed = FALSE;
strcpy( display, "" );
}
break;
case IDC_CLEAR:
Mem = 0.0;
Op1 = Op2 = 0.0;
ClearDisplay();
bPointUsed = FALSE;
break;
case IDC_ONE:
case 0x31:
strcat( display, "1" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_TWO:
case 0x32:
strcat( display, "2" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_THREE:
case 0x33:
strcat( display, "3" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_FOUR:
case 0x34:
strcat( display, "4" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_FIVE:
case 0x35:
strcat( display, "5" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_SIX:
case 0x36:
strcat( display, "6" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_SEVEN:
case 0x37:
strcat( display, "7" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_EIGHT:
case 0x38:
strcat( display, "8" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_NINE:
case 0x39:
strcat( display, "9" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_ZERO:
case 0x30:
strcat( display, "0" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
break;
case IDC_POINT:
case 0x2E:
if ( !bPointUsed )
{
strcat( display, "." );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR )display );
Mem = 0.0;
bPointUsed = TRUE;
}
break;
}
}
void Dlg_OnPaint( HWND hwndDlg )
{
PAINTSTRUCT ps;
RECT rc;
HDC hdc = BeginPaint( hwndDlg, & ps );
SelectObject( hdc, hredBrush );
SelectObject( hdc, GetStockObject( NULL_PEN ) );
GetClientRect( hwndDlg, & rc );
Ellipse( hdc, -rc.right / 4, -rc.right / 4, rc.right, rc.right );
EndPaint( hwndDlg, & ps );
}
void Dlg_OnDestroy( HWND hwnd )
{
DeleteObject( hredBrush );
DeleteObject( g_hbrEdit );
DeleteObject( g_hbrBackground );
PostQuitMessage( 0 );
}
void Dlg_OnClose( HWND hwnd )
{
DestroyWindow( hwnd );
}
bool Dlg_OnInitDialog( HWND hwndDlg, HWND hwndFocus, LPARAM lParam )
{
Op1 = 0.0;
Op2 = 0.0;
Mem = 0.0;
operator = 0;
Result = 0.0;
ZeroMemory( display, sizeof( display ) );
bPointUsed = FALSE;
hwndResult = GetDlgItem( hwndDlg, IDC_RESULT );
hredBrush = CreateSolidBrush( RGB( 255, 0, 0 ) );
g_hbrBackground = CreateSolidBrush( RGB( 0, 0, 255 ) ); //Backgroung of dialog
g_hbrEdit = CreateSolidBrush( RGB( 0, 0, 0 ) ); //Backgroung of edit control
SendMessage( hwndDlg, WM_SETICON, ICON_SMALL, ( LPARAM )LoadIcon( ghInstance,
MAKEINTRESOURCE( IDR_ICO_MAIN ) ) );
SendMessage( hwndDlg, WM_SETICON, ICON_BIG, ( LPARAM )LoadIcon( ghInstance,
MAKEINTRESOURCE( IDR_ICO_MAIN ) ) );
return TRUE;
}
HBRUSH Dlg_OnCtlColorDlg( HWND hwnd, HDC hdc, HWND hwndChild, int type )
{
return ( HBRUSH )g_hbrBackground;
}
HBRUSH Dlg_OnCtlColorBtn( HWND hwndDlg, HDC hdc, HWND hwndChild, int type )
{
// HDC hdcButtom = (HDC)wParam;
SetBkMode( hdc, TRANSPARENT );
return ( HBRUSH )GetStockObject( NULL_BRUSH );
}
HBRUSH Dlg_OnCtlColorStatic( HWND hwnd, HDC hdc, HWND hwndChild, int type )
{
// HDC hdcStatic = (HDC)wParam;
SetTextColor( hdc, RGB( 255, 255, 0 ) );
// SetBkMode(hdcStatic, TRANSPARENT); //
// ==SetBkColor()
SetBkColor( hdc, RGB( 0, 0, 0 ) );
return ( HBRUSH )g_hbrEdit;
}
bool CALLBACK AboutDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch ( uMsg )
{
case WM_INITDIALOG:
/* * Nothing special to initialize. */
return TRUE;
case WM_COMMAND:
switch ( LOWORD( wParam ) )
{
case IDOK:
case IDCANCEL:
/* * OK or Cancel was clicked, close the dialog. */
EndDialog( hDlg, true );
return TRUE;
}
break;
}
return FALSE;
}
void ClearDisplay( void )
{
strcpy( display, "" );
SendMessage( hwndResult, WM_SETTEXT, 0, ( LPARAM )( LPCSTR ) "" );
}
Bookmarks