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

📄 main.cpp

📁 该文件主要是一个编译原理函数语言绘图器
💻 CPP
字号:
#include "semantic.h"
#define MAX_CHARS   200
HDC hDC;
char SrcFilePath[MAX_CHARS];
static char Name[]="Compiler";

//  ..........初始化窗口函数声明
static bool PrepareWindow(HINSTANCE, HINSTANCE, int);
//  .........检查源程序文件是否合法函数声明
static bool CheckSrcFile(LPSTR);
//  ..........窗口消息处理函数声明
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//  ........... window 程序主函数
int APIENTRY WinMain(HINSTANCE hInstance,
                            HINSTANCE hPrevInstance,
                            LPSTR     lpCmdLine,
                            int         nCmdShow)
{   
  // 保存源文件路径
	strcpy(SrcFilePath, lpCmdLine);
	// 初始化窗口
	if( PrepareWindow(hInstance, hPrevInstance, nCmdShow) != true)
	{ 
		MessageBox(NULL, "窗口初始化失败!", "错误", MB_OK);
		return 1;
	}
  // 检查要分析的源文件
	if (!CheckSrcFile(lpCmdLine)) return 1;
	//  调用绘图语言解释器
	Parser(SrcFilePath);
	// 进入window消息循环
	MSG Msg;
	while(GetMessage(&Msg, NULL, 0, 0))
	{ 
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
	}
	return Msg.wParam;
}

//  ...............初始化窗口函数实现
bool PrepareWindow(HINSTANCE hInst, HINSTANCE  hPrevlnstance,
									 int        nCmdShow)
{   
	HWND     hWnd;
	WNDCLASS W;
	memset(&W, 0, sizeof(WNDCLASS));
	W.style= CS_HREDRAW | CS_VREDRAW;
	W.lpfnWndProc = WndProc;
	W.hInstance = hInst;
	W.hCursor = LoadCursor(NULL, IDC_ARROW);
	W.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
	W.lpszClassName = Name;
	RegisterClass(&W);
	hWnd = CreateWindow(Name, Name,WS_OVERLAPPEDWINDOW, 
		10, 10, 740, 490, NULL, NULL, hInst, NULL);
	if(hWnd == NULL) return false;
	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);
	SetCursor(LoadCursor(hInst, IDC_ARROW));
	hDC = GetDC(hWnd);
	return true;
}

//  .........检查源文件是否合法函数实现
bool CheckSrcFile(LPSTR lpszCmdParam)
{ 
  FILE * file = NULL;
	if(strlen(lpszCmdParam) == 0)
	{ 
		MessageBox(NULL, "未指定源程序文件!", "错误", MB_OK);
		return false;
	}
	
	if((file = fopen(lpszCmdParam, "r")) == NULL)
	{ 
		MessageBox(NULL, "打开源程序文件出错!", "错误", MB_OK);
		MessageBox(NULL, lpszCmdParam, "文件名", MB_OK);
		return false;
	}
	else fclose(file);
	
	return true;
}
//  ..........窗口处理函数实现
LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, 
												 WPARAM wParam,	 LPARAM lParam)
{
	switch(Message)
	{ 
		case WM_DESTROY:
			ReleaseDC(hWnd, hDC);
			PostQuitMessage(0);
			return 0;
     //            break;
		case WM_PAINT:
			PAINTSTRUCT pt;
			BeginPaint(hWnd, &pt);
			Parser(SrcFilePath);
			EndPaint(hWnd, &pt);
		default:
			return DefWindowProc(hWnd, Message, wParam, lParam);
	}
}

⌨️ 快捷键说明

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