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

📄 mainwndproc.cpp

📁 EVC程序
💻 CPP
字号:
//主窗口的各种处理子过程,是实现程序功能自定义的过程
//包含自定义头文件
#include "myTimeTable.h"

//定义全局常量字符串类名
const TCHAR mainClassName[]=TEXT("myTimeTable");

//定义课表内容(6行5列)
const TCHAR * strCourse[] ={
	TEXT("software"),TEXT("1-2"),TEXT("3-4"),TEXT("5-6"),TEXT("7-8"),
	TEXT("Monday"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),
	TEXT("Tuesday"),TEXT(""),TEXT("Embedded"),TEXT(""),TEXT("WinCE"),
	TEXT("Wednesday"),TEXT(""),TEXT("WinCE"),TEXT(""),TEXT("Embedded"),
	TEXT("Thursday"),TEXT(""),TEXT("WinCE"),TEXT(""),TEXT("Embedded"),
	TEXT("Friday"),TEXT(""),TEXT(""),TEXT(""),TEXT("")
	};

//定义教室(6行5列)
const TCHAR *strClassroom[]={
	TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),
	TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),
	TEXT(""),TEXT(""),TEXT("1304"),TEXT(""),TEXT("1210"),
	TEXT(""),TEXT(""),TEXT("B623"),TEXT(""),TEXT("B623"),
	TEXT(""),TEXT(""),TEXT("B623"),TEXT(""),TEXT("B623"),
	TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT("")
};

//定义全局程序实例句柄
HINSTANCE hInst;

//定义全局产量消息ID与消息处理过程映射表
const MessageProc mainMessages[]={
	WM_CREATE, goCreateMain,
	WM_PAINT, goPaintMain,
	WM_DESTROY, goDestroyMain,
	WM_CLOSE, goCloseMain
};
//注册主窗口类
int registerWnd(HINSTANCE hInstance)
{
	//定义窗口类结构体变量
	WNDCLASS wc;
	
	//填充结构体变量中各成员
	wc.hInstance = hInstance;
	wc.lpszClassName = mainClassName;
	wc.lpfnWndProc  =  mainWndProc;
	wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.style = CS_DBLCLKS;
	wc.hIcon = NULL;
	wc.hCursor = NULL;
	wc.lpszMenuName = NULL;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;

	//注册窗口类
	if(!RegisterClass(&wc))   return 0;
	return 1;
}

//创建主窗口并显示
int showMainWnd(HINSTANCE hInstance, LPWSTR lpCmdLine, int nShowCmd)
{
	//定义窗口句柄
	HWND hWnd;
	//存储全局程序实例句柄
	hInst = hInstance;

	//创建窗口
	hWnd = CreateWindow(mainClassName,
		TEXT("myTimeTable"),
		WS_VISIBLE,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL);
	
	//若窗口不存在,返回并退出
	if(!IsWindow(hWnd))  return 0;

	//显示并刷新窗口
	ShowWindow(hWnd, nShowCmd);
	UpdateWindow(hWnd);

	return 1;
}

//退出主窗口
int quitMainWnd(HINSTANCE hInstance, int nExitCode)
{
	return nExitCode;
}

//主窗口过程
LRESULT CALLBACK mainWndProc(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{
	INT i;
	//查找对应消息ID,并执行映射消息处理过程
	for (i=0; i<dim(mainMessages); i++)
	{
		if(msgCode == mainMessages[i].uCode)
			return (*mainMessages[i].functionName)(hWnd, msgCode, wParam, lParam);
	}

	//对于不在消息映射表中的消息,调用Windows CE的缺省窗口过程
	return DefWindowProc(hWnd, msgCode, wParam, lParam);
}

//主窗口收到WM_CREATE消息后的处理过程
LRESULT goCreateMain(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{
	HWND wndCB;
	//创建命令栏控件
	wndCB = CommandBar_Create(hInst, hWnd, IDC_CMDBAR);

	//在命令栏加入Close按钮
	CommandBar_AddAdornments(wndCB, 0,0);

	return 0;
}

//主窗口收到WM_PAINT消息后的处理过程原型
LRESULT goPaintMain(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{
	//定义画板结构体变量
	PAINTSTRUCT ps;

	//定义矩形结构体变量
	RECT rect;

	//定义设备环境句柄(或称设备上下文,一般指触摸屏)
	HDC hdc;

	//获取客户区矩形大小
	GetClientRect(hWnd, &rect);

	//客户区矩形顶部位置增加命令栏高度
	rect.top += CommandBar_Height(GetDlgItem(hWnd, IDC_CMDBAR));

	//获取设备环境,必须与EndPaint配对使用
	hdc = BeginPaint(hWnd, &ps);

	//绘制课表
	drawTable(hdc, &rect);

	//释放设备资源环境
	EndPaint(hWnd, &ps);

	return 0;
}

//主窗口收到WM_DESTROY消息后的处理过程原型
LRESULT goDestroyMain(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{
	//向主窗口发送WM_QUIT消息,并传0值给msg.wParam
	PostQuitMessage(0);
	return 0;
}

//主窗口收到WM_CLOSE消息后的处理过程原型
LRESULT goCloseMain(HWND hWnd, UINT msgCode, WPARAM wParam, LPARAM lParam)
{
	INT idCode;
	//弹出带有YES NO下压按钮的简单消息对话框
	idCode = MessageBox(hWnd, TEXT("退出软件吗?"), TEXT("退出"), MB_YESNO|MB_ICONQUESTION);
	//如果点击NO按钮则返回
	if(idCode == IDNO)  return 0;
	 
	PostQuitMessage(0);
	return 0;
}

//绘制课表边框
void drawTable(HDC hdc, RECT * prect)
{
	//定义两个画笔句柄,分别存放系统画笔和自定义画笔
	HPEN hsysPen, hPen;

	//定义两个点
	POINT pt[2];

	//定义画笔样式结构
	LOGPEN logPen;

	//定义三个整型变量,其中xw和yh表示单元格的宽度和高度
	int i, xw, yh;

	//填充画笔样式结构
	logPen.lopnStyle = PS_SOLID;
	logPen.lopnWidth.x =2;
	logPen.lopnWidth.y=2;
	logPen.lopnColor = RGB(0,128,255);

	//创建新画笔
	hPen = CreatePenIndirect(&logPen);
	
	//选取新画笔,保存系统画笔
	hsysPen =(HPEN) SelectObject(hdc, hPen);

	//绘制6*5表格
	xw = (prect->right - prect->left)/5;
	yh = (prect->bottom - prect->top)/6;

	//绘制7条横线
	pt[0].x =prect->left;
	pt[1].x = prect->right;
	for(i=0; i<7; i++)
	{
		pt[0].y = pt[1].y = prect->top + i*yh;
		Polyline(hdc, pt, 2);
	}

	//绘制6条竖线
	pt[0].y =prect->top;
	pt[1].y = prect->bottom;
	for(i=0; i<6; i++)
	{
		pt[0].x = pt[1].x = prect->left + i*xw;
		Polyline(hdc, pt, 2);
	}

	//填充课表内容
	for(i=0; i<30; i++)
	{
		drawCourse(hdc, prect, hPen, i);
	}

	//恢复系统画笔
	SelectObject(hdc, hsysPen);

	//从内存中释放新建画笔资源
	DeleteObject(hPen);
}

//填充课表内容
void drawCourse(HDC hdc, RECT * prect, HPEN hPen, INT nCell)
//hdc表示绘图设备环境
//prect表示绘图矩形区
//hPen表示所选择的绘图画笔
//nCell表示特定的绘图单元格
{
	//定义单元格高和宽
	int xw,yh;

	//定义单元格矩形和单元格的上半和下半矩形
	RECT rect, rectUpper, rectUnder;

	//获取单元格宽和高
	xw = (prect->right -prect->left)/5;
	yh = (prect->bottom -prect->top)/6;

	//获取第nCell个单元格矩形
	rect.left = prect->left +(nCell % 5)* xw;
	rect.top = prect->top +(nCell /5)* yh;
	rect.right = rect.left +xw;
	rect.bottom = rect.top +yh;

	//获取第nCell个单元格的上半和下半矩形
	rectUpper = rect;
	rectUnder = rect;
	rectUpper.bottom =rect.bottom -yh/2;
	rectUnder.top = rect.top +yh/2;

	if((nCell < 5)||((nCell %5)==0))
	{
		DrawText(hdc, strCourse[nCell], -1, &rect, DT_CENTER|DT_VCENTER);
	}
	else
	{
		DrawText(hdc, strCourse[nCell], -1, &rectUpper, DT_CENTER|DT_VCENTER);
		DrawText(hdc, strClassroom[nCell], -1, &rectUnder, DT_CENTER|DT_VCENTER);
	}

}

⌨️ 快捷键说明

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