⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hexcalc.cpp

📁 这是一个程序,主要介绍是在evc上做一个计算器
💻 CPP
字号:
// hexcalc.cpp : Defines the entry point for the application.
//



#include <windows.h>
#include "stdafx.h"
 #include  "hexcalc.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    					LPWSTR lpCmdLine,  int iCmdShow)
{
     	static TCHAR 	szAppName[] = TEXT ("HexCalc") ;
     	HWND         			hwnd ;
     	MSG          			msg ;
     	WNDCLASS     			wndclass ;
     
     	wndclass.style         			= CS_HREDRAW | CS_VREDRAW;
     	wndclass.lpfnWndProc   			= WndProc ;
     	wndclass.cbClsExtra    			= 0 ;
     	wndclass.cbWndExtra    			= DLGWINDOWEXTRA ;    			// Note!
     	wndclass.hInstance     			= hInstance ;
     	wndclass.hIcon         			= LoadIcon (hInstance, szAppName) ;
     	wndclass.hCursor       			= LoadCursor (NULL, IDC_ARROW) ;
     	wndclass.hbrBackground 		= (HBRUSH) (COLOR_BTNFACE + 1) ;
     	wndclass.lpszMenuName  		= NULL ;
     	wndclass.lpszClassName 		= szAppName ;
     
     	if (!RegisterClass (&wndclass))
     {
          		MessageBox (	NULL, TEXT ("This program requires Windows NT!"),
                      							szAppName, MB_ICONERROR) ;
          		return 0 ;
     	}
     
     	hwnd = CreateDialog (hInstance, szAppName, 0, NULL) ;
     	ShowWindow (hwnd, iCmdShow) ;
     	while (GetMessage (&msg, NULL, 0, 0))
     	{
          			TranslateMessage (&msg) ;
          			DispatchMessage (&msg) ;
     }
     	return msg.wParam ;
}

void ShowNumber (HWND hwnd, UINT iNumber)
{
     	TCHAR szBuffer[20] ;
     	wsprintf (szBuffer, TEXT ("%X"), iNumber) ;
     	SetDlgItemText (hwnd, VK_ESCAPE, szBuffer) ;
}

DWORD CalcIt (UINT iFirstNum, int iOperation, UINT iNum)
{
	switch (iOperation)
     	{
     	case '=': return iNum ;
     	case '+': return iFirstNum +  iNum ;
     	case '-': return iFirstNum -  iNum ;
     	case '*': return iFirstNum *  iNum ;
     	case '&': return iFirstNum &  iNum ;
     	case '|': return iFirstNum |  iNum ;
     	case '^': return iFirstNum ^  iNum ;
     	case '<': return iFirstNum << iNum ;
     	case '>': return iFirstNum >> iNum ;
     	case '/': return iNum ? iFirstNum / iNum: MAXDWORD ;
     	case '%': return iNum ? iFirstNum % iNum: MAXDWORD ;
     	default : return 0 ;
     	}
}

LRESULT CALLBACK WndProc (	HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
{
     	static BOOL  	bNewNumber = TRUE ;
     	static int   	iOperation = '=' ;
     	static UINT 	iNumber, iFirstNum ;
     	HWND    				hButton ;
     
     	switch (message)
     	{
     	case WM_KEYDOWN:                   // left arrow --> backspace
          		if (wParam != VK_LEFT)
               				break ;
          		wParam = VK_BACK ;
             // fall through
  	    case	WM_CHAR:
          		if 	((wParam = (WPARAM) CharUpper ((TCHAR *) wParam)) == VK_RETURN)
               				wParam = '=' ;
          
          		if 	(hButton = GetDlgItem (hwnd, wParam))
          		{
               			SendMessage (hButton, BM_SETSTATE, 1, 0) ;
               			Sleep (100) ;
               			SendMessage (hButton, BM_SETSTATE, 0, 0) ;
          		}
          		else
          		{
               			MessageBeep (0) ;
               			break ;
          		}
                // fall through
     	case 	WM_COMMAND:
          		SetFocus (hwnd) ;
          
          		if (LOWORD (wParam) == VK_BACK)                 //backspace
               				ShowNumber (hwnd, iNumber /= 16) ;
          
          		else if (LOWORD (wParam) == VK_ESCAPE)  		// escape
               				ShowNumber (hwnd, iNumber = 0) ;
          
          		else if (isxdigit (LOWORD (wParam)))    		// hex digit
				{
               				if (bNewNumber)
               				{
                    					iFirstNum = iNumber ;
                    					iNumber = 0 ;
							}
               			bNewNumber = FALSE ;
               		if 	(iNumber <= MAXDWORD >> 4)
                    				ShowNumber (hwnd, iNumber = 16 * iNumber + wParam -
                    				(isdigit (wParam) ? '0': 'A' - 10)) ;
               		else
                    				MessageBeep (0) ;
          		}
          		else    // operation
          {
               			if (!bNewNumber)
                    	ShowNumber (hwnd, iNumber =
                        CalcIt (iFirstNum, iOperation, iNumber)) ;
               			bNewNumber = TRUE ;
               			iOperation = LOWORD (wParam) ;
          		}
          		return 0 ;
     	case 	WM_DESTROY:
          		PostQuitMessage (0) ;
          		return 0 ;
		}
		return DefWindowProc (hwnd, message, wParam, lParam) ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -