第一个窗口

在这里插入图片描述

一、设计一个窗口

TCHAR className[] = "My First Window"; 		// 创建窗口类的对象 									
WNDCLASS wndclass = {0};					//一定要先将所有值赋值			
wndclass.hbrBackground = (HBRUSH)COLOR_MENU;//窗口的背景色			
wndclass.lpfnWndProc = WindowProc;			//窗口过程函数(创建一个处理消息的函数)			
wndclass.lpszClassName = className;			//窗口类的名字			
wndclass.hInstance = hInstance;				//定义窗口类的应用程序的实例句柄			

二、注册窗口

RegisterClass(&wndclass);  			

三、创建一个窗口

// 创建窗口  							
	HWND hwnd = CreateWindow(  							
		className,				//类名		
		TEXT("我的第一个窗口"),	//窗口标题		
		WS_OVERLAPPEDWINDOW,	//窗口外观样式 		
		10,						//相对于父窗口的X坐标		
		10,						//相对于父窗口的Y坐标		
		600,					//窗口的宽度  		
		300,					//窗口的高度  		
		NULL,					//父窗口句柄,为NULL  		
		NULL,					//菜单句柄,为NULL  		
		hInstance,				//当前应用程序的句柄  		
		NULL);					//附加数据一般为NULL		
						
	if(hwnd == NULL)			//是否创建成功  		
		return 0;  				

四、显示窗口

	ShowWindow(hwnd, SW_SHOW);  		

五、消息循环

MSG msg;  				
	while(GetMessage(&msg, NULL, 0, 0))  				
	{  				
		TranslateMessage(&msg);  		//翻译一下,比如 你按了键盘上的那个键,光标在哪,更加具体,后面处理这个消息就方便了
		DispatchMessage(&msg);  		//将翻译完的消息,发送回系统	
	}  				
		

六、系统调用我们写的函数处理消息

	LRESULT CALLBACK WindowProc(  								
				IN  HWND hwnd,  	//句柄
				IN  UINT uMsg,  		//消息类型
				IN  WPARAM wParam,  	
				IN  LPARAM lParam  	
				)  	

七、系统处理不相关的消息

如果不是我们关注的消息,就交给系统去处理

{
	return DefWindowProc(hwnd,uMsg,wParam,lParam);					
}

八、在进程中退出

{
	switch(uMsg)	
	{
	case WM_DESTROY:							
		{														
			PostQuitMessage(0);															
			return 0;					
		}						
	}

九、win32中打印消息

#include "stdio.h"

void __cdecl OutputDebugStringF(const char *format, ...)  
{  
    va_list vlArgs;  
    char    *strBuffer = (char*)GlobalAlloc(GPTR, 4096);  
	
    va_start(vlArgs, format);  
    _vsnprintf(strBuffer, 4096 - 1, format, vlArgs);  
    va_end(vlArgs);  
    strcat(strBuffer, "\n");  
    OutputDebugStringA(strBuffer);  
    GlobalFree(strBuffer);  
    return;  
}  

OutputDebugStringF("%x",uMsg);

十、完整代码

// test.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "stdio.h"
//*********************************申明消息类型函数*****************************	
void __cdecl OutputDebugStringF(const char *format, ...)  
{  
    va_list vlArgs;  
    char    *strBuffer = (char*)GlobalAlloc(GPTR, 4096);  
	
    va_start(vlArgs, format);  
    _vsnprintf(strBuffer, 4096 - 1, format, vlArgs);  
    va_end(vlArgs);  
    strcat(strBuffer, "\n");  
    OutputDebugStringA(strBuffer);  
    GlobalFree(strBuffer);  
    return;  
}  
//********************************************************************************************	


//*********************************申明处理函数**********************************************		
LRESULT CALLBACK WindowProc(  						//处理函数申明		
							IN  HWND hwnd,  	
							IN  UINT uMsg,  	
							IN  WPARAM wParam,  	
							IN  LPARAM lParam  	
							);  	
//********************************************************************************************	

//*********************************主程序**********************************************								
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
	//窗口的类名									
	TCHAR className[] = "My First Window"; 																		
	// 创建窗口类的对象 									
	WNDCLASS wndclass = {0};						//一定要先将所有值赋值			
	wndclass.hbrBackground = (HBRUSH)COLOR_MENU;	//窗口的背景色			
	wndclass.lpfnWndProc = WindowProc;				//窗口过程函数			
	wndclass.lpszClassName = className;				//窗口类的名字			
	wndclass.hInstance = hInstance;					//定义窗口类的应用程序的实例句柄			
							
	//注册窗口类					
	RegisterClass(&wndclass);  		
																	
	// 创建窗口  							
	HWND hwnd = CreateWindow(  							
		className,				//类名		
		TEXT("我的第一个窗口"),	//窗口标题		
		WS_OVERLAPPEDWINDOW,	//窗口外观样式 		
		10,						//相对于父窗口的X坐标		
		10,						//相对于父窗口的Y坐标		
		600,					//窗口的宽度  		
		300,					//窗口的高度  		
		NULL,					//父窗口句柄,为NULL  		
		NULL,					//菜单句柄,为NULL  		
		hInstance,				//当前应用程序的句柄  		
		NULL);					//附加数据一般为NULL		
								
	if(hwnd == NULL)			//是否创建成功  		
		return 0;  						


	// 显示窗口  		
	ShowWindow(hwnd, SW_SHOW);  		
			
	
	//消息循环					
	MSG msg;  				
	while(GetMessage(&msg, NULL, 0, 0))  				
	{  				
		TranslateMessage(&msg);  			
		DispatchMessage(&msg);  			
	}  													
	return 0;
}
//*********************************************************************************

//**********************处理函数************************************************
LRESULT CALLBACK WindowProc(  						
							IN  HWND hwnd,  	
							IN  UINT uMsg,  	
							IN  WPARAM wParam,  	
							IN  LPARAM lParam  	
							) 	
{								
	switch(uMsg)
	{				
		case WM_CREATE:
			{
				OutputDebugStringF("WM_CREATE:%x",uMsg);	//创建窗口
				return 0;
			}			
		case WM_DESTROY:							
			{										
				PostQuitMessage(0);		//退出当前窗口							
				return 0;					
			}						
	}							
	return DefWindowProc(hwnd,uMsg,wParam,lParam);					
}
//*********************************************************************************
数据分析职业是一个多金的职业,数据分析职位是一个金饭碗的职位,前景美好,但是要全面掌握大数据分析技术,非常困难,大部分学员的痛点是不能快速找到入门要点,精准快速上手。本课程采用项目驱动的方式,以Spark3和Clickhouse技术为突破口,带领学员快速入门Spark3+Clickhouse数据分析,促使学员成为一名高效且优秀的大数据分析人才。学员通过本课程的学习,不仅可以掌握使用Python3进行Spark3数据分析,还会掌握利用Scala/java进行Spark数据分析,多语言并进,力求全面掌握;另外通过项目驱动,掌握Spark框架的精髓,教导Spark源码查看的技巧;会学到Spark性能优化的核心要点,成为企业急缺的数据分析人才;更会通过Clickhouse和Spark搭建OLAP引擎,使学员对大数据生态圈有一个更加全面的认识和能力的综合提升。真实的数据分析项目,学完即可拿来作为自己的项目经验,增加面试谈薪筹码。课程涉及内容:Ø  Spark内核原理(RDD、DataFrame、Dataset、Structed Stream、SparkML、SparkSQL)Ø  Spark离线数据分析(千万简历数据分析、雪花模型离线数仓构建)Ø  Spark特征处理及模型预测Ø  Spark实时数据分析(Structed Stream)原理及实战Ø  Spark+Hive构建离线数据仓库(数仓概念ODS/DWD/DWS/ADS)Ø  Clickhouse核心原理及实战Ø  Clickhouse engine详解Ø  Spark向Clickhouse导入简历数据,进行数据聚合分析Ø  catboost训练房价预测机器学习模型Ø  基于Clickhouse构建机器学习模型利用SQL进行房价预测Ø  Clickhouse集群监控,Nginx反向代理Grafana+Prometheus+Clickhouse+node_exporterØ  Spark性能优化Ø  Spark工程师面试宝典       课程组件:集群监控:福利:本课程凡是消费满359的学员,一律送出价值109元的实体书籍.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值