windows创建窗口

2023-05-16

windows创建窗口

  • CreateWindowW创建窗口句柄
  • 窗口可以调节尺寸以及移动
  • 完整代码
  • 窗口的效果
  • 创建指定画面大小,不包含窗口栏尺寸且无法调整尺寸的窗口
  • 思考

一般来讲,要绘制或者渲染目标物体首先需要创建窗口,通常需要配合渲染API(opengl directx 等)来实现。这边主要介绍的是windows上最基本的窗口创建方式,抛弃MFC等内部创建调用的方式,通过最底层的调用来实现窗口的创建

CreateWindowW创建窗口句柄

窗口创建主要是获取窗口句柄

HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"D", WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);

窗口可以调节尺寸以及移动

MSG msg;
		while (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
		{
			::TranslateMessage(&msg);
			::DispatchMessage(&msg);
		}
		if (bDone)
		{
			break;
		}

完整代码

#include <windows.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_DESTROY:    // 窗口销毁消息
	{
		PostQuitMessage(0);   //  发送退出消息
	}
	break;
	}
	// 其他的消息调用缺省的消息处理程序
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
int main()
{

	WNDCLASSEXW wc = { sizeof(wc), CS_CLASSDC, WindowProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"Example", NULL };
	::RegisterClassExW(&wc);
	HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"D", WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);

	::ShowWindow(hwnd, SW_SHOWDEFAULT);
	::UpdateWindow(hwnd);
	bool bDone = false;
	while (true)
	{
		MSG msg;
		while (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
		{
			::TranslateMessage(&msg);
			::DispatchMessage(&msg);
		}
		if (bDone)
		{
			break;
		}
	}
	return 0;
}

窗口的效果

由于什么操作都没有做,得到的窗口是一个全白带有窗口最小化最大化关闭的界面
在这里插入图片描述

创建指定画面大小,不包含窗口栏尺寸且无法调整尺寸的窗口

//窗口尺寸无法修改
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
WNDCLASSEXW stAvmWndClass = { sizeof(stAvmWndClass), CS_CLASSDC, WindowProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"AVM", NULL };
::RegisterClassExW(&stAvmWndClass);
    RECT stWindowRect = { 0,0,g_nWidth,g_nHeight };
    AdjustWindowRect(&stWindowRect, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, FALSE);//调节窗口尺寸,设置WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX窗口尺寸无法修改
    int nWindowActuralWidth = stWindowRect.right- stWindowRect.left;
    int nWindowActuralHeight = stWindowRect.bottom - stWindowRect.top;
    HWND pHwndAVM = ::CreateWindowW(stAvmWndClass.lpszClassName, L"AVM", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 100, 100, nWindowActuralWidth, nWindowActuralHeight, NULL, NULL, stAvmWndClass.hInstance, NULL);
    ::ShowWindow(pHwndAVM, SW_SHOWDEFAULT);
    ::UpdateWindow(pHwndAVM);
在这里插入代码片

思考

在linux是否有hwnd句柄这一概念,linux上的窗口界面怎么创建显式渲染画面呢?
linux上使用X11实现窗口的创建,一般结合glx或者egl来实现中间层的构建
XMapWindow 函数可以让一个已经创建但是还没有显示出来的窗口在屏幕上可见,作用于Windows上的ShowWindow类似

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows创建窗口 的相关文章

  • MFC Check-box与Button结合

    在MFC中经常需要一个按钮能够实现多种功能 xff0c 这个时候可以考虑通过Check box的勾选操作来与其配合实现目标效果 首先在对话框里添加Check box xff0c 并且修改Check box的ID 双击添加好的Check bo
  • MFC+Opencv以图拼图

    MFC 43 Opencv拼图 MFC对话框添加按钮图片准备Opencv配置代码实现 本篇文章主要通过将一系列图片作为拼图的基础 xff0c 实现目标图形的拼图 xff0c 我们先给个结果图可以更直观了解生成的结果是如何的 MFC对话框添加
  • 判断点集与多边形的位置关系

    判断点集与多边形的位置关系 点集与凸多边形点集与一般性多边形 点集与凸多边形 点集或者是点与多边形位置关系无非就三种 点在多边形的内部点在多边形的外部点在多边形上 一般如果该多边形是凸的那么我们可以直接用面积法或者向量法来解决位置关系 xf
  • 模型轮廓提取

    模型轮廓提取 模型边界 孔洞 xff09 识别算法 对于三角网格模型 xff0c 如果存在某一条边只属于一个三角面片 xff0c 那么这个边为模型边界 xff0c 称这条边为模型的边界边 如果一条边同时属于两个三角形 xff0c 则为内部边
  • Opencv推荐学习网站

    中文学习网站网址 xff1a http www opencv org cn http wiki opencv org cn index php E9 A6 96 E9 A1 B5
  • 摄像头动态捕捉小程序

    Opencv摄像头实时捕捉小程序 驱动摄像头加入Canny边缘检测加入Sobel边缘检测 先上一个好玩的动图看看结果 xff1a 驱动摄像头 首先先驱动摄像头 实现的代码如下 xff1a span class token macro pro
  • Opencv图像美颜滤镜

    图像美颜 span class token keyword void span span class token function BeautyFace span span class token punctuation span span
  • Simplify3D打印参数设置

    Simplify3D打印参数设置 关键是打印进程的设定 xff0c 这边以TPU为例子 xff0c 其他材料可以查阅相关参数进行喷头温度 xff0c 打印速度的修改 xff0c 其他的基本一致 设置完成后进行模型切片 xff0c 完成后点击
  • CSDN如何转载一篇博客呢

    看到一篇挺好的文章想要转载怎么做呢 xff1f 方法一 xff1a 傻瓜式复制 不推荐 方法二 后台操作 推荐 方法一 xff1a 傻瓜式复制 不推荐 一个个图文抠 xff0c 效率低下 xff0c 且版面格式会发生变化 方法二 后台操作
  • Exchange 2013升级以及域名绑定等若干问题

    环境简介 Exchange 2013服务器位于ad域中 xff0c 系统为Windows server 2012 R2 xff0c 其内部域名为 xff1a mail ad com 一 Exchange客户端无法在浏览器中正常运行 在域中部
  • 无线攻击 --Wifite(批量破解无线工具)

    文章目录 一 用法概述二 命令格式三 用法示例3 1 破解某个AP 一 用法概述 Wifite使用命令行界面连续攻击多个WPA WPS加密的网络 xff0c 不需要记住参数即可使用它 xff1a 按信号强度排序 xff08 db单位 xff
  • 图像轮廓提取算法(Opencv基于C++实现)

    Opencv图像轮廓提取 0 实现结果如下 xff1a 1 打开图像代码2 轮廓提取函数3 代码实现 本文主要实现了图像的轮廓提取 xff0c 首先先给出直观的轮廓实现结果 xff1a 0 实现结果如下 xff1a 1 打开图像代码 注意图
  • c++实现2048小游戏

    C 43 43 实现2048 2048小游戏界面展示效果图 xff1a span class token macro property span class token directive hash span span class toke
  • OpenGL深度测试

    OpenGL深度测试 1 深度缓冲 Depth Buffer 2 深度缓冲实现3 深度测试函数测试对比4 深度冲突 Z fighting 1 深度缓冲 Depth Buffer 深度缓冲是由窗口系统自动创建的 xff0c 它会以16 24或
  • OpenGL渲染STL三角网格模型

    Opengl绘制STL模型 实现效果STL模型文件实现代码 实现效果 首先先看看使用可编程管线实现的STL模型的渲染效果 xff0c 网格模型的数量大约在100来万 xff0c 实现的效果还是挺鲁棒 STL模型文件 关于STL的文件格式主要
  • Opengl同时显示模型和三角网格线框

    Opengl同时显示模型和三角网格线框 glPolygonMode 函数及相关参数同时显示模型和三角网格线框 glPolygonMode 函数及相关参数 glPolygonMode 参数1 参数2 参数1 可以为 xff1a GL FRON
  • Shader Language编程语言(CG/HLSL/GLSL)

    Shader Language编程语言 Shader Language编程语言 Shader Language编程语言 Shader Language目前主要有3种主流语言 xff1a 基于 OpenGL 的 OpenGL Shading
  • D3D12编译遇到的问题

    D3D12编译遇到的问题 X3501 39 main 39 entrypoint not foundLNK2019 无法解析的外部符号 main xff0c 函数 34 int cdecl invoke main void 34 invok
  • VS2019CPU/内存诊断功能

    VS2019诊断功能 vs代码内存 CPU使用率诊断内存泄漏诊断 vs代码内存 CPU使用率诊断 在代码运行过程中 xff0c 有时候会出现内存泄漏 xff0c 内存 CPU占用过高等情况 xff0c 这些情况的出现十分影响代码的运行效率和
  • C++和Python Java的区别

    C 43 43 和Python Java的区别 C 43 43 执行效率高 xff0c 编程难 开发效率低 Python执行效率低 xff0c 编程简单 开发效率快 C 43 43 为编译性编程语言 xff0c Python 则为解释性编程

随机推荐

  • 实时渲染和离线渲染

    实时渲染和离线渲染 1 实时渲染2 离线渲染3 对比 1 实时渲染 实时渲染指的是一边计算画面 xff0c 一边输出显示 特点是 xff1a 能实时操控 实时交互 xff0c 并且以极高的速度将3D图像处理了 xff0c 同时实现了逼真的效
  • Linux中crontab的坑爹环境变量问题

    手动在CentOS中执行sh脚本 xff0c 调用java程序 xff0c 一切正常 xff1b 将该sh加入crontab中定时调度之后 xff0c 挂了 xff0c 完全没有执行到的感觉啊 xff01 xff01 xff01 查看cro
  • Win32窗口

    Win32窗口 span class token comment windows 开发所需头文件 包含Windows开发所需要的宏 类 函数 结构体等结构的定义 span span class token macro property sp
  • MFC按钮禁用实现

    MFC按钮禁用 m Bn xxx span class token punctuation span span class token function EnableWindow span span class token punctuat
  • MFC屏幕截图

    屏幕截图 实现屏幕截图 xff0c 并保存多张图片 截图的效果 span class token keyword void span span class token class name CMFCApplication1Dlg span
  • obj模型文件的格式

    obj模型的格式 带纹理的obj模型mtl材质文件推荐参考库文件tiny obj loaderassimp 带纹理的obj模型 一般带纹理的obj模型需要有以下三个文件 xff0c 分别是 obj文件 xff0c mtl纹理库文件 xff0
  • n维顶点模板类

    span class token keyword template span span class token operator lt span span class token keyword int span nD span class
  • MFC鼠标移入移出操作

    MFC鼠标移入移出 span class token keyword void span span class token class name CMFCApplication3Dlg span span class token doubl
  • 目标物体缩放方法

    目标物体缩放方法 1 移动相机位置改变视场角 1 移动相机位置 最容易想到的方法是通过改变相机的位置 xff0c 将相机靠近或者远离目标物体从而实现物体大小的放大或者缩小 如下图所示 xff1a 改变视场角 视场角FOV xff08 Fie
  • gamma校正

    伽玛校正 xff08 Gamma Correction xff09 校正的目的输入转至线性空间输出前进行校正衰减 校正的目的 保证所有的输入都转换到线性空间 xff0c 并在线性空间下做各种光照计算 xff08 线性空间进行操作 xff09
  • d3d11释放问题

    d3d11释放问题 释放过程中遇到明明已经调用release xff08 xff09 但是内存却没有下降 xff0c 后来查看了其计数器n发现其不为0 xff0c 也就是没释放干净 xff0c 只是内部引用数减1 span class to
  • imgui显示中文

    imgui显示中文 首先先加载中文字体 span class token comment Load Fonts span io span class token punctuation span Fonts span class token
  • serialVersionUID作用

    原文出处 xff1a 未知 Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的 在进行反序列化时 xff0c JVM会把传来的字节流中的serialVersionUID与本地相应实体 xff08 类
  • linux命令与makefile学习

    linux命令与makefile学习 文件权限通配符 常用命令查看CPU 内存占用makefilegcc与g 43 43 区别 xff1a Linux上有一句话 xff1a 一切皆文件 普通文件 目录文件 d xff08 directory
  • VS在输出窗口显示信息

    输出窗口的信息传给函数 xff0c 函数内部调用系统函数OutputDebugString xff0c 就可以把调试信息打印到输出窗口 span class token keyword void span span class token
  • 使用 nlohmann 解析 json 文件

    使用 nlohmann 解析 json 文件 nlohmann json的配置json基本数据结构json文件的读取 构造与输出C 43 43 对象与nlohmann json对象的转换C 43 43 对象转换成nlohmann json对
  • ImGui实现Button高亮

    ImGui实现Button高亮 记录下在ImGui中实现Button高亮的操作 xff0c 跟着官方demo走没看到具体的实现方式 xff0c 想着渲染是不断进行的 xff0c 让下一帧绘制上次选择的状态 结果如下 xff1a 部分代码 s
  • HLSL笔记

    常量缓冲区 Constant Buffer 常量缓冲区允许C 43 43 端将数据传递给HLSL中使用 xff0c 在HLSL端 xff0c 这些传递过来的数据不可更改 xff0c 因而是常量 常量缓冲区对这种使用方式有所优化 xff0c
  • opengl shader实现Bezier曲线

    opengl shader实现Bezier曲线 顶点着色器片段着色器向shader传递数据 顶点着色器 span class token keyword const span span class token keyword char sp
  • windows创建窗口

    windows创建窗口 CreateWindowW创建窗口句柄窗口可以调节尺寸以及移动完整代码窗口的效果创建指定画面大小 xff0c 不包含窗口栏尺寸且无法调整尺寸的窗口思考 一般来讲 xff0c 要绘制或者渲染目标物体首先需要创建窗口 x