6 * Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
35 TCHAR szTitle
[MAX_LOADSTRING
];
39 BOOL bDigitGrouping
= FALSE
;
41 /*TODO: Figure out why we are copying MFC map style programming.
42 ** This pattern is difficult to maintain.
44 #define BEGIN_CMD_MAP(a) switch(##a) {
45 #define CMD_MAP_ENTRY(a, b) case a: b(); break;
46 #define END_CMD_MAP(a) }
49 BOOL
OnCreate(HWND hWnd
)
54 hMenu
= GetMenu(hDlgWnd
);
55 hViewMenu
= GetSubMenu(hMenu
, ID_MENU_VIEW
);
57 CheckMenuItem(hViewMenu
, ID_VIEW_DIGIT_GROUPING
, MF_BYCOMMAND
|MF_CHECKED
);
60 //SendMessage(hDlgWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_CALC)));
62 // Initialize the Windows Common Controls DLL
63 //InitCommonControls();
70 SendMessage(GetDlgItem(hDlgWnd
, IDC_RESULT
), WM_COMMAND
, MAKELONG(ID_EDIT_COPY
, 0), 0);
73 void OnEditPaste(void)
75 SendMessage(GetDlgItem(hDlgWnd
, IDC_RESULT
), WM_COMMAND
, MAKELONG(ID_EDIT_PASTE
, 0), 0);
78 void OnViewStandard(void)
81 DestroyWindow(hDlgWnd
);
84 void OnViewScientific(void)
86 CalcType
= SCIENTIFIC
;
87 DestroyWindow(hDlgWnd
);
90 void OnViewDigitGrouping(void)
92 HMENU hMenu
= GetMenu(hDlgWnd
);
93 HMENU hViewMenu
= GetSubMenu(hMenu
, ID_MENU_VIEW
);
94 bDigitGrouping
= !bDigitGrouping
;
96 CheckMenuItem(hViewMenu
, ID_VIEW_DIGIT_GROUPING
, MF_BYCOMMAND
|MF_CHECKED
);
98 CheckMenuItem(hViewMenu
, ID_VIEW_DIGIT_GROUPING
, MF_BYCOMMAND
|MF_UNCHECKED
);
106 void OnViewDecimal(void)
110 void OnViewOctal(void)
114 void OnViewBinary(void)
118 void OnViewDegrees(void)
122 void OnViewRadians(void)
126 void OnViewGrads(void)
130 void OnHelpTopics(void)
132 WinHelp(hDlgWnd
, _T("calc"), HELP_CONTENTS
, 0);
135 void OnHelpAbout(void)
138 void OnButtonClick(int ButtonID
)
141 // Message handler for dialog box.
142 LRESULT CALLBACK
CalcWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
)
148 return OnCreate(hDlg
);
151 DrawItem((LPDRAWITEMSTRUCT
)lParam
);
155 if (LOWORD(wParam
) == IDOK
|| LOWORD(wParam
) == IDCANCEL
) {
156 EndDialog(hDlg
, LOWORD(wParam
));
160 if (HIWORD(wParam
) == BN_CLICKED
) {
161 switch (LOWORD(wParam
)) {
162 OnButtonClick(LOWORD(wParam
));
163 //case IDC_OWNERDRAW:
164 // // application-defined processing
169 //BEGIN_CMD_MAP( LOWORD(wParam) )
170 switch (LOWORD(wParam
))
172 CMD_MAP_ENTRY(ID_EDIT_COPY
, OnEditCopy
)
173 CMD_MAP_ENTRY(ID_EDIT_PASTE
, OnEditPaste
)
174 CMD_MAP_ENTRY(ID_VIEW_STANDARD
, OnViewStandard
)
175 CMD_MAP_ENTRY(ID_VIEW_SCIENTIFIC
, OnViewScientific
)
176 CMD_MAP_ENTRY(ID_VIEW_DIGIT_GROUPING
, OnViewDigitGrouping
)
177 CMD_MAP_ENTRY(ID_VIEW_HEX
, OnViewHex
)
178 CMD_MAP_ENTRY(ID_VIEW_DECIMAL
, OnViewDecimal
)
179 CMD_MAP_ENTRY(ID_VIEW_OCTAL
, OnViewOctal
)
180 CMD_MAP_ENTRY(ID_VIEW_BINARY
, OnViewBinary
)
181 CMD_MAP_ENTRY(ID_VIEW_DEGREES
, OnViewDegrees
)
182 CMD_MAP_ENTRY(ID_VIEW_RADIANS
, OnViewRadians
)
183 CMD_MAP_ENTRY(ID_VIEW_GRADS
, OnViewGrads
)
184 CMD_MAP_ENTRY(ID_HELP_TOPICS
, OnHelpTopics
)
185 CMD_MAP_ENTRY(ID_HELP_ABOUT
, OnHelpAbout
)
195 msg.message = message;
200 if (TranslateAccelerator(hDlg, hAccel, &msg)) return 0;
208 idctrl
= (int)wParam
;
209 pnmh
= (LPNMHDR
)lParam
;
211 if ((pnmh->hwndFrom == hTabWnd) &&
212 (pnmh->idFrom == IDC_TAB) &&
213 (pnmh->code == TCN_SELCHANGE))
215 _OnTabWndSelChange();
222 WinHelp(hDlgWnd
, _T("regedit"), HELP_QUIT
, 0);
223 return DefWindowProc(hDlg
, message
, wParam
, lParam
);
228 int APIENTRY
WinMain(HINSTANCE hInstance
,
229 HINSTANCE hPrevInstance
,
233 CALC_TYPES CurrentCalcType
;
235 // Initialize global variables
237 LoadString(hInstance
, IDS_APP_TITLE
, szTitle
, MAX_LOADSTRING
);
239 // Load our settings from the registry
242 hAccel
= LoadAccelerators(hInstance
, (LPCTSTR
)IDR_ACCELERATOR
);
245 CurrentCalcType
= CalcType
;
250 DialogBox(hInst
, (LPCTSTR
)IDD_SCIENTIFIC
, NULL
, (DLGPROC
)CalcWndProc
);
254 DialogBox(hInst
, (LPCTSTR
)IDD_STANDARD
, NULL
, (DLGPROC
)CalcWndProc
);
257 } while (CalcType
!= CurrentCalcType
);
259 // Save our settings to the registry