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

📄 chess.cpp

📁 WindowsProgrammingFoundation C++学习很好的书籍 希望能够起到帮助
💻 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 + -