MAIN.CPP
/***  
*main.cpp 
* 
*  This is a part of the Microsoft Source Code Samples. 
* 
*  Copyright 1992 - 1998 Microsoft Corporation. All rights reserved. 
* 
*  This source code is only intended as a supplement to Microsoft Development 
*  Tools and/or WinHelp documentation.  See these sources for detailed 
*  information regarding the Microsoft samples programs. 
* 
*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