162 lines
3.0 KiB
C++
162 lines
3.0 KiB
C++
/***
|
|
*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
|