windows程序设计-第七章 BLOKOUT1 备注


如有错误请指正~

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	static TCHAR	szAppName[] = TEXT ("BlokOut1") ;
	HWND			hwnd ;
	MSG				msg ;
	WNDCLASS		wndclass ;

	wndclass.cbClsExtra = 0 ;
	wndclass.cbWndExtra = 0 ;
	wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH) ;
	wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;						//窗口类的类光标
	wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
	wndclass.hInstance = hInstance ;
	wndclass.lpfnWndProc = WndProc ;
	wndclass.lpszClassName = szAppName ;
	wndclass.lpszMenuName = NULL ;
	wndclass.style = CS_HREDRAW | CS_VREDRAW ;

	if (!RegisterClass (&wndclass)){
		MessageBox (NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR) ;
		return 0 ;
	}

	hwnd = CreateWindow (szAppName, TEXT("Mouse Button Demo"), WS_OVERLAPPEDWINDOW, 
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ;
	ShowWindow (hwnd, iCmdShow);
	UpdateWindow (hwnd) ;

	while (GetMessage (&msg, NULL, 0, 0))
	{
		TranslateMessage (&msg) ;
		DispatchMessage (&msg) ;
	}
	return msg.wParam ;
}

void DrawBoxOutline (HWND hwnd, POINT ptBeg, POINT ptEnd) 
{
	HDC hdc ;
	hdc = GetDC(hwnd) ;

	SetROP2 (hdc, R2_NOT) ;											// 用背景色的反色画图
	SelectObject (hdc, GetStockObject (NULL_BRUSH)) ;
	Rectangle (hdc, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ;

	ReleaseDC (hwnd, hdc) ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	static BOOL		fBlocking, fValidBox ;					//fblocking 用于标识当前是否正按下鼠标左键移动鼠标
															//当完成一次 BUTTONDOWN,BUTTONUP 后,得到一个矩形,fValidBox此时便为TRUE,该矩形被画刷填充
	static POINT	ptBeg, ptEnd, ptBoxBeg, ptBoxEnd ;
	HDC				hdc ;
	PAINTSTRUCT		ps ;
	
	switch (message)
	{
	case WM_LBUTTONDOWN :
		ptBeg.x = ptEnd.x = LOWORD (lParam) ;
		ptBeg.y = ptEnd.y = HIWORD (lParam) ;

		DrawBoxOutline (hwnd,  ptBeg, ptEnd) ;				//在鼠标左键点下的地方画了一个黑点

		SetCursor (LoadCursor (NULL, IDC_CROSS)) ;			//光标从左键按下的那一刻开始变为 十字架光标

		fBlocking = TRUE ;
		return 0 ;

	case WM_MOUSEMOVE :
		if (fBlocking)
		{
			SetCursor (LoadCursor (NULL, IDC_CROSS)) ;	//如果应用程序必须在窗口中设置光标,必须确保指定窗口类的类光标被设为NULL,如果类光标不是NULL,则每次移动鼠标时,系统都要恢复类光标。
			DrawBoxOutline (hwnd,  ptBeg, ptEnd) ;		

			ptEnd.x = LOWORD (lParam) ;
			ptEnd.y = HIWORD (lParam) ;

			DrawBoxOutline (hwnd,  ptBeg, ptEnd) ;		//为什么画两个个矩形线框? (其实不是两个,而是把之前的那个擦除了再画)不理解的话可以看看代码后面给的那个链接
		}
		return 0 ;

	case WM_LBUTTONUP :
		if (fBlocking)
		{
			DrawBoxOutline (hwnd,  ptBeg, ptEnd) ;	

			ptBoxBeg	= ptBeg ;
			ptBoxEnd.x	= LOWORD (lParam) ;
			ptBoxEnd.y	= HIWORD (lParam) ;

			SetCursor (LoadCursor (NULL, IDC_ARROW)) ;
			fBlocking = FALSE ;
			fValidBox = TRUE ;

			InvalidateRect (hwnd, NULL, TRUE) ;
		}
		return 0 ;

	case WM_CHAR :								//按下鼠标左键拖动的时候,按Esc建可以撤销本次操作
		if(fBlocking & (wParam == '\x1B'))      //'x1B' (中间的是数字1,不是小写字母l) 对应的是 键盘左上角的 Esc
		{
			DrawBoxOutline (hwnd, ptBeg, ptEnd) ;

			SetCursor (LoadCursor (NULL, IDC_ARROW)) ;

			fBlocking = FALSE ;
		}
		return 0 ;

	case WM_PAINT :
		hdc = BeginPaint (hwnd, &ps) ;

		if(fValidBox){
			SelectObject (hdc, GetStockObject (BLACK_BRUSH)) ;

			Rectangle (hdc, ptBoxBeg.x, ptBoxBeg.y, ptBoxEnd.x, ptBoxEnd.y) ;
		}

		if(fBlocking){
			SetROP2 (hdc, R2_NOT) ;
			SelectObject (hdc, GetStockObject (NULL_BRUSH)) ;
			Rectangle (hdc, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ;
		}

		EndPaint (hwnd, &ps) ;
		return 0 ;

	case WM_DESTROY :
		PostQuitMessage (0) ;
		return 0 ;
	}
	return DefWindowProc (hwnd, message, wParam, lParam) ;
}

http://blog.csdn.net/dellaserss/article/details/38390223

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值