📄 chess.cpp
字号:
#include <windows.h> //包含有数据类型的定义、API入口点定义和其它有用的参数信息。
#include "CWindow.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
CWindow win;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
//把这个程序支解为四块:
//(一)注册窗口类..
//要WinMain登记窗口类,首先要填写一个WNDCLASS结构
static TCHAR szAppName[] = TEXT ("five chess") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wc ;
wc.style = 0 ;
wc.lpfnWndProc = WndProc ;
wc.cbClsExtra = 0 ;
wc.cbWndExtra = 0 ;
wc.hInstance = hInstance ;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wc.hCursor = LoadCursor (NULL, IDC_ARROW) ;//IDC_WAIT
wc.hbrBackground = (HBRUSH) ( COLOR_WINDOW + 1 );
wc.lpszMenuName = NULL ;
wc.lpszClassName = szAppName ;
if (!RegisterClass (&wc))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ;
return 0 ;
}
//(二)创建窗口
DWORD dwStyle = WS_OVERLAPPEDWINDOW;
dwStyle &= ~WS_SIZEBOX;
dwStyle &= ~WS_MAXIMIZEBOX;
dwStyle &= ~WS_MINIMIZEBOX;
hwnd = CreateWindow (szAppName, // window class name
TEXT ("欢迎你的到来!"), // window caption
dwStyle, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
600, // initial x size
537, // initial y size
0, // parent window handle
0, // window menu handle
hInstance, // program instance handle
0) ; // creation parameters
//(三)显示和更新窗口.
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
//调用函数UpdateWindow将产生一个WM_PAINT消息,
//这个消息将使窗口重画,即使窗口得到更新.这个消息
//需要注意的是,由UpdateWindows发送的WM_PAINT消息,
//将直接发送到窗口过程(在上面的例子中是WndProc函数),
//而不是发送到进程的消息队列,因此,尽管这时应用程序的主消息循环尚未启动,
//但是窗口过程仍可接收到该WM_PAINT消息并更新其用户区。
//(四)处理消息.
//从消息队列中取出一个消息,当GetMessage函数检索到WM_QUIT消息,它就返回NULL,并退出消息外循环。
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;//翻译消息
DispatchMessage (&msg) ;//激活窗口过程,来响应该消息
}
return msg.wParam ;//表示从PostQuitMessage返回的值
}
//窗口过程
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc = NULL ;
HDC hdcMem = NULL;
PAINTSTRUCT ps ;
RECT rect ;
static HBITMAP hbmpPicture= NULL;
static HBITMAP hbmpblush= NULL;
HINSTANCE hInst = NULL;
WORD nxPos,nyPos;
//处理消息......
switch (message)
{
case WM_CREATE:
hInst = ((LPCREATESTRUCT) lParam)->hInstance;
win.Create( hwnd, hInst );
return 0L;
case WM_PAINT:
win.OnPaint();
return 0L ;
case WM_LBUTTONDOWN:
POINT point;
point.x = LOWORD( lParam );
point.y = HIWORD( lParam );
win.OnLButtonDown(point);
return 0;
case WM_TIMER:
win.OnTimer(ID_TIMER);
return 0;
case WM_DESTROY:
//中止应用程序
win.Destroy() ;
return 0L ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
/*可以发送窗口函数的消息约有220种,所有窗口消息都以WM_开头,这些消息在头文件中被定义为常量。
引起Windows调用窗口函数的原因有很多,,如改变窗口大小啊,改变窗口在屏幕上的位置啊什么的。
*/
/*WNDCLASS结构,其定义如下所示:
typedef struct _WNDCLASSA
{
UINT style ; //窗口类风格
WNDPROC lpfnWndProc ; //指向窗口过程函数的指针
int cbClsExtra ; //窗口附加数据
int cbWndExtra ; //窗口附加数据
HINSTANCE hInstance ; //拥有窗口类的实例句柄
HICON hIcon ; //最小窗口图标
HCURSOR hCursor ; //窗口内使用的光标
HBRUSH hbrBackground ; //用来着色窗口背景的刷子
LPCSTR lpszMenuName ; //指向菜单资源名的指针
LPCSTR lpszClassName ; // 指向窗口类名的指针
} WNDCLASS, *PWNDCLASS;
在VC6.0里面,把光标定位在WNDCLASS上,按F1,即可启动MSDN,在MSDN里你可看到这个结构原形.
*/
/*
MSG结构在头文件中定义如下:
typedef struct tagMSG
{
HWND hwnd; //参数1:hwnd是消息要发送到的那个窗口的句柄,这个窗口就是咱们用CreateWindows函数创建的那一个。如果是在一个有多个窗口的应用程序中,用这个参数就可决定让哪个窗口接收消息。
UINT message; //参数2:message是一个数字,它唯一标识了一种消息类型。每种消息类型都在Windows文件中定义了,这些常量都以WM_开始后面带一些描述了消息特性的名称。比如说当应用程序退出时,Windows就向应用程序发送一条WM_QUIT消息。
WPARAM wParam; //参数3:一个32位的消息参数,这个值的确切意义取决于消息本身。
LPARAM lParam; //同上
DWORD time; //消息放入消息队列中的时间,在这个域中写入的并不是日期,而是从Windows启动后所测量的时间值。Windows用这个域来使用消息保持正确的顺序。
POINT pt; //消息放入消息队列时的鼠标坐标.
} MSG, *PMSG;
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -