打开vs2022,创建新项目,找到桌面向导,如图
创建一个新工程,选择控制台应用程序,选择空项目,创建即可完成。
控制台窗口实例
#include<Windows.h>
int WINAPI WinMain(
HINSTANCE hInstance, //当前应用程序实例句柄
HINSTANCE hPreInstance, //前一个应用程序实例句柄
LPSTR IpCmdLine, //命令行参数
int nCmdShow //窗口的显示方式,窗口是最大化显示、最小化显示、隐藏、正常显示
)
{
//第一个窗口应用程序
MessageBox(NULL, //HWND:窗口类型句柄,实际是一个结构体
L"hello world", //LPCTSTR:实际是wchar_t:宽字符类型,一个字符占用两个字节 消息框文本
L"第一个窗口应用程序", //消息提示框的标题
MB_OK);//有按钮和图标,按钮或图标都只能有一个
return 0;
}
代码说明
#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
//WINAPI:函数调用约定
//#define CALLBACK __stdcall
//#define WINAPI __stdcall
//#define APIPRIVATE __stdcall
//#define PASCAL __stdcall
//#define WINAPIV __cdecl //c语言中的默认调用约定:从右往左入栈
//HINSTANCE:应用程序实例句柄类型 本质上是一个宏定义,结构体指针类型
//DECLARE_HANDLE(HINSTANCE);
#define DECLARE_HANDLE(HINSTANCE) //这个被结构体替代
struct HINSTANCE__
{
int unused;
};
typedef struct HINSTANCE__* HINSTANCE;
//LPSTR:本质上是一个字符指针类型
typedef CHAR* NPSTR, * LPSTR, * PSTR;
//
//__stdcall:约定的参数入栈,从右往左
int WINAPI WinMain(
HINSTANCE hInstance, //当前应用程序实例句柄
HINSTANCE hPreInstance, //前一个应用程序实例句柄
LPSTR IpCmdLine, //命令行参数
int nCmdShow //窗口的显示方式,窗口是最大化显示、最小化显示、隐藏、正常显示
)
{
//第一个窗口应用程序
MessageBox(NULL, //HWND:窗口类型句柄,实际是一个结构体
L"hello world", //LPCTSTR:实际是wchar_t:宽字符类型,一个字符占用两个字节 消息框文本
L"第一个窗口应用程序", //消息提示框的标题
MB_OK);//有按钮和图标,按钮或图标都只能有一个
return 0;
}
窗口实例程序
#define _CRT_SECURE_NO_WARNINGS
# include<Windows.h>
//窗口处理函数
LRESULT CALLBACK WindowProc(HWND hwnd, //LRESULT:是long类型
UINT uMsg, //unsigned int
WPARAM wParam, //unsigned int
LPARAM lParam);//long
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
wchar_t szAppClassName[] = L"DkGuifoundation";
//实现第一个窗口应用程序
//1.设计窗口类
WNDCLASS wc; //窗口类
wc.style = CS_HREDRAW | CS_VREDRAW; //窗口类的风格
wc.lpfnWndProc = WindowProc; //窗口处理函数
wc.cbClsExtra = 0; //窗口类额外空间内存大小
wc.cbWndExtra = 0; //窗口额外空间内存大小
wc.hInstance = hInstance; //当前应用程序实例句柄
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //左上角的图标,LoadIcon加载系统图标
wc.hCursor = LoadCursor(NULL, IDC_ARROW); //加载鼠标光标
wc.hbrBackground = CreateSolidBrush(RGB(255, 255, 0));//加载画刷
wc.lpszMenuName = NULL; //菜单名
wc.lpszClassName = szAppClassName; //窗口类型名
//2.注册窗口类
if (RegisterClass(&wc) == FALSE)//该函数会返回一个bool值
{
MessageBox(NULL, L"此程序不能运行", L"温馨提示", MB_OK);
}
//3.创建窗口类
HWND hwnd = CreateWindow(//会返回一个窗口句柄
szAppClassName, //窗口类型名
L"第一个窗口应用程序", //窗口的标题
WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MAXIMIZEBOX | WS_MINIMIZEBOX, //窗口的风格
200, //窗口的横坐标
200, //窗口的纵坐标
800, //窗口的宽度
600, //窗口的高度
NULL, //父窗口句柄
NULL, //菜单句柄
hInstance, //当前应用程序实例句柄
NULL //附加参数
);
//4.显示窗口
ShowWindow(hwnd, SW_SHOW);//窗口显示函数
//输出信息
TextOut(hwnd, //窗口句柄
0 , //x轴坐标
0, //y轴坐标
"我是第一", //要输出的字符串
sizeof("我是第一") //输出字符串的长度
);
//5.更新窗口
UpdateWindow(hwnd);
//6.消息循环
MSG msg;
//参数2 指定窗口的句柄,也就是在该窗口上是可以获取到消息的
while (GetMessage(&msg, NULL, 0, 0))//该函数需要接收到 WM_QUIT 信号才会退出循环
{
//将虚拟化消息转换为字符消息
TranslateMessage(&msg);
//将消息分发给窗口处理函数处理
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, //LRESULT:是long类型
UINT uMsg, //unsigned int
WPARAM wParam, //unsigned int
LPARAM lParam)//long
{
switch (uMsg)
{
case WM_CREATE://窗口创建消息
//将窗口设置为顶层窗口
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
break;
case WM_CLOSE://窗口关闭消息
DestroyWindow(hwnd);
break;
case WM_DESTROY://窗口销毁消息
PostQuitMessage(0);//该函数会返回信号 WM_QUIT
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);//该函数是交给系统处理,默认返回
}