创建一个基本的win32窗口

这篇具有很好参考价值的文章主要介绍了创建一个基本的win32窗口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.建立一个窗口的基本步骤

(1)向系统注册一个窗体类
(2)根据窗体类创建窗口
(3)进入消息循环

创建一个基本的win32窗口,c++
创建一个基本的win32窗口,c++

2.程序结构

(1)主函数的输入参数

int WINAPI WinMain(
HISTANCE hInstance,//当前窗口的句柄
HINSTANCE hPrevInstance,//为了兼容早期的16位系统保留下来的,填NULL
LPSTR lpCmdLine, //传入的命令行参数
int nShowCmd//控制窗口如何显示)

(2) 窗口类

Typedef struct tagWNDCLASSA
{
UINT style;//设置窗口格式
WNDPROC lpfnWndProc;//窗口的回调函数,也就是窗口接收到消息后,交给哪个函数处理,,函数的功能一般是处理消息
Int cbClsExtra;//为类额外分配内存,一般为0
Int cbWndExtra;//为窗口额外分配内存,一般为0
HINSTANCE hInstance;//程序实例,这里就用到了WinMain函数的每一个参数hInstance
HICON hIcon;//设置程序图标
HCURSOR hCursor;//设置鼠标光标
HBRUSH hbrBackground;//设置界面背景色
LPCSTR lpszMenuName;//设置菜单名称(LPCSTR表示一个指向宽字符串的指针) 
LPCSTR lpszClassName;//设置类名称
}WNDCLASSA,*PWNDCLASSA,*NPWNDCLASSA,*LPWNDCLASSA;

(3) 回调函数文章来源地址https://www.toymoban.com/news/detail-726369.html

LRESULT CALLBACK WinSunProc(HWND hwnd, UINT uMsg,WPARAM wParam,LPARAM lParam)

3.核心机制:进入消循环

MSG msg;
While(GetMessage(&msg,NULL,0,0))//如果消息不是WM_QUIT,返回非零值;如果消息是WM_QUIT,返回零
{
TranslateMessage(&msg);//翻译消息,如果WM_KEYDOWN和WM_KEYUP翻译成一个WM_CHAR消息
DispatchMessage(&msg);//派发消息
}

4. 完整代码

#include<Windows.h>
LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch (uMsg)//通过判断消息进行消息响应
	{
	case WM_CLOSE:
		DestroyWindow(hwnd);//销毁窗口并发送WM_DESTROY消息,但是程序没有退出
		break;
	case WM_DESTROY:
		PostQuitMessage(0);//发出WM_QUIT消息,结束消息循环
		break;
	default:
		return DefWindowProc(hwnd, uMsg, wParam, lParam);//对不感兴趣的消息进行缺省处理,必须有该代码,否则程序有问题
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) {
	WNDCLASS wndcls; //创建一个窗体类
	wndcls.cbClsExtra = 0;//类的额外内存,默认为0即可
	wndcls.cbWndExtra = 0;//窗口的额外内存,默认为0即可
	wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//获取画刷句柄(将返回的HGDIOBJ进行强制类型转换)
	wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);//设置光标
	wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);//设置窗体左上角的图标
	wndcls.hInstance = hInstance;//设置窗体所属的应用程序实例
	wndcls.lpfnWndProc = WinSunProc;//设置窗体的回调函数,暂时没写,先设置为NULL,后面补上
	wndcls.lpszClassName = L"test";//设置窗体的类名
	wndcls.lpszMenuName = NULL;//设置窗体的菜单,没有,填NULL
	wndcls.style = CS_HREDRAW | CS_VREDRAW;//设置窗体风格为水平重画和垂直重画
	RegisterClass(&wndcls);//向操作系统注册窗体

	
	//产生一个窗体,并返回该窗体的句柄,第一个参数必须为要创建的窗体的类名,第二个参数为窗体标题名
	HWND hwnd = CreateWindow(L"test", L"我的第一个窗口",
		WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, hInstance, NULL);

	ShowWindow(hwnd, SW_SHOWNORMAL);//把窗体显示出来
	UpdateWindow(hwnd);//更新窗体

	MSG msg;
	//消息循环
	while (GetMessage(&msg, NULL, 0, 0))//如果消息不是WM_QUIT,返回非零值;如果消息是WM_QUIT,返回零
	{
		TranslateMessage(&msg);//翻译消息,如把WM_KEYDOWN和WM_KEYUP翻译成一个WM_CHAR消息
		DispatchMessage(&msg);//派发消息
	}
}

到了这里,关于创建一个基本的win32窗口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Visual Studio 2022如何创建Win32项目

    1.点击创建新项目,下滑找到 “Windows桌面向导” 。  2.点击 “Windows桌面向导” 之后,点击“下一步”,配置不动,一般都和下面图片一样,点击“创建”  3.应用程序类型要选择“桌面应用程序(.exe)”,并勾选“空项目”。 4.源文件里面新建项。 5.如果运行不出来就设置一

    2024年02月11日
    浏览(76)
  • 在Qt创建的UI中放一个显示点云的窗口(PCL+QT5)

    1、首先在 Qt Designer 创建UI后,拖一个Widget窗口出来 2、在对象查看器中右击该Widget,选择 提升窗口部件 ,如下操作: 3、把UI转出来放在VS项目中,其中你的UI代码头文件会自带QVTKOpenGLNativeWidget.h,当然你的VS属性环境得配置好VTK的环境,QVTKOpenGLNativeWidget.h在VTKincludevtk-9.1路径

    2024年02月08日
    浏览(48)
  • 在C++使用OpenCV库创建一个带滚动条的窗口,用于动态调整图像的亮度

    QuickDemo.cpp quick_opencv.h main.cpp

    2024年02月19日
    浏览(35)
  • vue(32) : win10创建vue2基础前端框架

    vue2 element-ui axios 含接口调用示例 开发工具为HBuilderX 3.7.3 等待创建项目 代理后端配置如下, 三个test改成相同的uri前缀即可, uri该签注会代理到后端 proxy: {       // 代理test开头的uri       \\\'/test\\\': {         target: \\\'http://192.168.1.1:8080\\\', // 后端地址         changeOrigin: true, // 开启代

    2024年02月06日
    浏览(39)
  • Open3D-GUI系列教程(一)创建一个Open3D应用窗口

    本人菜狗一枚,第一次写文章,python懂的也不多,肯定有很多表述存在问题,如有错误请大佬们不吝赐教。 整个open3d的gui我是照着源码里的示例和官方文档摸出来的,因为确实很少有关于这个的教程,官方也没给。所以我顺便整理分享一下。 Open3D官网 官方文档 open3d版本:

    2023年04月13日
    浏览(67)
  • [翻译] 使用FXGL创建一个非常基本的游戏

    首先,让我们为我们的简单游戏定义一些要求: 一个600x600的窗口。 屏幕上的玩家,由蓝色矩形表示。 可以通过按键盘上的W、S、A或D来移动玩家。 UI由一行文本表示。 当玩家移动时,UI文本会更新以显示玩家在其生命周期内移动了多少像素。 在本教程的最后,你可以获得这样

    2024年02月01日
    浏览(33)
  • 【STM32】STM32CubeMX创建第一个工程

    STM32CubeMX是STM32Cube工具家族中的一员,从MCU/MPU选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置,它给STM32开发者们提供了一种简单,方便,并且直观的方式来完成这些工作。所有的配置完成后,它还可以根据所选的IDE生成对应的工程和初始化

    2024年04月09日
    浏览(102)
  • 安卓手机APP开发使用Media3 ExoPlayer创建一个基本的播放app

    安卓手机APP开发使用Media3 ExoPlayer创建一个基本的播放app 目录 概述  现在开始 创建一个媒体播放器 创建一个ExoPlayer 准备播放器 控制播放器 释放播放器 管理回放使用一个媒体会话 创建一个媒体会话 给其它的客户端的授权 在后台上播放媒体

    2024年04月11日
    浏览(42)
  • 【STM32】使用RTE ,从 0 开始创建一个 (keil) ARM MDK工程(纯keil,标准库,以STM32F103C8T6为例)

    学习相关的基础知识请阅读本专栏其他文章,一定有你想要的。 https://blog.csdn.net/weixin_43764974/category_11021363.html 本文软硬件: STM32F103C8T6 ARM MDK 5.38 ARM complier 6 ST-Link v2 StdPeriph Drivers(标准库) 文章开始前,我想再次说一下: keil 、 μvision 、 ARM MDK 这几个名词(尽管前面的额文

    2024年02月16日
    浏览(97)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包