/*** *main.cpp * * Copyright (C) 1992-1994, Microsoft Corporation. All Rights Reserved. * Information Contained Herein Is Proprietary and Confidential. * *Purpose: * This module is the main entry point of the sample IDispatch * calculator, dspcalc2.exe. * * This program is intended to demonstrate an implementation of * the IDispatch interface. * *Implementation Notes: * *****************************************************************************/ #include "dspcalc2.h" TCHAR g_szAppName[] = TSTR("DspCalc2"); BOOL InitApplication(HINSTANCE); BOOL InitInstance(HINSTANCE, int); extern "C" { long FAR PASCAL WndProc(HWND, UINT, WPARAM, LPARAM); int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int); } extern "C" int PASCAL WinMain( HINSTANCE hinst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; if(!hPrevInstance) if(!InitApplication(hinst)) return FALSE; if(InitOle() != NOERROR) return FALSE; if(!InitInstance(hinst, nCmdShow)){ UninitOle(); return FALSE; } while(GetMessage(&msg, NULL, NULL, NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); } UninitOle(); return msg.wParam; } BOOL InitApplication(HINSTANCE hinst) { WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = DLGWINDOWEXTRA; wc.hInstance = hinst; wc.hIcon = LoadIcon(hinst, g_szAppName); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1); wc.lpszMenuName = NULL; wc.lpszClassName = g_szAppName; if(!RegisterClass(&wc)) return FALSE; return TRUE; } BOOL InitInstance(HINSTANCE hinst, int nCmdShow) { g_pcalc->m_hwnd = CreateDialog(hinst, g_szAppName, 0, NULL); ShowWindow(g_pcalc->m_hwnd, nCmdShow); g_pcalc->m_arith.Display(); return TRUE; } extern "C" long FAR PASCAL WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message){ case WM_COMMAND: switch(wParam){ case IDC_ZERO: case IDC_ONE: case IDC_TWO: case IDC_THREE: case IDC_FOUR: case IDC_FIVE: case IDC_SIX: case IDC_SEVEN: case IDC_EIGHT: case IDC_NINE: case IDC_PLUS: case IDC_MINUS: case IDC_MULT: case IDC_DIV: case IDC_CLEAR: case IDC_EQUALS: g_pcalc->m_arith.ButtonPush(wParam); return 0; } break; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); } #if defined(WIN32) extern "C" char FAR* ConvertStrWtoA(OLECHAR FAR* strIn, char FAR* buf, UINT size) { int badConversion = FALSE; WideCharToMultiByte(CP_ACP, NULL, strIn, -1, buf, size, NULL, &badConversion); return buf; } extern "C" char FAR* AnsiString(OLECHAR FAR* strIn) { static char buf[256]; return (ConvertStrWtoA(strIn, buf, 256)); } #endif