📄 mainwndproc.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 + -