既然要使用C++写DX,那么就了解一些C++进行Windows SDK编程的常识吧~

EUI-NEO-DX11:基于DirectX 11的高性能C++ GUI开发框架实战指南 在Windows桌面应用开发中,DirectX 11作为微软的多媒体编程接口,凭借其强大的图形性能和硬件访问能力,成为高性能图形应用的核心技术。其原理在于通过底层API直接调用GPU进行硬件加速渲染,为游戏、数据可视化、实时监控等场景提供极致图形性能。然而,原生DX11 API缺乏高级UI控件,开发图形用户界面(GUI)需要处理大量底层渲染细节,开发效率低下。EUI-NEO-DX11框架通过将EUI的UI逻辑层与DX11渲染层结合,实现了高性能图形渲染与高效GUI开发的统一。该框架采用非官方分支形式,为需要 阅读详情

*****************************************************
 Windows SDK编程之一  窗口示例程序
******************************************************/

/*Win32应用程序框架主要由"初始化窗口类","窗口注册类","窗口的创建"以"窗口消息函数"等组成*/
#include "stdafx.h"


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);  //窗口函数说明

/*
  WinMain函数是所有windows应用程序的入口,类似于C语言中的Main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。消息循环是整个程序运行的核心。WinMain函数实现以下功能。
  1. 注册窗口类,建立窗口及执行其它必要的初始化工作;
  2. 进入消息循环,根据从应用程序消息队列接受的消息,调用相应的处理过程
  3. 当消息循环检索到WM_QUIT消息时终止程序运行。

  WinMain函数有三个基本的组成部份:函数说明、初始化和消息循环。

 WinMain函数的说明如下:
 int WINAPI WinMain(  //WinMain函数说明
             HINSTANCE hInstance, //程序当前实例句柄       
             HINSTANCE hPrevInstance,  //应用程序其它实例句柄
             LPSTR     lpCmdLine, //指向程序命令行参数的指针
             int   nCmdShow  //应用程序开始执行时窗口显示方式的整数值标识
)
      由于Window操作系统是多任务的操作系统,能进行多任务的管理,因此,windows应用程序可能被并行的多次执行,因而可能出现同一个程序的多个窗口同时存在的情况,Windows系统将应用程序每一次执行称为该应用程序的一个实例(Instance),并用一个实例句柄唯一的标识它。

*/
int APIENTRY WinMain(HINSTANCE hInstance,           //WinMain函数说明
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
 /*
 建议采用Pascal的变量定义风格,即在程序(函数)开始处定义所有变量
 虽然C++的变量定义比较灵活,本程序为了使程序易于理解,未采用这种方法
 */
   
 char lpszClassName[]="窗口";       //窗口类名
 char lpszTitle[]="Windows SDK编程之一  窗口示例程序";   //窗口标题名

 //---------------窗口类定义-------------------------------------
 /*
 窗口类的定义
    在Windows应用程序中,窗口害定义了窗口的形式与功能。窗口类定义通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包括窗口类的各种属性,在窗口类定义过程中常用到以下函数:
 */
 WNDCLASS wndclass;
 wndclass.style=0;                                              //窗口类型为缺省类型
 wndclass.lpfnWndProc=WndProc;                                  //窗口处理函数为WndProc
 wndclass.cbClsExtra=0;                                         //窗口类无扩展
 wndclass.cbWndExtra=0;                                         //窗口实例无扩展
 wndclass.hInstance=hInstance;                                  //当前实例句柄
 
 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);                 //使用缺省图标
 /*
  LoadIcon():在应用程序中加载一个窗口图标
     LoadIcon()函数原型为:
             HICON LoadIcon(
                   HINSTANCE hInstance,//图标资源所在的模块句柄,为NULL则使用系统预定义图标
                   LPCTSTR lpIconName //图标资源名或系统预定义图标标识名
             )
 */


 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);                   //窗口采用箭头光标
    /*
 LoadCursor():在应用程序中加载一个窗口光标
    LoadCursor()函数原型为:
             HCURSOR LoadCursor(
                     HINSTANCE hInstance,//光标资源所在的模块句柄,为NULL则使用系统预定义光标
                     LPCTSTR lpCursorName //光标资源名或系统预定义光标标识名
             )
 */

 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);    //窗口背景为白色
 /*
  GetStockObject():获取已经定义的画笔、画刷、字体等对象的句柄
     GetStockObject()函数原型为:
                   HGDIOBJ GetStockObject(int fnObject); //fnObject为对象的标识名

 */

 wndclass.lpszMenuName=NULL;                                    //窗口中无菜单
 wndclass.lpszClassName=lpszClassName;                          //窗口类名为'窗口实例'

 //------------------以下是进行窗口类的注册---------------------------
 
 /*
    注册窗口类
    Windows系统本身提供部份预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由注册函数RegisterClass()实现。其形式为:
    RegisterClass(&wndclass)
   &wndclass为窗口类结构
      RegisterClass函数的返回值为布尔值,注册成功则返回真
 */
 if (! RegisterClass(&wndclass))     //注册窗口,若失败,则发出声音
 { MessageBeep(0);
   return FALSE;
 }
   
 /*
 创建窗口实例
 创建一个窗口类的实例由函数CreateWindow()实现,该函数的原型为:
    HWND  CreateWindow(LPCTSTR lpszClassName,             //创建窗口,窗口类名
             LPCTSTR lpszTitle,                     //窗口实例的标题名
             DWORD dwStyle,           //窗口的风格
             int x,   //窗口左上角坐标
       int y,   //窗口左上角坐标
             int nWidth,   //窗口的宽度
       int nHeight,   //窗口的高度
               HWND hwndParent,           //此窗口父窗口
             HWENU hMenu,          //此窗口主菜单
                HINSTANCE hInstance, //应用程序当前句柄
             LPVOID lpParam);        //指向一个传递给窗口的参数值的指针
 */
 
 //创建窗口操作
 HWND hwnd; //窗口结构
    hwnd=CreateWindow(lpszClassName,   //创建窗口,窗口类名
  lpszTitle,                     //窗口实例的标题名
  WS_OVERLAPPEDWINDOW,           //窗口的风格
  CW_USEDEFAULT,CW_USEDEFAULT,   //窗口左上角坐标为缺省值
  CW_USEDEFAULT,CW_USEDEFAULT,   //窗口的高度和宽度为缺省值
  NULL,                          //此窗口无父窗口
  NULL,                          //此窗口无主菜单
  hInstance,                     //应用程序当前句柄
  NULL);                         //不使用该值

 ShowWindow(hwnd,nCmdShow);         //显示窗口

 UpdateWindow(hwnd);                //绘制用户区
 

    /*
  消息循环
  windows应用程序的运行以消息为核心。windows将产生的消息放入应用程序的消息队列中而应用程序WinMain函数的消息循环提取消息队列中的消息,并将其传递给窗口函数为相应处理过程处理。
    MSG msg; //消息结构

 while( GetMessage(&msg,NULL,0,0))  //消息循环
 { TranslateMessage(&msg);
   DispatchMessage(&msg);
 }
 */

 MSG msg; //消息结构
  /*GetMessage()作用:从消息队列中读取一条消息,并将消息放在一个MSG结构中:
   BOOL GetMessage(        
        LPMSG lpMsg,  //指向MSG结构的指针
        HWND hWnd,
        UINT wMsgFilterMin, //用于消息过滤的最小信息号值
        UINT wMsgFilterMax //用于消息过滤的最大信息号值 如最小值和最大值均为0, 则不过滤消息
   );
  当GetMessage返回0时,即检索到WM_QUIT消息,程序将结束循环并退出

 BOOL TranslateMessage(  const MSG *lpMsg );  负责把消息的虚拟键值转换为字符信息
 LRESULT DispatchMessage( const MSG *lpmsg  ); 将参数lpmsg指向的消息传递给指定的窗口

  */
 while( GetMessage(&msg,NULL,0,0))  //消息循环
 { TranslateMessage(&msg);
   DispatchMessage(&msg);
 }

 return msg.wParam;                //程序终止时,将信息返回操作系统
}


//-----------------------------窗口函数---------------------------------------
/*
窗口消息处理函数定义了应用程序对接收到的不同消息的响应,它包含了应用程序对各种可用接收到的消息的处理过程,通常 ,窗口函数由一个或多个switch...case语句组成,每一条case语句
对应一种消息,当应用程序接收到一个消息时,相应的case语句被 激活并执行相应的响应程序模块。
窗口函数的一般形式如下:
 LRESULT CALLBACK WindowProc(          HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);
Parameters

hwnd :[in] Handle to the window.
uMsg :[in] Specifies the message.
wParam:[in] Specifies additional message information. The contents of this parameter depend on the value of the uMsg parameter.
lParam:[in] Specifies additional message information. The contents of this parameter depend on the value of the uMsg parameter.
Return Value 
The return value is the result of the message processing and depends on the message sent.

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  switch (message)
  {
  case ...
      ....
   break;
   .........
  case WM_DESTROY:
     //void PostQuitMessage(int nExitCode)函数的作用是向程序发送WM_QUIT消息,nExitCode应用程序退出代码
      PostQuitMessage(0); //调用该函数发出WM_QUIT消息
  default: //缺省消息处理函数,以保证所的发往窗口的消息都能被处理
   return DefWindowProc(hwnd,message,wParam,lParam);
  }

  return (0);
}

*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  switch (message)
  {
  case WM_DESTROY:
    PostQuitMessage(0); //调用该函数发出WM_QUIT消息
  default: //缺省消息处理函数
   return DefWindowProc(hwnd,message,wParam,lParam);
  }

  return (0);
}
/*
注:
  事件驱动的特点:
  Windows程序设计围绕着事件或消息的产生驱动产生运行消息处理函数。Windows程序的执行顺序取决于事件发生的顺序,程序的执行是由顺序产生的消息驱动的,程序员可以针对消息类型编写消息处理程序以处理接收的消息,或者发出其他消息以驱动其他处理程序,但是不必预先确定消息的产生顺序。这是面向对象编程中事件驱动的显著特点。
  事件驱动编程方法对于编写交互程序很有用处,用这一方法编写的程序使程序避免了死板的操作模式,从而使用户能够按照自己的意愿采用灵活多变的操作模式。
  Windows应用程序中的消息传递机制:
  VC中存在几种系统定义的消息分类,常用的消息由窗口消息、初始化消息、输入消息、系统消息、剪切板消息、文当界面消息、DDE(动态数据交换)消息、应用程序自定义消息等。应用程序发送的消息发送至消息队列,系统根据消息到达的顺序对消息进行处理,并调用响应的消息处理模块代码。
*/

C++高性能GUI框架EUI-NEO-DX11:基于DirectX 11的轻量级桌面应用开发指南 在桌面应用开发领域,GUI框架是连接用户交互与底层系统的关键组件。其核心原理在于将用户输入事件转化为可视化界面元素,并通过图形API进行渲染。对于追求极致性能与原生体验的C++开发者而言,传统的重量级框架或底层API往往在开发效率与控制粒度之间难以平衡。EUI-NEO-DX11这一技术方案,正是针对此痛点而生。它基于DirectX 11图形管线,提供了接近游戏引擎级别的渲染控制力,使得开发者能够实现流畅动画、复杂自定义绘制等高要求视觉效果。其技术价值在于,在保留传统保留模式架构、符合桌面应用开发思维习惯的同 阅读详情

相关推荐

Kinect for Windows SDK v2.0 开发笔记 (十八) Fusion 基本2D显示

使用SDK2.0, 显示Kinect基本Fusion图像, 进行场景即时重建

dustpg的专栏 1万+

Windows SDK编程之一 窗口示例程序

/***************************************************** Windows SDK编程之一  窗口示例程序******************************************************//*Win32应用程序框架主要由"初始化窗口类","窗口注册类","窗口的创建"以"窗口消息函数"等组成*/#include "s

布衣坊 2225

现代DirectX 11开发指南:从Windows SDK到项目实战

在计算机图形学与游戏开发领域,图形API是实现硬件加速渲染的核心接口,它定义了应用程序与GPU之间的通信协议。DirectX作为微软主导的API标准,其原理在于通过一系列组件(如Direct3D、Direct2D)管理图形、声音和输入设备,为Windows平台提供高性能的多媒体支持。掌握现代DirectX开发技术,对于构建高性能游戏、仿真及图形应用具有重要价值,尤其在PC游戏、工业设计可视化等场景中应用广泛。随着技术演进,开发方式也从独立的DirectX SDK转向了集成于Windows SDK的现代工作流

weixin_33898233的博客 310

windows sdk 的c语言,Windows程序设计(c语言) 第1章 SDK入门(示例代码)

一、学习背景现在我们要学的是Windows32的编程,与DOS不同的是,实现的目标是一个具有你所需要的功能的“窗口”。这个“窗口”时时刻刻都在与操作系统之间,通过一个称之为“消息队列”的东西传送数据。因此处理好各种消息便成了Win32编程的核心。SDK编程是相对于MFC来说的,也就是用C和C++来调用WindowsAPI,API是操作系统的东西,其他语言(如VB)也可以调用。因此,以前也有人将这种...

weixin_30750349的博客 1022

windows sdk 编程例题

windows sdk 编程例题.rar

windows+SDK编程入门介绍

windows+SDK编程入门介绍

windows SDK编程简单总结

CreateToolhelp32Snapshot <TlHelp32.h>这个头文件,有CreateToolhelp32Snapshot这个api 这个api的第一个参数是个宏,有的可以查看的是所有进程,有的是查看该进程的所有模块。 HANDLE WINAPI CreateToolhelp32Snapshot( DWORDdwFlags, DWORDth32ProcessID); 第二个是Pid,如果填0就是所有的。 但注意 只是一瞬间的快照。 TH32CS_SNAPH...

u013677637的博客 1865

点击进行图片切换、自动切换

点击进行图片切换、自动切换

从零开始掌握DirectX11图形编程:Windows SDK实战完全指南

DirectX11图形编程是Windows平台3D应用开发的核心技能,而DirectX11-With-Windows-SDK项目提供了一个完整的现代DX11系列教程,使用Windows SDK(C++)开发Direct3D 11.x应用。无论你是图形编程新手还是有经验的开发者,这个项目都能帮助你系统性地掌握DirectX11的核心技术。 ## 🎯 为什么选择DirectX11进行Windows

gitblog_00495的博客 1075

小甲鱼 WindowsSDK编程学习笔记

本pdf是根据小甲鱼《WindowsSDK编程》视频教程做的笔记,很详细,大家可以下载使用,节省大家做笔记时间!

Windows下MediaSDK 参考例子

MediaSDK使用参考代码,包括编码解码转码等等,VC工程。

DirectX11终极指南:Windows SDK图形编程完整教程

DirectX11-With-Windows-SDK是一个专为图形编程学习者和游戏开发者设计的开源项目,提供从基础到高级的完整DirectX11教程体系。该项目采用现代C++和Windows SDK开发,帮助开发者快速掌握3D图形渲染核心技术。无论你是初学者还是有一定经验的开发者,都能从中获得实用的编程知识和最佳实践。 ## 🚀 3分钟快速配置开发环境 想要开始学习DirectX11图形编程

gitblog_00239的博客 757

Win32 application API资源1——图标(ICON)并有两个资源有例子

这里有两个程序,一个是来自经典的《programming windows》,它展示了图标(icon)资源的建立与应用,第二程序,我在第一个程序基础稍作修改,建立了两个图标(icon)资源,在程序运行,单击鼠标,就会看到图标资源的转换。

Jasna VR180 修复:分眼与投影全自动,只需选对一个模型

Jasna 是一款视频修复工具,它的 **VR180 修复**能力是一条全自动流水线:把并排(Side-by-Side)画面拆成左眼、右眼,各自独立完成马赛克检测与修复,最后拼回完整宽屏输出。你只需把模式留在自动、选对检测模型,全程不需要写任何配置。 ## 直接修 3840×1920 的 VR 视频,会先踩什么坑 VR180 画面本质是左右眼两幅画面并排拼在一张宽屏里:3840×1920 中左

gitblog_00294的博客 1099

实战指南:基于华为Ascend NPU的大模型W8A8量化调优与精度提升

本文提供了一份基于华为Ascend NPU进行大模型W8A8量化的实战调优指南。详细介绍了从环境搭建、使用msmodelslim框架进行基础量化,到通过离群值抑制、校准集优化和量化回退等关键技术提升精度的全流程。旨在帮助开发者在华为NPU硬件上实现模型推理的显著加速,同时有效控制精度损失。

weixin_29227425的博客 271

Multisim 14.0元件库下载权威指南:官方与社区资源

详解Multisim元件库下载的官方途径与可靠社区资源,帮助用户快速获取Multisim 14.0所需元件模型,提升电路仿真效率。

weixin_32925455的博客 747

Directx11学习笔记【十四】 使用最新的Effect框架和SDK

Directx11学习笔记【十四】 使用最新的Effect框架和SDK 原文:Directx11学习笔记【十四】 使用最新的Effect框架和SDK  由于之前一直在看directx11龙书学习,因此sdk一直用的Microsoft DirectX SDK (June 2010)版本,最近在stackoverflow上问dx11相关问题时,一...

weixin_30419799的博客 684

【UE5】映射方式:动作映射(Action Mappings) 与 轴映射(Axis Mappings)

链接:https://pan.baidu.com/s/1nQHvZXC4BDsfbFWDYZqEfA?按下键盘A键,不要抬起,屏幕左上角打印了一次。(和Unity中的轴映射机制类似)下面我们通过测试更直观的了解一下这。抬起键盘A键,屏幕左上角打印了一次。项目资源文末百度网盘自取。再添加一个按键,选择键盘。键,缩放值设置为 2.0。,框选所有测试节点,按下。的情况下,屏幕一直打印。

weixin_64072619的博客 3500

[dx12显示图片] ImGui Learn Data Day 3

调试心得:相对路径陷阱与编译期/运行期的区别,以及如何显示图片

我博客园地址:https://www.cnblogs.com/Reisentyan 1287

uniapp中renderjs实战:手把手教你实现SSE即时通讯(附完整代码)

本文通过一个完整的实战案例,详细讲解了如何在uni-app中使用RenderJS实现SSE即时通讯功能。文章剖析了RenderJS作为Vue视图层强力补充的原理,并提供了包含自动重连、状态管理等健壮性设计的完整代码,帮助开发者突破框架限制,高效集成浏览器原生API。

weixin_29005499的博客 189

ESP32设备驱动-VCNL4040趋近传感器

VCNL4040 将趋近传感器 (PS)、环境光传感器 (ALS) 和高功率 IRED 集成到一个小型封装中。它通过CMOS工艺将光电二极管、放大器和模数转换电路集成到一个芯片中。

视觉与物联智能 939

从零开始掌握DirectX11图形编程的完整指南:使用Windows SDK开发3D应用

DirectX11-With-Windows-SDK是一套现代DX11系列教程,专为希望使用Windows SDK(C++)开发Direct3D 11.x应用的开发者设计。本指南将带你逐步探索这个强大的图形编程框架,从基础概念到高级渲染技术,让你快速掌握3D图形开发的核心技能。 ## 🚀 为什么选择DirectX11进行图形开发? DirectX11作为微软推出的图形API,在Windows

gitblog_00146的博客 1003

基于NRF52833芯片的DW3000 SPI驱动接口代码实现

详细介绍基于NRF52833、nRF52820 、nRF52832 nRF52840 芯片的DW3000 硬件驱动接口代码

DT程序员的博客 1217

【亲测免费】 DirectX11-With-Windows-SDK 项目教程

DirectX11-With-Windows-SDK 是一个开源项目,旨在帮助开发者学习和使用 DirectX 11 进行图形编程。该项目提供了详细的教程和示例代码,涵盖了从基础到高级的各种主题。教程内容包括纹理映射、采样器状态、混合状态、曲面细分、阴影贴图等,适合不同层次的开发者学习和参考。 ## 项目快速启动 ### 环境配置 1. **安装 Visual Studio**:确保你已经安...

gitblog_00837的博客 1168

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

a_zxswer的博客 381

【Unity】【WebRTC】如何用Unity而不是浏览器接收远程画面

之前几篇我们讨论了如何设置信令服务器,如何发送画面给远端以及如何用浏览器查看同步画面,今天来讨论如何实现Unity内部接收画面。看本篇之前请先看过之前将web服务器设置和基本远程画面功能的几篇博文。在Unity编辑器中打开一个示例项目,点击BroadCast按钮。4. 再点击Receiver按钮,Start。Build一个示例项目,并运行这个项目。启动Web.app。

每日出拳老爷子的博客 1721
上一篇: 终极防御指南之DDOS攻击
下一篇: DirectX 图形接口指南
冰蓝2099
博客等级 码龄24年 18粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值