Windows之旅

哎呀,当你太过松懈就看看,啊啊啊
成电通信研究方向
通信原理 信号与系统 数电 模电数字信号处理 数字图像处理 模式识别 信息论
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
客户区盖在非客户区的上面
我的第一个Win程序
Fn+F1 可打开在线的手册

#include <Windows.h>//win32窗口应用必须要包含

/*
1.入口函数WinMain 不能换名字
2.WINAPI:  __stdcall函数的调用约定 一个宏定义
  CALLBACK:__stdcall
  APIENTRY:__stdcall
  必须显示的加上,为啥C语言没有呢
因为C有默认的显示函数 __cdecl

3.//定义函数的入栈顺序;上述两种均为从右往左入栈
4.调用方和被调用方
A找B做一件事 A是调用方 B是被调用方
5.
//HINSTANCE:应用程序实例句柄类型  实质:结构体指针
#define DECLARE_HANDLE(name) 
struct name__
{
int unused;
}; 
typedef struct name__ *name
           hInstance:当前应用程序实例句柄 简单理解:(当前exe)
		   hPreInstance:当前应用程序的前一个实例句柄。但在32系统上已经废弃了,NULL 只是保持兼容,在16位系统上
//LPSTR=>char*        lpCmdLine 字符串 命令行参数
int 
nCmdShow 窗口的显示方式:最大化,最小化,隐藏
*/
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//弹出一个窗口
	/*int MessageBox(
		HWND    hWnd,
		LPCTSTR lpText,
		LPCTSTR lpCaption,
		UINT    uType
		);

	//第一个参数 HWND hWnd  父窗口 NULL 就代表是一个独立的窗口
	//HWND: DECLARE_HANDLE(HWND); 公布处理 是一个宏定义 结构体
    #define DECLARE_HANDLE(HWND) 
	struct HWND__  窗口句柄=》窗口ID
	{
		int unused;
	};
	typedef struct HWND__ *HWND

	//第二个参数 要显示的文本 L=> 告诉编译器我使用Unicode编码
	//第三个参数 标题
	//第四个参数 MB_OK 翻译为确定 MB MessageBox的缩写

	
	*/
	MessageBox(NULL, L"这是我的第一个win程序", L"加油", MB_CANCELTRYCONTINUE);


	return 0;
}

在这里插入图片描述
在这里插入图片描述
有很多按钮
在这里插入图片描述
在这里插入图片描述
这两个句柄都是标签,但性质不同,实例句柄标记exe 窗口句柄标记窗口

MessageBox的return values

在这里插入图片描述
在这里插入图片描述
如何把图片变成.ico格式
在这里插入图片描述
光标的种类
在这里插入图片描述

int WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//开发一个窗口
	//1,设计窗口类
	WNDCLASS wc;
	wc.style = CS_VREDRAW | CS_HREDRAW; //窗口类的风格 就是横或竖改变就会重新绘制
	wc.lpfnWndProc = WindowProc;//窗口处理函数 此处是一个重点——
	wc.cbClsExtra = 0;//窗口类的附加内存
	wc.cbWndExtra = 0;//窗口附加的内存大小
	wc.hInstance = hInstance; //应用程序实例句柄 一定要给他赋值
	wc.hIcon = NULL; //图标句柄 没有填NULL
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);//加载光标 鼠标放上去显示的箭头呀 I呀 
	wc.hbrBackground = CreateSolidBrush(RGB(255,0,0))//红绿蓝0->255  创建背景颜色
	//LoadCursor,可以加载自己做的第一个加句柄,也可以加载系统中的光标 第一个地方加NULL
	//2.注册窗口类
	//3.创建窗口 
	//4.显示和更新窗口
	//5.消息循环
}
//HWND:指针类型
//LRESULT:long型 4个字符
//CALLBACK:_stdcall 函数参数的入栈方式,从右向左
//WindowProc: 窗口处理函数的函数名
//UINT:unsigned int 无符号整形
//WPARAM:unsigned int
//LPARAM:long
//但是这个窗口处理函数有一个固定的格式
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMse, WPARAM wParam, LPARAM lParam)
{

}
/*1. WNDCLASS 实际上就是一个结构体
typedef struct tagWNDCLASSW {
	UINT        style;
	WNDPROC     lpfnWndProc;
	int         cbClsExtra;
	int         cbWndExtra;
	HINSTANCE   hInstance;
	HICON       hIcon;
	HCURSOR     hCursor;
	HBRUSH      hbrBackground;
2.
	*/

工具—>spy+±—>隐藏spy+±->探测窗口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
成绩出来了,考的非常不错,可见啊,投机取巧不可取,踏实实干是王道,但这成绩都已经是过去的光辉了。大学真的是一个闪闪发光的地方,现在老师给了我一篇长长的英文论文,要求我在一周后给她讲一下我的理解,我作为一个本科生,看这个肯定是很难的,但是挑战与机遇并存,加油吧,好好珍惜当前的机会。弄清楚什么是你目前最重要的事情,别像以前一样弄不清。那我肯定是先翻译。

哎,时间真的是过的很快,今天,老师把我拉上了车,拉上了车又怎么样,还给靠我自己努力了,没办法,今天老师告诉我刘学忠在做一个什么粮食,做就做把,我觉得没办法,我在云飞面前可能表现的太不靠谱了,那也没办法,这种东西不是你一句两句能说清的,既然上帝关上了一扇门,就会打开另一扇门。有几件事,第一,Windows给开始,第二,老师让我继续往后做,那我也没办法,尽力吧。一点点做,我的安心可不是在别人身上啊。

哎呀呀,这个不是私密也,算了,随便吧,现在冷死了,我是不会往纸质作业本上写日记的,我前几天在想,这么多努力不是打水漂了吗,转念一下并没有,而是我把他消化了,那有朋友天天那样的,大家都是彼此忙碌的,哈哈哈哈哈。开学后就把他归在偶尔交出来玩的序列把,过火之后就是冷了,这样也好。就如何老师说的,那那那 就是有时候其实不用非要找话题,大家你看看我,我看看你的那种尴尬也挺美好的。哈哈哈哈哈。确实我反而觉得现在挺开心的,加油,下午起来可能要洗澡,早洗晚洗都得洗,然后在搞windows。
我现在晚上也没有什么事情,我应该赶紧学一会,这样玩的时候也更加有意思。一直玩也很腻歪的,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <Windows.h>//win32窗口应用必须要包含

/*
1.入口函数WinMain 不能换名字
2.WINAPI:  __stdcall函数的调用约定 一个宏定义
  CALLBACK:__stdcall
  APIENTRY:__stdcall
  必须显示的加上,为啥C语言没有呢
因为C有默认的显示函数 __cdecl

3.//定义函数的入栈顺序;上述两种均为从右往左入栈
4.调用方和被调用方
A找B做一件事 A是调用方 B是被调用方
5.
//HINSTANCE:应用程序实例句柄类型  实质:结构体指针
#define DECLARE_HANDLE(name) 
struct name__
{
int unused;
}; 
typedef struct name__ *name
           hInstance:当前应用程序实例句柄 简单理解:(当前exe)
		   hPreInstance:当前应用程序的前一个实例句柄。但在32系统上已经废弃了,NULL 只是保持兼容,在16位系统上
//LPSTR=>char*        lpCmdLine 字符串 命令行参数
int 
nCmdShow 窗口的显示方式:最大化,最小化,隐藏
*/
//int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
//{
	//弹出一个窗口
	/*int MessageBox(
		HWND    hWnd,
		LPCTSTR lpText,
		LPCTSTR lpCaption,
		UINT    uType
		);

	//第一个参数 HWND hWnd  父窗口 NULL 就代表是一个独立的窗口
	//HWND: DECLARE_HANDLE(HWND); 公布处理 是一个宏定义 结构体
    #define DECLARE_HANDLE(HWND) 
	struct HWND__  窗口句柄=》窗口ID
	{
		int unused;
	};
	typedef struct HWND__ *HWND

	//第二个参数 要显示的文本 L=> 告诉编译器我使用Unicode编码
	//第三个参数 标题
	//第四个参数 MB_OK 翻译为确定 MB MessageBox的缩写

	
	*/
//	int 罗云熙=MessageBox(NULL, L"这是我的第一个win程序", L"加油", MB_CANCELTRYCONTINUE | MB_ICONEXCLAMATION);
//	if (IDCANCEL== 罗云熙)
//	{
//		MessageBox(NULL, L"点了是", L"提示", MB_OK);
//
//	}
//
//
//	return 0;
//}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMse, WPARAM wParam, LPARAM lParam);
	int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	
	//开发一个窗口
	wchar_t szAppClassName[] = L"ShaoChongMade";//宽字符,一个字符占两个字节
	wchar_t szWindowTitle[] =L"这是我的第一个窗口程序";

	//1,设计窗口类
	WNDCLASS wc;
	wc.style = CS_VREDRAW | CS_HREDRAW;             //窗口类的风格 就是横或竖改变就会重新绘制
	wc.lpfnWndProc = WindowProc;                    //窗口处理函数 此处是一个重点——
	wc.cbClsExtra = 0;                              //窗口类的附加内存
	wc.cbWndExtra = 0;                              //窗口附加的内存大小
	wc.hInstance = hInstance;                       //应用程序实例句柄 一定要给他赋值
	wc.hIcon = NULL;                                //图标句柄 没有填NULL
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);       //加载光标 鼠标放上去显示的箭头呀 I呀 
	wc.hbrBackground = CreateSolidBrush(RGB(255, 0, 0));//红绿蓝0->255 加载画刷 创建背景颜色
	wc.lpszMenuName = NULL;                         //菜单名
	wc.lpszClassName = L"ShaoChongMade";            //窗口类型名

	//设计窗口就是填充这个结构体

	//LoadCursor,可以加载自己做的第一个加句柄,也可以加载系统中的光标 第一个地方加NULL
	//2.注册窗口类
	//ATOM //=WORD=无符号短整型
	if (RegisterClass(&wc) == 0)
	{
		MessageBox(NULL, L"此窗口不能运行在Windows NT上", L"温馨提示", MB_OK);
	};//ATOM RegisterClassA(	const WNDCLASSA *lpWndClass		);
	//3.创建窗口 
	//W:Window S:Styles
	//这个函数会返回一个窗口句柄,如果失败就会返回NULL
	HWND hwnd=CreateWindow(szAppClassName, szWindowTitle, WS_BORDER | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX,200,100,200,100,NULL,NULL,hInstance,NULL);
	if (hwnd == NULL)
	{
		MessageBox(NULL, L"创建窗口失败", L"温馨提示", MB_OK);
		return 0;
	}
	//4.显示和更新窗口
	//SW_SHOW:在原来位置显示激活窗口
	//SW_MAXIMIZE: 最大化显示
	//SW_MINIMIZE:最小化显示 但是就看不到了
	//SW_NORMAL: 以正常尺寸显示
	ShowWindow(NULL,SW_SHOW);

	//5.消息循环
	return 0;
}
//HWND:指针类型
//LRESULT:long型 4个字符
//CALLBACK:_stdcall 函数参数的入栈方式,从右向左
//WindowProc: 窗口处理函数的函数名
//UINT:unsigned int 无符号整形
//WPARAM:unsigned int
//LPARAM:long
//但是这个窗口处理函数有一个固定的格式
	LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMse, WPARAM wParam, LPARAM lParam)
	{
		return DefWindowProc(hwnd, uMse, wParam, lParam);//DefWindowProc的返回值是LRESULT 
	};
/*1. WNDCLASS 实际上就是一个结构体
typedef struct tagWNDCLASSW {
	UINT        style;
	WNDPROC     lpfnWndProc;
	int         cbClsExtra;
	int         cbWndExtra;
	HINSTANCE   hInstance;
	HICON       hIcon;
	HCURSOR     hCursor;
	HBRUSH      hbrBackground;}
2.
	*/

更改图标

前面好像没有做好,后面运行出现了问题,就是在说我这个ico文件路径有问题。现在就来动手解决这个问题在这里插入图片描述
顺嘴一说 这个是做ico的软件
顺嘴说一下,这个是做ico的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
咋办呀,这个问题暂时还真的把我困住了,、
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
消息机制详解
就是应用程序能够感应人们在他上面的操作,操作系统感应到后,会向消息队列投递消息,然后应用程序会从队列里面一个一个的取出来消息并进行响应。形成了这样的一个循环,当收到关闭消息时,结束。
在这里插入图片描述
在这里插入图片描述
em 消息 em 附加消息 放在消息队列里的时间 坐标
终于出来框框了,原来是在这里插入图片描述

在这里插入图片描述

解决LINK : fatal error LNK1168: 无法打开 无法写入

LINK : fatal error LNK1168: 无法打开xxxxx 进行写入

遇到这种情况,一般是vs进行图片读写时上一次程序占用没有彻底关闭,
此时需要做的是 打开任务管理器,找到该进程,杀死他,再编译,就会发现编译通过。
以上就是解决方法,或许不单单是进行图片操作是出现,比如:mfc界面操作时也会遇到这种情况,解决方法统一。在后台进程中。

我好害怕呀,我现在对婚姻不是向往的感觉,而是害怕,有好多人进入了婚姻之后,尤其是有了孩子之后,就油盐酱醋的鸡毛小事多了起来,矛盾自然就多,虽然看半是蜜糖半是伤里面好像是全糖,但是我还是怎么说呢,等我真的遇到了一个心动的女的在说吧,啊,我也不知道我喜欢什么类型的,我发现在这一方面,我也不太了解我自己,虽然说,我们都是爸爸妈妈生出来的孩子,可是现代社会的生活越来越变得快起来,所以说这种,天天在一起的日子也真的挺那啥的,好害怕呀,真的好害怕,社会上黑暗的东西也特别多,有的东西一旦染上就完蛋了,我怕死了,可再怕也要前行啊,哎,真的当个人怎么这么难,我今年就已经20岁了,

在这里插入图片描述
算了,我付出了就想让人家回报,凭什么,那不是你自己心甘情愿的吗,你要是这样的话,那不就在逼人家说你别找我了,说不定我的这种也给人家造成困扰了呢,是吧,做事多多换位思考一下,如果说你真的想要拥有一个这样真心的好朋友,就不是说在人家好的时候咋咋,而是在他困难的时候帮助他,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

调试变量出现

在这里插入图片描述

在这里插入图片描述
先不搞那个蓝桥杯复习呢,他只是一场考试,光为了他也太那啥了,继续学习Windows,听从胡亚东的建议,我决定选成B组,哈哈哈,突然感觉压力小了很多,将来我有点想去四川,不想去上海,出差在上海还可以,天天在那里,就不开心了,
在这里插入图片描述
在这里插入图片描述

系统光标

在这里插入图片描述
在这里插入图片描述
笑死了。我说怎么一直找不到,那个下面要点成所有文件,
合理放置,我也可以把这个弄得折磨好看,方便。
在这里插入图片描述
今天这个Windows也算往前走了走,还弄了一个可爱光标,还有那个老师说让我手动输入检查,哎,我觉得这个sws是真的困住了我,那个自己手动输入的哎 也没报错 就是不出来 。不行,我得再把它输出来的超图 里面那一堆数字啥意思,搞清楚,
在这里插入图片描述

情况1

在这里插入图片描述
这种情况就是要关掉resource.h

Windows Message

在这里插入图片描述

lParam就是一个CREATESTRUCT结构体

在这里插入图片描述

WM_CLOSE

在这里插入图片描述

WM_DESTORY

在这里插入图片描述

在这里插入图片描述
还是要看一会,哎,这个输入输出 精读吗
在就是我现在明显更加愿意学习新知识,还是先赶紧学习Windows吧,说实话,否则除了这个时候,开学后没时间,时间是很少的,Windows后面还有qt,Linux,加油,人家教的东西真的挺好的,

最终程序

#include <Windows.h>//win32窗口应用必须要包含
#include"resource.h"
/*
1.入口函数WinMain 不能换名字
2.WINAPI:  __stdcall函数的调用约定 一个宏定义
  CALLBACK:__stdcall
  APIENTRY:__stdcall
  必须显示的加上,为啥C语言没有呢
因为C有默认的显示函数 __cdecl

3.//定义函数的入栈顺序;上述两种均为从右往左入栈
4.调用方和被调用方
A找B做一件事 A是调用方 B是被调用方
5.
//HINSTANCE:应用程序实例句柄类型  实质:结构体指针
#define DECLARE_HANDLE(name) 
struct name__
{
int unused;
}; 
typedef struct name__ *name
           hInstance:当前应用程序实例句柄 简单理解:(当前exe)
		   hPreInstance:当前应用程序的前一个实例句柄。但在32系统上已经废弃了,NULL 只是保持兼容,在16位系统上
//LPSTR=>char*        lpCmdLine 字符串 命令行参数
int 
nCmdShow 窗口的显示方式:最大化,最小化,隐藏
*/
//int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
//{
	//弹出一个窗口
	/*int MessageBox(
		HWND    hWnd,
		LPCTSTR lpText,
		LPCTSTR lpCaption,
		UINT    uType
		);

	//第一个参数 HWND hWnd  父窗口 NULL 就代表是一个独立的窗口
	//HWND: DECLARE_HANDLE(HWND); 公布处理 是一个宏定义 结构体
    #define DECLARE_HANDLE(HWND) 
	struct HWND__  窗口句柄=》窗口ID
	{
		int unused;
	};
	typedef struct HWND__ *HWND

	//第二个参数 要显示的文本 L=> 告诉编译器我使用Unicode编码
	//第三个参数 标题
	//第四个参数 MB_OK 翻译为确定 MB MessageBox的缩写

	
	*/
//	int 罗云熙=MessageBox(NULL, L"这是我的第一个win程序", L"加油", MB_CANCELTRYCONTINUE | MB_ICONEXCLAMATION);
//	if (IDCANCEL== 罗云熙)
//	{
//		MessageBox(NULL, L"点了是", L"提示", MB_OK);
//
//	}
//
//
//	return 0;
//}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMse, WPARAM wParam, LPARAM lParam);
	int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	
	//开发一个窗口
	wchar_t szAppClassName[] = L"ShaoChongMade";//宽字符,一个字符占两个字节
	wchar_t szWindowTitle[] =L"这是我的第一个窗口程序";

	/*1. WNDCLASS 实际上就是一个结构体
	typedef struct tagWNDCLASSW {
	UINT        style;
	WNDPROC     lpfnWndProc;
	int         cbClsExtra;
	int         cbWndExtra;
	HINSTANCE   hInstance;
	HICON       hIcon;
	HCURSOR     hCursor;
	HBRUSH      hbrBackground;}
	*/

	//1,设计窗口类
	WNDCLASS wc;
	wc.style = CS_VREDRAW | CS_HREDRAW;             //窗口类的风格 就是横或竖改变就会重新绘制
	wc.lpfnWndProc = WindowProc;                    //窗口处理函数 此处是一个重点——
	wc.cbClsExtra = 0;                              //窗口类的附加内存
	wc.cbWndExtra = 0;                              //窗口附加的内存大小
	wc.hInstance = hInstance;                       //应用程序实例句柄 一定要给他赋值
	wc.hIcon = /*NULL;*/LoadIcon(hInstance, MAKEINTRESOURCE(IDI_logo));                             //图标句柄 没有填NULL
	wc.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1));       //加载光标 鼠标放上去显示的箭头呀 I呀 
	wc.hbrBackground = CreateSolidBrush(RGB(25, 25, 25));//红绿蓝0->255 加载画刷 创建背景颜色 
	wc.lpszMenuName = NULL;                         //菜单名
	wc.lpszClassName = L"ShaoChongMade";            //窗口类型名

	//设计窗口就是填充这个结构体

	//LoadCursor,可以加载自己做的第一个加句柄,也可以加载系统中的光标 第一个地方加NULL
	//2.注册窗口类
	//ATOM //=WORD=无符号短整型
	if (RegisterClass(&wc) == 0)
	{
		MessageBox(NULL, L"此窗口不能运行在Windows NT上", L"温馨提示", MB_OK);
	};//ATOM RegisterClassA(	const WNDCLASSA *lpWndClass		);
	//3.创建窗口 
	//W:Window S:Styles
	//这个函数会返回一个窗口句柄,如果失败就会返回NULL
	HWND hwnd=CreateWindow(szAppClassName, szWindowTitle, WS_BORDER | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX,200,100,600,800,NULL,NULL,hInstance,NULL);
	if (hwnd == NULL)
	{
		MessageBox(NULL, L"创建窗口失败", L"温馨提示", MB_OK);
		return 0;
	}
	//4.显示和更新窗口
	//SW_SHOW:在原来位置显示激活窗口
	//SW_MAXIMIZE: 最大化显示
	//SW_MINIMIZE:最小化显示 但是就看不到了
	//SW_NORMAL: 以正常尺寸显示
	ShowWindow(hwnd,SW_SHOW);

	//5.消息循环
	//消息机制是Windows窗口应用程序中最重要的
	//不停的取出来消息,放在结构体Msg、
	//GetMessage返回值:取出正常消息不为0,取出WM_QUIT退出消息 返回0
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))//这个代表的就是全部取出
	{//键盘上面都是虚拟值 转化翻译 将虚拟值翻译成字符
		TranslateMessage(&msg);
		//然后 将翻译结果交给窗口处理函数去响应
		//将消息分发给窗口处理函数处理
		DispatchMessage(&msg);


	}

	
	return 0;
}
//HWND:指针类型
//LRESULT:long型 4个字符
//CALLBACK:_stdcall 函数参数的入栈方式,从右向左
//WindowProc: 窗口处理函数的函数名
//UINT:unsigned int 无符号整形
//WPARAM:unsigned int
//LPARAM:long
//LPSTR:char*
//LPCWSTR:CONST WCHAR*== const wchar_t*
//但是这个窗口处理函数有一个固定的格式
	LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMse, WPARAM wParam, LPARAM lParam)//发出信息时,会有附加信息在wParam和lParam里面

	{//我们要看进来这个函数多少次 来定义一个字符串数组
		//格式化
		wchar_t str[200];
		//sprintf
		wsprintf(str, L"hwnd=0x%x\tuMse=0x%x\twParam=%d\tlParam=%d\n",hwnd,uMse,wParam,lParam);
		OutputDebugString(str);//采用debug模式来输出到窗口上来
		//W:Windows  M:Message 
		switch (uMse)
		{
		case WM_CREATE://窗口创建消息 CreateWindow 或者 CreateWindowEx,这时主窗口已经显示好了,只是还没显示
		{//case里面定义花括号,否则容易出错
						   CREATESTRUCT *lpcs = (CREATESTRUCT*)lParam;
						   SetWindowText(hwnd, L"加油,绍冲,只要你问心无愧就好");//设置窗口标题栏
						   break;
		}
			//MessageBox(hwnd, L"这里创建了WM_CREATE消息", L"提示", MB_OK);
		case WM_CLOSE://窗口关闭消息 还可以还原,没有真正关闭
			//下面啥都没有 交给系统默认处理 系统响应WM_DESTORY
			
			if (IDYES == MessageBox(NULL, L"亲,关闭吗", L"温馨提示", MB_YESNO))
				DestroyWindow(hwnd);//摧毁这个句柄
			else
				ShowWindow(hwnd, SW_MAXIMIZE);
				return 1;//表示我已经自己处理了,不需要交给系统处理了
			break;
		case WM_DESTROY://发出窗口销毁信息 只要到了这里,代表窗口已经销毁,做一些清理操作
			ShowWindow(hwnd, SW_MAX);//关闭时 点是 也不会最大化,因为窗口已经销毁
			PostQuitMessage(0);//发送WM_QUIT消息 要退出去 就必须调用PostQuitMessage(0);
			break;
		}
		return DefWindowProc(hwnd, uMse, wParam, lParam);//DefWindowProc的返回值是LRESULT 
	}

在这里插入图片描述
在这里插入图片描述
long 是4个字节,一个字节8位 共32个字节,前16位解析出来存y,后16位解析出来存x。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
真是逗死了,终于变成了这个icon图案,点一点在上面显示坐标
在这里插入图片描述
笑死了。
在这里插入图片描述
哈哈,这几天真的是在家,不想学习,只想享受生活,唉呀妈呀,到时候就跟老师说一下因为快过年了,事情很多,也比较乱,没心学习,今天下载了抖音,哎呀,小雨和雄大真的是好可爱呀,看的我都忘记了时间的流动,我不染头发,到时候去做一个软化呀,哈哈哈,我以前头发那么段的时候就去做了一个软化,我决定要把头发留长,留的长的不得了去做软化,哈哈哈哈。还有就是把脸弄得干干净净的,哈哈哈。这几天也要过年了,给自己放放假把,话说Windows开始的这一个程序花了我不少时间。我也好想狠下心去旅游,我决定一个人去成都,哈哈哈,其他人算了吧,我已经决定了,攒攒钱,自己去成都,我决定不能受制于其他人,李志豪,李杰肯定不行。
在这里插入图片描述

case下面写if语句等要加{}

明明那个啥warnings 我写了,这个是因为没有带{}
在这里插入图片描述
气死了,忘了保存。

shift+tab 整体左移

常用鼠标消息

键盘消息

其他消息

在这里插入图片描述
在这里插入图片描述

FindWindow 关闭记事本 向别人发信息

两个参数 类型名 标题名
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
幸亏我保存了,天啊 上面有一个explorer.exe 我还以为是我打开的文件夹呢,快把我吓坏了,好像是下面的框框,emmm,不能关。反正发送信息关闭,也把后台清理了。

自定义消息

在这里插入图片描述

SendMessage(hwnd, UM_TEST, 10, 10);//模拟发送 自定义消息 ,wparam和lparam 自己解析定义

在这里插入图片描述

在这里插入图片描述

Sendmessage和Postmessage的区别

在这里插入图片描述
在这里插入图片描述
处理
在这里插入图片描述

定时器与时间处理

time函数包含头文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种带小星星的一定是写进去地址
在这里插入图片描述

tm

是一个结构体,年月日时分秒
还有,外国人的星期天是一个星期的开始,
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <Windows.h>//win32窗口应用必须要包含
#include"resource.h"
#define _CRT_SECURE_NO_WARNINGS
#define UM_TEST  WM_USER+1 //用户自定义信息
#include<time.h>
/*
1.入口函数WinMain 不能换名字
2.WINAPI:  __stdcall函数的调用约定 一个宏定义
  CALLBACK:__stdcall
  APIENTRY:__stdcall
  必须显示的加上,为啥C语言没有呢
因为C有默认的显示函数 __cdecl

3.//定义函数的入栈顺序;上述两种均为从右往左入栈
4.调用方和被调用方
A找B做一件事 A是调用方 B是被调用方
5.
//HINSTANCE:应用程序实例句柄类型  实质:结构体指针
#define DECLARE_HANDLE(name) 
struct name__
{
int unused;
}; 
typedef struct name__ *name
           hInstance:当前应用程序实例句柄 简单理解:(当前exe)
		   hPreInstance:当前应用程序的前一个实例句柄。但在32系统上已经废弃了,NULL 只是保持兼容,在16位系统上
//LPSTR=>char*        lpCmdLine 字符串 命令行参数
int 
nCmdShow 窗口的显示方式:最大化,最小化,隐藏
*/
//int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
//{
	//弹出一个窗口
	/*int MessageBox(
		HWND    hWnd,
		LPCTSTR lpText,
		LPCTSTR lpCaption,
		UINT    uType
		);

	//第一个参数 HWND hWnd  父窗口 NULL 就代表是一个独立的窗口
	//HWND: DECLARE_HANDLE(HWND); 公布处理 是一个宏定义 结构体
    #define DECLARE_HANDLE(HWND) 
	struct HWND__  窗口句柄=》窗口ID
	{
		int unused;
	};
	typedef struct HWND__ *HWND

	//第二个参数 要显示的文本 L=> 告诉编译器我使用Unicode编码
	//第三个参数 标题
	//第四个参数 MB_OK 翻译为确定 MB MessageBox的缩写

	
	*/
//	int 罗云熙=MessageBox(NULL, L"这是我的第一个win程序", L"加油", MB_CANCELTRYCONTINUE | MB_ICONEXCLAMATION);
//	if (IDCANCEL== 罗云熙)
//	{
//		MessageBox(NULL, L"点了是", L"提示", MB_OK);
//
//	}
//
//
//	return 0;
//}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMse, WPARAM wParam, LPARAM lParam);
	int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	
	//开发一个窗口
	wchar_t szAppClassName[] = L"ShaoChongMade";//宽字符,一个字符占两个字节
	wchar_t szWindowTitle[] =L"这是我的第一个窗口程序";

	/*1. WNDCLASS 实际上就是一个结构体
	typedef struct tagWNDCLASSW {
	UINT        style;
	WNDPROC     lpfnWndProc;
	int         cbClsExtra;
	int         cbWndExtra;
	HINSTANCE   hInstance;
	HICON       hIcon;
	HCURSOR     hCursor;
	HBRUSH      hbrBackground;}
	*/

	//1,设计窗口类
	WNDCLASS wc;
	wc.style = CS_VREDRAW | CS_HREDRAW|CS_DBLCLKS;             //窗口类的风格 就是横或竖改变就会重新绘制
	wc.lpfnWndProc = WindowProc;                    //窗口处理函数 此处是一个重点——
	wc.cbClsExtra = 0;                              //窗口类的附加内存
	wc.cbWndExtra = 0;                              //窗口附加的内存大小
	wc.hInstance = hInstance;                       //应用程序实例句柄 一定要给他赋值
	wc.hIcon = /*NULL;*/LoadIcon(hInstance, MAKEINTRESOURCE(IDI_logo));                             //图标句柄 没有填NULL
	wc.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1));       //加载光标 鼠标放上去显示的箭头呀 I呀 
	wc.hbrBackground = CreateSolidBrush(RGB(25, 25, 25));//红绿蓝0->255 加载画刷 创建背景颜色 
	wc.lpszMenuName = NULL;                         //菜单名
	wc.lpszClassName = L"ShaoChongMade";            //窗口类型名

	//设计窗口就是填充这个结构体

	//LoadCursor,可以加载自己做的第一个加句柄,也可以加载系统中的光标 第一个地方加NULL
	//2.注册窗口类
	//ATOM //=WORD=无符号短整型
	if (RegisterClass(&wc) == 0)
	{
		MessageBox(NULL, L"此窗口不能运行在Windows NT上", L"温馨提示", MB_OK);
	};//ATOM RegisterClassA(	const WNDCLASSA *lpWndClass		);
	//3.创建窗口 
	//W:Window S:Styles
	//这个函数会返回一个窗口句柄,如果失败就会返回NULL
	HWND hwnd=CreateWindow(szAppClassName, szWindowTitle, WS_BORDER | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX,200,100,600,800,NULL,NULL,hInstance,NULL);
	if (hwnd == NULL)
	{
		MessageBox(NULL, L"创建窗口失败", L"温馨提示", MB_OK);
		return 0;
	}
	//4.显示和更新窗口
	//SW_SHOW:在原来位置显示激活窗口
	//SW_MAXIMIZE: 最大化显示
	//SW_MINIMIZE:最小化显示 但是就看不到了
	//SW_NORMAL: 以正常尺寸显示
	ShowWindow(hwnd,SW_SHOW);

	UpdateWindow(hwnd);

	//5.消息循环
	//消息机制是Windows窗口应用程序中最重要的
	//不停的取出来消息,放在结构体Msg、
	//GetMessage返回值:取出正常消息不为0,取出WM_QUIT退出消息 返回0
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))//这个代表的就是全部取出
	{//将虚拟键消息转化成字符消息
		TranslateMessage(&msg);
		//然后 将翻译结果交给窗口处理函数去响应
		//将消息分发给窗口处理函数处理
		DispatchMessage(&msg);


	}

	
	return 0;
}
//HWND:指针类型
//LRESULT:long型 4个字符
//CALLBACK:_stdcall 函数参数的入栈方式,从右向左
//WindowProc: 窗口处理函数的函数名
//UINT:unsigned int 无符号整形
//WPARAM:unsigned int
//LPARAM,LRESULT:long
//LPSTR:char*
//LPCWSTR:CONST WCHAR*== const wchar_t*
//但是这个窗口处理函数有一个固定的格式
	LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMse, WPARAM wParam, LPARAM lParam)//发出信息时,会有附加信息在wParam和lParam里面

	{
		PAINTSTRUCT ps;//先定义一个绘图变量  绘图数据
		HDC hdc;//绘图句柄
		
		
		//我们要看进来这个函数多少次 来定义一个字符串数组
		//格式化
		wchar_t str[200];
		//sprintf
		wsprintf(str, L"hwnd=0x%x\tuMse=0x%x\twParam=%d\tlParam=%d\n",hwnd,uMse,wParam,lParam);
		OutputDebugString(str);//采用debug模式来输出到窗口上来
		//W:Windows  M:Message 下面这些WM的wParam 和lParam的作用和意义都一样
		
		switch (uMse)
		{
		case WM_CREATE://窗口创建消息 CreateWindow 或者 CreateWindowEx,这时主窗口已经显示好了,只是还没显示
		{//case里面定义花括号,否则容易出错
						   CREATESTRUCT *lpcs = (CREATESTRUCT*)lParam;
						   SetWindowText(hwnd, L"加油,绍冲,只要你问心无愧就好");//设置窗口标题栏

						   time_t t = time(NULL);
						   tm* pt = localtime(&t);
						   int nYear = pt->tm_year + 1900;//1900年开始
						   int nMonth = pt->tm_mon + 1;
						   int nDay = pt->tm_mday;
						   int nHour = pt->tm_hour;
						   int nMinute = pt->tm_min;
						   int nSec = pt->tm_sec;

						   wchar_t text[200];
						   wsprintf(text, L"当前时间:%d年%d月%d日  %d时%d分%d秒", nYear, nMonth, nDay, nHour, nMinute, nSec);
						   SetWindowText(hwnd, text);

						   SetTimer(hwnd, 1, 1000, NULL);
						   break;
		}
		case WM_LBUTTONDOWN://鼠标左键按下 在客户区点击 wParam:鼠标的点击状态 lParam:点击位置在客户区的坐标
		{
		这两个WORD可以将四个几节32位都解析出来,后一半LOWORD返回 前一半 HIWORD返回
		//int x = LOWORD(lParam);
		//int y = HIWORD(lParam);
		//wchar_t text[200];
		sprintf
		//wsprintf(text, L"坐标位置(%d,%d)",x,y);
		//if (wParam&MK_MBUTTON)
		//	wcscat(text, L"你在滚动滚轮哦");
		//if (wParam&MK_SHIFT)
		//	wcscat(text, L"按下了shift键"); 
		//if (wParam&MK_CONTROL)
		//	wcscat(text, L"親,😙 你按下了ctrl键");
		//	
		//SetWindowText(hwnd, text);
		发送一个按键消息,发了空格键

		模拟发送消息
		//SendMessage(hwnd, WM_KEYDOWN, VK_SPACE, 0);
		//PostMessage(hwnd, WM_KEYDOWN, VK_CONTROL, 0);
		//HWND hPhoto=FindWindow(L"CabinetWClass", L"此电脑");// 这个函数返回句柄
		//if (hPhoto == NULL)
		//{
		//	MessageBox(hwnd, L"sorry,没有找到您想要的句柄", L"提示", MB_OK);
		//}
		//SendMessage(hPhoto, WM_DESTROY, 0, 0);
								//SendMessage(hwnd, UM_TEST, 10, 10);//模拟发送 自定义消息 ,wparam和lparam 自己解析定义
		KillTimer(hwnd, 1);
								
		break;
		}
		case WM_TIMER://定时器消息
		{
		switch (wParam)
		{
		case 1:
			time_t t = time(NULL);
			tm* pt = localtime(&t);
			int nYear = pt->tm_year + 1900;//1900年开始
			int nMonth = pt->tm_mon + 1;
			int nDay = pt->tm_mday;
			int nHour = pt->tm_hour;
			int nMinute = pt->tm_min;
			int nSec = pt->tm_sec;

			wchar_t text[200];
			wsprintf(text, L"当前时间:%d年%d月%d日  %d时%d分%d秒", nYear, nMonth, nDay, nHour, nMinute, nSec);
			SetWindowText(hwnd, text);
			break;
		}
		}

		//case WM_LBUTTONDBLCLK://左键双击
		//	SetWindowText(hwnd, L"你双击了哦");
		//	break;
		case WM_LBUTTONUP://鼠标左键抬起
			//SetWindowText(hwnd, L"鼠标左键抬起了");
			break;
		case WM_RBUTTONDOWN:
			SetWindowText(hwnd, L"鼠标右键");
			break;
		//case WM_MOUSEMOVE://鼠标移动
		//{
		//					  int x = LOWORD(lParam);
		//					  int y = HIWORD(lParam);
		//					  wchar_t text[200];
		//					  //sprintf
		//					 
		//					  wsprintf(text, L"坐标位置(%d,%d)", x, y);
		//					  if (wParam&MK_MBUTTON)
		//						  wcscat(text, L"你在滚动滚轮哦");
		//					  if (wParam&MK_SHIFT)
		//						  wcscat(text, L"按下了shift键");
		//					  /*if (wParam&MK_CONTROL)
		//						  wcscat(text, L"親,😙 你按下了ctrl键");*/

		//					  SetWindowText(hwnd, text);
		//					  break;
		//}
		
			//MessageBox(hwnd, L"这里创建了WM_CREATE消息", L"提示", MB_OK);
		case WM_KEYDOWN://键盘按下 wParam储存虚拟键信息 lParam是32位,每一位都有特殊含义
			//SetWindowText(hwnd, L"您按下了键盘哦");
		{
							switch (wParam)
							{
							case VK_RETURN:
								MessageBox(hwnd, L"回车键",L"提示",MB_OK);
								break;
							case VK_F1:
								SetWindowText(hwnd, L"F1");
								break;
							case VK_ESCAPE://ESC键
								SetWindowText(hwnd, L"ESC键");
								break;
							case VK_TAB://TAB键
								SetWindowText(hwnd, L"TAB键");
								break;
							case VK_SPACE://空格键
								SetWindowText(hwnd, L"空格键");
								break;
							case VK_SHIFT://TAB键
								SetWindowText(hwnd, L"SHIFT键");
								break;
							case VK_DELETE://DELETE键
								SetWindowText(hwnd, L"DELETE键");
								break;
							//case VK_CONTROL://ctrl键
							//	SetWindowText(hwnd, L"ctrl键");
							//	break;
								//数字键
							case 0x30:
								MessageBox(hwnd, L"字母上面的0键", L"提示", MB_OK);
								break;
							case 0x41:
								MessageBox(hwnd, L"A键", L"提示", MB_OK);
								break; 
								
							case VK_NUMPAD0:
								MessageBox(hwnd, L"另一个地方的0键", L"提示", MB_OK);
								break;



							}
							break;
		}
		case WM_CHAR://字符消息 WM_KEYDOWN 和WM_KEYUP  把A=0x41 ASCLL值转换 TranslateMessage(&msg);
		{
						wchar_t text[200];
						//sprintf

						wsprintf(text, L"字符(%c)",(char)wParam);
						SetWindowText(hwnd, text);
		}
			break;
		case WM_PAINT://绘图 (先了解一下) 凡是定义变量的地方 打花括号
		{
						  //开始画图
						  hdc = BeginPaint(hwnd, &ps); //该语句成功运行返回一个绘图句柄 定义这样一个句柄

						  //绘制矩形
						  Rectangle(hdc, 100, 100, 300, 200);//分别是起点坐标和终点坐标
						  //绘制文字 
						  wchar_t str[] = L"欢迎你,我的朋友";
						  TextOut(hdc, 200, 200, str, wcslen(str));//左后是宽字符长度


						  //结束绘图
						  EndPaint(hwnd, &ps);
		}
			break;
		case UM_TEST:
		{
						MessageBox(hwnd, L"这里(⊙_⊙)? 自定义", L"hahahah", MB_OK);
						break;
		}
		case WM_CLOSE://窗口关闭消息 还可以还原,没有真正关闭
			//下面啥都没有 交给系统默认处理 系统响应WM_DESTORY
			
			if (IDYES == MessageBox(NULL, L"亲,关闭吗", L"温馨提示", MB_YESNO))`在这里插入代码片`
				DestroyWindow(hwnd);//摧毁这个句柄
			else
				ShowWindow(hwnd, SW_MAXIMIZE);
				return 1;//表示我已经自己处理了,不需要交给系统处理了
			break;
		case WM_DESTROY://发出窗口销毁信息 只要到了这里,代表窗口已经销毁,做一些清理操作
			ShowWindow(hwnd, SW_MAX);//关闭时 点是 也不会最大化,因为窗口已经销毁
			PostQuitMessage(0);//发送WM_QUIT消息 要退出去 就必须调用PostQuitMessage(0);
			break;
		}
		return DefWindowProc(hwnd, uMse, wParam, lParam);//DefWindowProc的返回值是LRESULT 
	}
	
	//UINT是32位 但实际范围用不了那么多  是65535
	//0->65535 是2的16次方
	//系统消息
	//0x0000->0x0400-1  0x0400=1024=2的10次方
	//自定义消息
	//WM_USER 0x0400 0x0401—>65535

	//发送消息的两个函数,能够发送系统消息,也能发送自定义消息
	//SendMessage:阻塞函数(等你处理完之后,才能处理下一个),有返回值
	//PostMessage:非阻塞函数,立刻马上,把这个消息送过去就返回
	//朝进程外发送,一般使用Postmessage
	

对方框

在这里插入图片描述
在这里插入图片描述
HINSTANCE 实质就是结构体指针
在这里插入图片描述

在这里插入图片描述
添加-》资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通用关闭语句

switch (uMsg)
	{
	case WM_CLOSE:
		DestroyWindow(hwndDlg);//销毁指定句柄
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
disabled
在这里插入图片描述
在这里插入图片描述
这里就可以一个一个的看到他门放置的地方。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这也太神奇了吧。
在这里插入图片描述
在这里插入图片描述

GetDlgItemText(hwndDlg, IDC_USENAME,szUsename,50);

获取文本控件
在这里插入图片描述
按Tab键可以换的,哈哈哈哈
在这里插入图片描述
Ctrl+D在这里插入图片描述
再次按Tab键变得正常

非模态对话框

就是你打开了这个框框,后面的内容也可以操作。
在这里插入图片描述
看看 我的聊天室做好了。
在这里插入图片描述

模态与非模态创建对比

在这里插入图片描述
在这里插入图片描述
弹出好多小框框。
在这里插入图片描述
测试
在这里插入图片描述

快速将控制台转换窗口

链接器–>系统–》子系统–》窗口
在这里插入图片描述

#include<Windows.h>
#include"resource.h"


//句柄:
//HINSTANCE:实例句柄 结构体指针
//HWND:窗口句柄  结构体指针
//HICON:图标句柄
//HCURSOR:光标句柄
//HDC:绘图句柄
//TCHAR= WCHAR=wchar_t 
HINSTANCE g_hinstance;//全局变量
BOOL CALLBACK AboutDialogproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

BOOL CALLBACK Dialogproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

BOOL CALLBACK MainDialog(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

BOOL CALLBACK UnMoDialog(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//模态对话框,阻塞,你打开他就不能点其他
	//由DialogBox函数来创建,由EndDialog来结束 EndDialog函数会返回nResult
	//非模态对话框,
	//由CreateDialog函数创建,DestroyWindow函数摧毁

	
	int nResult =DialogBox(hinstance, MAKEINTRESOURCE(IDD_REG_DIALOG), NULL, Dialogproc);
	if (nResult==IDOK)
	DialogBox(hinstance, MAKEINTRESOURCE(IDD_MAIN_DIG), NULL,MainDialog );
	
	return 0;
}
/*INT_PTR Dlgproc(
HWND Arg1,
UINT Arg2,
WPARAM Arg3,
LPARAM Arg4
)*/
/*
静态控件 IDC_STATIC*/
BOOL CALLBACK AboutDialogproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	int nID = LOWORD(wParam);
	switch (uMsg)
	{
	case WM_CLOSE:
		DestroyWindow(hwndDlg);
		break;
	case WM_DESTROY:
		EndDialog(hwndDlg, IDCANCEL);
		break;
	case WM_COMMAND:
		switch (nID)
		{
		case IDOK:
			SetWindowText(hwndDlg, L"now it's a new day");
			break;
		case IDCANCEL:
			EndDialog(hwndDlg, IDCANCEL);
		}
		

	}
	return FALSE;
}
BOOL CALLBACK Dialogproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_INITDIALOG://对话框初始化消息 类似WM_CREATE 对话框还没显示出来
	{
						   MessageBox(hwndDlg, L"您好,又是元气满满的一天呢", L"提示", MB_YESNO);
						   //设置窗口图标
						   HICON hLcon = LoadIcon(g_hinstance, MAKEINTRESOURCE(IDI_ICON2));
						   //发送消息
						   SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hLcon);
						   SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hLcon);
						   break;
	}
	case WM_DROPFILES://拖拽文件消息
	{
						  //查询拖拽文件的信息
						  //拖拽文件个数

						  int nCount = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
						  //查询拖拽文件的信息
						  for (int i = 0; i < nCount; i++)
						  {
							  TCHAR szFilePath[MAX_PATH];
							  DragQueryFile((HDROP)wParam, i, szFilePath, MAX_PATH);
							  MessageBox(hwndDlg, szFilePath, L"提示", MB_OK);

						  }
						  int n = 0;
						  MessageBox(hwndDlg, L"动起来了", L"炫酷小镇", MB_OK);
						  break;
	}
	case WM_COMMAND://命令消息, 管理按钮/控件,菜单栏点击,快捷键响应
		//定义变量 要加花括号
	{
						int nID = LOWORD(wParam);
						TCHAR szUsename[50];
						TCHAR szPassword[50];
						switch (nID)
						{
						case IDOK:
							//获取文本输入
							GetDlgItemText(hwndDlg, IDC_USENAME, szUsename, 50);
							GetDlgItemText(hwndDlg, IDC_PASSWORD, szPassword, 50);
							//判断
							if (wcscmp(szUsename, L"吴绍冲") == 0 && wcscmp(szPassword, L"123123") == 0)
							{
								MessageBox(hwndDlg, L"登录成功", L"提示", MB_OK);
								EndDialog(hwndDlg, IDOK);
								
							}
							else
							{
								MessageBox(hwndDlg, L"登录失败", L"提示", MB_OK);
								//输入错误清空
								SetDlgItemText(hwndDlg, IDC_PASSWORD, L"");
							}
							
							break;
						case IDCANCEL:
							EndDialog(hwndDlg, IDCANCEL);
							break;
						case IDC_BTN_ABOUT: //关于
							DialogBox(g_hinstance, MAKEINTRESOURCE(IDD_BTN_ABOUT), NULL, AboutDialogproc);
							break;
						}
						break;
	}
	case WM_CLOSE:
		EndDialog(hwndDlg, IDCANCEL);
	//	DestroyWindow(hwndDlg);//销毁指定句柄
	//	break;
	//case WM_DESTROY:
	//	/*1. PostQuitMessage(0);*/
	//	EndDialog(hwndDlg, IDOK);//模态对话框有两种关闭方式		
	//	break;
	}
	//return true;//表示我已经处理好了,不需要系统去处理
	return FALSE;//没有处理的消息,交给系统去处理
}
BOOL CALLBACK MainDialog(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	int nID = LOWORD(wParam);
	switch (uMsg)
	{
	case WM_CLOSE:
		DestroyWindow(hwndDlg);
		break;
	case WM_DESTROY:
		EndDialog(hwndDlg, IDCANCEL);
		break;
	case WM_COMMAND:
		switch (nID)
		{
		case IDOK:
			SetWindowText(hwndDlg, L"now it's a new day");
			break;
		case IDCANCEL:
			EndDialog(hwndDlg, IDCANCEL);
			return TRUE;
		case IDC_UNMODAL:
			HWND unmohwnd=CreateDialog(g_hinstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, UnMoDialog);
			ShowWindow(unmohwnd, SW_SHOW);
		}
	}

	return FALSE;
}
BOOL CALLBACK UnMoDialog(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	int nID = LOWORD(wParam);
	switch (uMsg)
	{
	case WM_CLOSE://EndDialog函数无法真正关闭非模态对话框,只是隐藏
		//真正关闭非模态对话框DestoryWindow函数
		DestroyWindow(hwndDlg);
		break;
	case WM_DESTROY:
		EndDialog(hwndDlg, IDCANCEL);
		break;
	}
	return FALSE;
}

MFC编程

MFC:Windows API ,许多C++类库(Microsoft foundational classes)
在这里插入图片描述
在这里插入图片描述
重复包含
在这里插入图片描述
在这里插入图片描述
基类构造器构造子类中的基类成员
在这里插入图片描述
在这里插入图片描述

HICON hIcon=::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));

在这里插入图片描述
动态库编译内存小
静态大
在这里插入图片描述
发布版会体积更小 debug调试版

MFC程序的图标等样式设置

//#include<Windows.h>
#include<afxwin.h>//MFC核心头文件
#include"resource.h"
//三部曲:
//1.建立CWinApp的派生类
//2.重写InitInstance虚函数 重载是参数类型和个数不同,但是名字相同
//3.定义CWinApp派生类的全局变量

//对话框窗口类
class CMyDialog :public CDialog
{
public:
	CMyDialog() :CDialog(IDD_MAIN_DLG)
	{

	}
	//对话框初始化函数//对应绑定消息是WM_INITDIALOG
	//对话框还没显示出来之前, 虚函数
	BOOL OnInitDialog()
	{//加载图标
	 //::代表全局函数 Windows API函数  返回句柄
		//HICON hIcon=::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));第一种方式
		 HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);//第二种方式 AfxGetApp()获得 theAPP的地址
	//设置图标
		SetIcon(hIcon, true);//大图标
		SetIcon(hIcon, FALSE);//小图标
		AfxMessageBox(L"你好呀,哈哈哈哈哈哈(* ̄︶ ̄)");
		SetWindowText(L"看这里,开始你神奇的旅程");
		return TRUE;
	}
};

//应用程序核心类
class CMyApp :public CWinApp
{public:
	//相当于WinMain函数,MFC程序入口
	//MFC初始化过程-启动管理
	virtual BOOL InitInstance()
	{
		//MessageBox(NULL, L"加油吧", L"提示", MB_OK);
		AfxMessageBox(L"MFC");
		CMyDialog dlg;//构造对象带模板
		dlg.DoModal();//弹出一个模态对话框
		return TRUE;//初始化成功
	}
	//退出函数,清理事物 类似析构函数
	int CMyApp::ExitInstance()
	{
		return CMyApp::ExitInstance();
	}

};
CMyApp theApp;//核心变量,应用程序对象,一个MFC应用程序中只能有一个应用程序对象

头文件保护
在这里插入图片描述
2021。2.21 暂停更新 转攻 数据与结构
在这里插入图片描述
好了,我决定重新开始,继续上个寒假的学习,学完这个Windows,哼,我看后面的是精华中的精华,加油。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在 我要做一个人事管理系统
1.登录入口
在这里插入图片描述
可是怎么让这个框框显示出来呢?? 添加类
在这里插入图片描述
关联这个对话框,可是却没有弹出。怎么弹呢
在这里插入图片描述
在这里插入图片描述
开心,成功弹出来了;哦,对了,周航已经自己做出来了卡尔曼滤波,我到现在都不是很清楚,下午一定要把他那个视频好好看看。是呀,网上的免费资源这么多,在这个知识大爆炸的时代,加油吧。

而且上面的那个还是先出来登录对话框,再出来主对话框,按顺序来,真的好神奇啊。也真的要感谢我的父母,花了5000,感谢赵凯,让我知道了这样的一个东西,我从大一下就开始学习,加油。

在这里插入图片描述
属性更改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2022年1月13日
哎呀,过得太快了,一下子就到了13号了,再想一下,那些朋友也只不过是生命过客,偶尔打架打篮球在一起罢了。啊啊啊,该咋办呢,现在我们这个社会时间也组好了,emmm,该干嘛干嘛好了,
我在这两个月主要工作任务是以下:
1.论文
2.锻炼身体,注意身体保养,哎,以前不太那啥,导致蛀牙,还有近视眼。以后要更加保护自己。
3.准备考研,把数学,英语做一下
4.社会实践,发展党员。

想一想,时光终究会过去,时间一分一秒的如沙漏办流失,无法挽回。想起那时朱自清的诗句,时间从耳朵边溜走,从脚边溜走,无法阻止。从前的高中,初中,小学,也再也回不去了,曾经的大一大二,大三上也再也回不去了,一切都是沿途的风景,已经过去了。而我只有珍惜当下,眺望未来,人生中可能会有一些很难熬的日子,但是只要心中充满爱和正能量,就不会过不去的,加油,绍冲,我能做的唯有相信自己的力量。加油。emmm,当初5000报的班也没有浪费,继续学,能学多少学多少。

我也问老师了,那个论文,也不清楚,就是反正这个方向可以做毕业论文和毕业设计。对于朋友呢,就会关心他人,但不过分亲昵。心存善念,亦要心存防人之心。言尽于此。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值