vs2022创建窗口应用程序

         打开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);//该函数是交给系统处理,默认返回
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的蛐蛐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值