MAIN.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*** 
  2. *main.cpp
  3. *
  4. *  This is a part of the Microsoft Source Code Samples.
  5. *
  6. *  Copyright (C) 1992-1997 Microsoft Corporation. All rights reserved.
  7. *
  8. *  This source code is only intended as a supplement to Microsoft Development
  9. *  Tools and/or WinHelp documentation.  See these sources for detailed
  10. *  information regarding the Microsoft samples programs.
  11. *
  12. *Purpose:
  13. *  This module is the main entry point of the sample IDispatch
  14. *  calculator, dspcalc2.exe.
  15. *
  16. *  This program is intended to demonstrate an implementation of
  17. *  the IDispatch interface.
  18. *
  19. *Implementation Notes:
  20. *
  21. *****************************************************************************/
  22. #include "dspcalc2.h"
  23. TCHAR g_szAppName[] = TSTR("DspCalc2");
  24. BOOL InitApplication(HINSTANCE);
  25. BOOL InitInstance(HINSTANCE, int);
  26. extern "C" {
  27. long FAR PASCAL WndProc(HWND, UINT, WPARAM, LPARAM);
  28. int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
  29. }
  30. extern "C" int PASCAL
  31. WinMain(
  32.     HINSTANCE hinst,
  33.     HINSTANCE hPrevInstance,
  34.     LPSTR lpCmdLine,
  35.     int nCmdShow)
  36. {
  37.     MSG msg;
  38.     if(!hPrevInstance)
  39.       if(!InitApplication(hinst))
  40. return FALSE;
  41.     if(InitOle() != NOERROR)
  42.       return FALSE;
  43.     if(!InitInstance(hinst, nCmdShow)){
  44.       UninitOle();
  45.       return FALSE;
  46.     }
  47.     while(GetMessage(&msg, NULL, NULL, NULL)) {
  48.       TranslateMessage(&msg);
  49.       DispatchMessage(&msg);
  50.     }
  51.     UninitOle();
  52.     return msg.wParam;
  53. }
  54. BOOL
  55. InitApplication(HINSTANCE hinst)
  56. {
  57.     WNDCLASS  wc;
  58.     wc.style = CS_HREDRAW | CS_VREDRAW;
  59.     wc.lpfnWndProc = WndProc;
  60.     wc.cbClsExtra = 0;
  61.     wc.cbWndExtra = DLGWINDOWEXTRA;
  62.     wc.hInstance = hinst;
  63.     wc.hIcon = LoadIcon(hinst, g_szAppName);
  64.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  65.     wc.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1);
  66.     wc.lpszMenuName = NULL;
  67.     wc.lpszClassName = g_szAppName;
  68.     if(!RegisterClass(&wc))
  69.       return FALSE;
  70.     return TRUE;
  71. }
  72. BOOL
  73. InitInstance(HINSTANCE hinst, int nCmdShow)
  74. {
  75.     g_pcalc->m_hwnd = CreateDialog(hinst, g_szAppName, 0, NULL);
  76.     ShowWindow(g_pcalc->m_hwnd, nCmdShow);
  77.     g_pcalc->m_arith.Display();
  78.     return TRUE;
  79. }
  80. extern "C" long FAR PASCAL
  81. WndProc(
  82.     HWND hwnd,
  83.     UINT message,
  84.     WPARAM wParam,
  85.     LPARAM lParam)
  86. {
  87.     switch(message){
  88.     case WM_COMMAND:
  89.       switch(wParam){
  90.       case IDC_ZERO:
  91.       case IDC_ONE:
  92.       case IDC_TWO:
  93.       case IDC_THREE:
  94.       case IDC_FOUR:
  95.       case IDC_FIVE:
  96.       case IDC_SIX:
  97.       case IDC_SEVEN:
  98.       case IDC_EIGHT:
  99.       case IDC_NINE:
  100.       case IDC_PLUS:
  101.       case IDC_MINUS:
  102.       case IDC_MULT:
  103.       case IDC_DIV:
  104.       case IDC_CLEAR:
  105.       case IDC_EQUALS:
  106. g_pcalc->m_arith.ButtonPush(wParam);
  107. return 0;
  108.       }
  109.       break;
  110.     case WM_DESTROY:
  111.       PostQuitMessage(0);
  112.       return 0;
  113.     }
  114.     return DefWindowProc(hwnd, message, wParam, lParam);
  115. }
  116. #if defined(WIN32)
  117. extern "C" char FAR*
  118. ConvertStrWtoA(OLECHAR FAR* strIn, char FAR* buf, UINT size)
  119. {
  120.   int badConversion = FALSE;
  121.   
  122.   WideCharToMultiByte(CP_ACP, NULL, 
  123.               strIn, -1, 
  124.       buf, size, 
  125.       NULL, &badConversion);
  126.   return buf;
  127. }
  128. extern "C" char FAR*
  129. AnsiString(OLECHAR FAR* strIn)
  130. {
  131.   static char buf[256];
  132.   
  133.   return (ConvertStrWtoA(strIn, buf, 256));
  134. }
  135. #endif