哎呀,当你太过松懈就看看,啊啊啊
成电通信研究方向
通信原理 信号与系统 数电 模电数字信号处理 数字图像处理 模式识别 信息论
客户区盖在非客户区的上面
我的第一个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的
咋办呀,这个问题暂时还真的把我困住了,、
消息机制详解
就是应用程序能够感应人们在他上面的操作,操作系统感应到后,会向消息队列投递消息,然后应用程序会从队列里面一个一个的取出来消息并进行响应。形成了这样的一个循环,当收到关闭消息时,结束。
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报的班也没有浪费,继续学,能学多少学多少。
我也问老师了,那个论文,也不清楚,就是反正这个方向可以做毕业论文和毕业设计。对于朋友呢,就会关心他人,但不过分亲昵。心存善念,亦要心存防人之心。言尽于此。