Windows SDK编程初探

Windows SDK 7.1 (包含directshow)安装配置 最近一直在做毕业设计的事情,需要利用directshow进行视频开发,但是现在单独的directshow包已经没有了,从directx9.0c开始directshow和directx分开发布,现在的directshow已经集成到windows SDK当中了。 本文就是关于winSDK 的安装以及碰到的问题的解决方法! 阅读详情

 

Windows SDK编程初探

 

  要点:程序的主函数,消息处理函数

 

      Windows程序具有相对稳定的结构,也就是说Windows程序是有一定的框架的,程序员要做的事情就是用特定的内容来填充这个框架。

 

主函数:就像C语言时程序的主函数main()的功能是一样的,他代表了程序的入口。但是这个函数看上去比main()似乎繁的多,如果是第一次看见这个函数肯定会感觉一头雾水,但是不要紧我们来看看这个函数各个参数的意义,(其实开始的时候完全可以不理会他们的意义)hInstance是本实例的句柄,句柄可以理解为操作系统管理使用我们的应用程序的别名,它跟指针类似但又不同于指针,操作系统通过hInstance就可以找到我们现在的这个程序。hPrevInstance是前一个实例的句柄。

 

szCmdLine:是命令行参数,iCmdShow是窗口的显示方式。现在我们没有必要清除每个参数的具体意义,在接下来的学习中我们用的最多的就是hInstance这个参数,但也不多,而且我们使用vc++时,无论有哪种程序生成方式这个函数一般都会自动生成。

 

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)

 

 

 

消息处理函数其实是一个消息循环,是一个回调函数,什么是回调函数暂不管它,只管理解为,函数由你定义而不归你调用,是由操作系统来调用的

 

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

 

{

 

   switch(message)

 

      {

 

         case...

 

         case...//这些分支语句用来分别处理不同的消息

 

      }

 

return DefWindowProc(hwnd,message,wParam,lParam);

 

/*这个函数是系统默认的消息处理函数,也就是说,我们的窗口程序的消息处理函数处理的只是我们感兴趣的消息,即上面的case语句,对于其他的消息我们还是使用系统默认的消息处理函数。我们的消息处理函数是要在我们的窗口主程序中登记的,登记为我们自定义的消息处理函数之后,系统的消息就有它来处理了。所以,在本函数的最后要使用该默认函数,否则其他的消息,本程序就无法处理了。

 

 

继续来看程序的主函数,它是程序的容器,程序的主窗体要在其中建立,程序的消息处理函数也要在其中设置。在主体函数中我们要做的就是两件事,一件是注册窗口类,另外一件是建立窗口。所谓注册窗口类就是通过填写一个WNDCLASS结构,我们的窗口就算基本成型,然后要向系统注册。

 

客户需要自己建立窗口,建立后会得到系统返回的窗口句柄(HWND),后继的针对窗口的操作都针对句柄进行。

  1.
注册窗口类
  建立窗口前,需要制定好这个窗口的相关属性,最主要的就是将自己定义的消息处理函数与窗口关联,其他的属性还包括:菜单、图标等等。
  这个属性指定步骤是通过指定"窗口类"来完成的。
  
对于自己建立的窗口,这个"窗口类"需要自己制定,也即自己填充一个WNDCLASS结构,然后向系统注册。
  对于一些特殊窗口,如按钮等控件,他们的行为是系统制定好了的,所以不需要自己注册,直接使用对应的“窗口类”名称就行了。
  2.建立窗口
  建立窗口时,注册的"窗口类"名称作为参数传入。
  这样,当有针对该窗口的消息时,将调用“窗口类”中指定的消息处理函数,在其中得到处理。

 

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//消息处理函数的声明,定义放在主函数后面

 

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)

 

{

 

   static TCHAR szAppName[]=TEXT("Hello");//注册的窗口类的名称,此处为"Hello"

 

   WNDCLASS wndclass;//定义了一个窗口类

 

   wndclass.style=CS_HREDRAW|CS_VREDRAW;

 

   wndclass.lpfnWndProc=WndProc;//此处关联了定义的消息处理函数

 

   wndclass.cbClsExtra=0;

 

   wndclass.cbWndExtra=0;

 

   wndclass.hInstance=hInstance;//实例句柄

 

   wndclass.hIcon=NULL;//窗口的图标,我们这里不设置

 

   wndclass.hCursor=LoadCursor(NULL,IDC_ARROR);//设置光标

 

   wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//画刷

 

   wndclass.lpszMenuName=NULL;

 

   wndclass.lpszClassName=szAppName;//类名称

 

   if(!RegisterClass(&wndclass))//注册窗口

 

      {

 

         MessageBox(NULL,TEXT("窗口注册失败"),szAppName,MB_ICONERROR);

 

         return 0;

 

      }

 

   //下面开始建立窗口

 

   HWND hwnd;

 

   hwnd=CreateWindow(szAppName,TEXT("The Hello Program"),

 

                                       CW_OVERLAPPEDWINDOW,

 

                                       CW_USEDEFAULT,

 

                                        CW_USEDEFAULT,

 

                                       CW_USEDEFAULT,

 

                                       CW_USEDEFAULT,

 

                                       NULL,

 

                                       hInstance,

 

                                       NULL);

 

   ShowWindow(hwnd,iCmdShow);

 

   UpdateWindow(hwnd);

 

//接下来是消息循环,程序不断的从消息队列中取消息,让消息处理函数处理

 

   while(GetMessage(&msg,NULL,0,0))

 

   {

 

      TranslateMessage(&msg);

 

      DispatchMessage(&msg);

 

   }

 

   return msg.wParam;

 

}

 

//消息处理函数定义

 

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM)//此例子中我们只是处理简单的消息

 

{

 

   switch(message)

 

   {

 

      case WM_DESTROY:

 

            PostQuitMessage(0);

 

            return 0;

 

   }

 

   return ::DefWindowProc(hwnd,message,wParam,lParam);

 

}

 

 

WINMAIN()

 

{

 

申明一个窗口类;

 

注册该窗口类;

 

生成一个窗口;

 

消息循环;

 

}

 

WINPROC()

 

{

 

针对不同的消息做不同的处理;//switch case default

 

}

 

――――――――――――――――――――――――――――――――

 

消息结构如下:

 

typedef struct tagMSG

 

{

 

       HWND     hwnd ;

 

       UINT       message ;

 

       WPARAM        wParam ;

 

       LPARAM        lParam ;

 

       DWORD        time ;

 

       POINT  pt ;

 

}

 

MSG, * PMSG ;

 

。。。。hwnd 接收讯息的视窗代号。在HELLOWIN程式中,这一参数与CreateWindow传回的hwnd值相同,因为这是该程式拥有的唯一视窗。

 

。。。。message 讯息识别字。这是一个数值,用以标识讯息。对於每个讯息,均有一个对应的识别字,这些识别字定义於Windows表头档案(其中大多数在WINUSER.H中),以字首WM(「window message」,视窗讯息)开头。例如,使用者将滑鼠游标放在HELLOWIN显示区域之内,并按下滑鼠左按钮,Windows就在讯息伫列中放入一个讯息,该讯息的message栏位等於WM_LBUTTONDOWN。这是一个常数,其值为0x0201。

 

。。。。wParam 一个32位元的「message parameter(讯息参数)」,其含义和数值根据讯息的不同而不同。

 

。。。。lParam 一个32位元的讯息参数,其值与讯息有关。

 

。。。。time 讯息放入讯息伫列中的时间。

 

。。。。pt 讯息放入讯息伫列时的滑鼠座标。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SDK第一课(Windows SDK编程入门) SDK (Software Development Kit) 软件开发工具包 Windows应用接口程序接口(API)(应用程序<--------->操作系统<--------->输出输入设备) A:API(Application Programming Interface,应用编程接口) B:内核对象(用户模式和内核模式权限级别) 内核:M0到M3 用户:M0和M3(最... 阅读详情

相关推荐

MFC编程与SDK编程

添加的脚本是指框架; MFC AppWizard(exe)  MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,C环境是面向过程的不支持MFC,MFC只封装在C++里,MFC无法在C环境中使用 ,是一套面向对象的函数库,MFC采用面向对象设计,将大部分的Windows API封装到C++类中,以类的方式提供给用

假装狠牛逼 6725

windows sdk debug

windows 自带调试工具

weixin_44284128的博客 1426

Windows SDK编程系列文章

在Windows操作系统中,消息机制是应用程序与系统之间通信的核心。消息是一条包含信息的记录,它通知程序某个事件已经发生。典型的事件包括鼠标点击、按键、系统定时器到期等。消息由系统定义的常量标识,例如WM_PAINT表示需要重绘窗口客户区,WM_KEYDOWN表示有键被按下。消息可以分为以下几类:- 系统消息:由操作系统内部产生,如窗口创建、销毁、尺寸改变等。- 输入消息:由用户的键盘或鼠标操作产生,如按键、鼠标移动。- 定时器消息:由系统定时器产生,用于周期性的事件处理。

weixin_35935514的博客 748

Qt安装Windows调试器

Qt安装Windows调试器 问题:Win10下使用Qt无法调试,这是因为没有指定调试器。 解决方法: 1. 打开网址:https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk,选择“下载安装程序”,下载“winsdksetup.exe”; 2. 打开“winsdksetup.exe”,按下述步骤操作: ...

《好好先生》专栏 2891

Windows SDK API编程实战源码教程

应用程序编程接口(API)是一组预定义的函数、协议和工具,旨在允许应用程序与特定的软件或硬件交互。在Windows操作系统中,Win32 API是一系列广泛使用的C语言接口,这些接口使得开发者能够编写可以利用Windows系统功能的应用程序。Win32 API 提供了对操作系统的底层访问,从简单的文件操作到复杂的系统控制,无所不包。Win32 API 主要服务于系统级编程,这需要对操作系统的工作原理有深入的理解。

weixin_30598047的博客 918

Qt 调试工具 winsdksetup

Qt 遇到缺失调试工具时,可下载该安装包文件,直接安装,安装完再次启动Qt,到构建环境中就会自动出现可选的调试工具

2021/8/5 WindowsSDK编程学习笔记

在b站上看小甲鱼的课学WindowsSDK编程。SDK应该是Software Development Kit,是软件开发包,是用Windows操作系统提供的API来编程的。API是Application Program Interface。 在WinMain中使用了各种函数。消息循环接收信息,翻译分发消息。到WndProc里。WndProc里是我们写的这个窗口的消息驱动过程。标识这个窗口通过窗口句柄。操作系统也是通过句柄调用我们的WinProc,从而完成响应。 ...

czd 228

winsdksetup使用说明.txt

Windows10 VS2017 可能会用到17763SDK 工程文件会有此行:<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> 附件资源里面有exe使用说明。

windows的sdk编程

<br /> 请问高手,windows的sdk编程是指什么的,说sdk是一个工具包,那么vc是不是windows的sdk啊,即用vc编程序是不是叫做windows的sdk编程啊? 问题补充:那请问如果我现在想学windows API 编程的话,用哪个工具啊, 是怎么样编的,是不是要一种编程作为载体,比如说用c++来编写程序,然后在程序中调用windows API函数的才叫做windows API 编程啊?提问者: buywell - 二级最佳答案什么是Windows SDK SDK即sof

xuanxiaoala的专栏 1003

生物信息学工具链搭建:用conda一键搞定MCScanX所有依赖(Ubuntu20.04实测)

本文详细介绍了在Ubuntu20.04系统上使用conda一键部署MCScanX及其所有依赖的高效方法,解决了传统源码编译安装中的依赖冲突问题。通过conda环境管理工具,研究者可以快速搭建生物信息学工具链,实现基因组共线性分析的高效运行,显著提升研究效率。

backprop5master的博客 247

WPS JS宏实战:批量调整200个Word表格格式的避坑指南(附完整代码)

本文提供了一份详尽的WPS JS宏实战指南,针对批量调整大量Word表格格式的需求。文章深入解析了如何利用JS宏自动化设置字体、行距和边框,并重点解决了常见的“首行访问报错”等核心难题,附有可直接使用的完整代码,帮助用户显著提升文档处理效率。

weixin_29280219的博客 430

【第14节】windows sdk编程:进程与线程介绍

方法1在屏幕底部的任务栏上右击鼠标,从弹出的快捷菜单中选择“任务管理器”,随后任务管理器窗口将会打开,您便可以在其中浏览当前运行的进程。方法2点击开始菜单,在搜索栏中输入“cmd”并打开命令提示符,然后在命令提示符中输入“tasklist”命令来查看当前运行的进程。方法3在命令提示符中,首先键入“wmic”并按下回车,接着输入“process”来查看进程信息。

攻城狮7号的博客 2052

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3174

网络编程 初探windows编程

Windows 网络编程入门,了解一下基本的win32编程,环境搭建,句柄,窗口类,windows消息机制等内容

qq_61553520的博客 2809

VS2019 从零构建 OSG+OSGEarth+OSGQt 开发环境实战指南

本文提供了一份详细的实战指南,指导开发者如何在Windows系统下使用VS2019从零开始编译和配置OSG、OSGEarth与OSGQt开发环境。文章涵盖了从环境准备、源码获取、CMake配置、Visual Studio编译到最终测试的完整流程,并分享了关键的避坑技巧,旨在帮助三维GIS与可视化开发者高效搭建稳定、可控的专业开发平台。

weixin_28826961的博客 367

Linux SMP系统多核启动机制详解

对称多处理(SMP)是现代操作系统支持多核并行计算的基础架构。其核心原理是通过引导处理器(BSP)初始化系统环境后,通过处理器间中断(IPI)机制唤醒应用处理器(AP)。在x86架构中,AP启动时处于实模式,需要特殊的trampoline代码完成保护模式切换和分页设置。这种设计既保证了系统初始化的正确性,又实现了多核并行处理的性能优势。理解SMP启动流程对优化系统启动速度和调试多核问题至关重要,特别是在云计算和嵌入式系统中,高效的SMP初始化能显著提升系统响应能力。本文以Linux内核为例,深入解析了从BS

weixin_35006125的博客 291

Platform SDK、Windows SDK简介

Platform SDK、Windows SDK简介 由于经常游离于多个WINDOWS版本之间,复习一下内容和一些历史渊源 转载自 https://www.cnblogs.com/kekec/p/3912148.html(可可西-Platform SDK、Windows SDK简介) Platform SDK及Windows SDK是由微软公司出品的一个软件开发包,向在微软的Windows操作...

苏围墙的博客 5891

MATLAB2022b安装

图文并茂,手把手教会你怎么安装MATLAB2022b

1万+

【第四节】windows sdk编程:windows 中的窗口

窗口是Windows应用程序的核心组成部分,理解窗口的概念、风格、层次结构以及Z-Order顺序,对于开发复杂的Windows应用程序至关重要。通过合理使用窗口的标准风格和扩展风格,开发者可以创建出功能丰富、界面美观的应用程序。

攻城狮7号的博客 1288

SeaTunnel 实战:Apache SeaTunnel Web 安装与部署

复制引擎服务中配置文件到 Web 配置目录下面。就是上述 application.yml 文件中配置的端口号。默认是从 mvvm 下载,可能下载速度很慢,我这边安装了 Maven 并且配置了阿里云仓库,因此将脚本中的。如果环境变量有冲突需要改下环境变量的名字以及 init_sql.sh 中的环境变量的名字,可以加上前缀。初始化数据库有两种方式,一是使用官方提供的初始化脚本,二是直接运行初始化 SQL。初始化数据库的脚本,使用之前需要修改。

SmartSi 3911

Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建

yocto quick start up带大家快速上手

fulinux的博客 5万+

【SDK编程】

#include #include int main() { DeleteFile("C:\\test.txt"); printf("删除成功\n"); return 0; } 原来这就是所谓的一个简单的SDK编程.....果然计算机里面的名词就是看起来玄之又玄..其实很简单...... 摘要一段别人写的话,对不对我不知道. 下面再加深几点概念:

学习之路 1960

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Windows SDK笔记(七):创建MDI窗口
下一篇: Windows窗口框架(API入门一)
cpusoft
博客等级 码龄22年 8粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值