WIN_sdk 编程
什么是SDk编程

其他的不想说太多,学SDK很重要的是不要期望在开始时把每行代码都搞清楚。
学习的方法
当然是多写程序了。最好每个主题都写一个。从一开始的窗口,文本显示到图形显示、控件、对话框,多写就能领会Windows编程的内涵。当第一部分学的差不多了,可以写一个综合点的程序。最后你会发现你可以写很长的程序了,1000多行也不算长,但对于当时学C时是难以想象的。还有重要的是多上一些专门的网站,比如VC知识库()和VC之路(有一本很好的教程,不过现在网站的东西都没了,正在恢复),另外也是一个不错的地方。
不用被第一个Windows程序吓住
如果你已经开始,你的教材应该是那本经典的programming windows (petzold)或者是一本相似的书。但无论哪本书,一开始你都会面对一个基本的Windows SDK程序,这个程序有几十行。尽管也不算长,但比C版的hello world长多了。更糟的是,里面充斥着奇怪的变量类型和常量定义,不过先不用被它吓住,让我们看看这里面有些什么。首先会有一个#include <windows.h> ,嗯,没什么奇怪的,这和#inclde <stdio.h>没什么两样。然后是一个函数声明:LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 有点困惑了,一下子就出来了好几个“生词”,而且函数名前面有两个修饰符也是以前没有遇到的。好在我们还可以辨认出这是一个函数声明。再往下看是WinMain函数,又是一堆生词,我猜想你可能已经开始郁闷了。想一遍看懂这个程序确实困难,所以看不懂也没关系。看不下去了可以看看书上的讲解。这篇文章并不是要完整分析这个程序的,hfire不可能有petzold讲的好。在这里hfire帮你分析一下一些陌生的东西。
Windows SDK安装过程

安装过程:
1.开始—运行—输入cmd,进入命令提示符界面;
2.通过cd命令进入到安装程序所在目录下;
3.输入批处理命令PSDK-FULL.bat
4.输入批处理命令和程序完整路径,界面如下:
5.进入解压缩后的路径下,点击setup.exe,进入如下页面
6.选择Download下的Install菜单,进入如下界面
6.选择所有的SDK,即Windows SDK,然后点击Start Installation,进入如下界面
7.点击Continue,弹出一个对话框,如图
8.点击Accept按钮,弹出选择路径对话框,如图
9.设置盘符为D:\,其他的默认,点击continue,进入如下界面
10.点击Install Now按钮,会弹出一个提示有风险的对话框,点击确定即可,进入安装界面,
如图
11.等待几分钟,当所有选项前面均已打钩,表示安装完成,界面如下
点击Close完成安装过程。
什么是WinSDK

题目
1.将文章中的英文字体全部改为Tahoma。
2.将文章各段的首行缩进设置为1厘米。
3.将标题设置成七彩霓虹的文字效果。
4.将文章中的所有API改成隶书2号空心。
5.将页面纸张方向设置为横向,纸张大小设置为16开。
注意:全文内容、位置不得随意变动,否则后果自负。
红框之内的文字不得操作,否则后果自负。
什么是WinSDK
大致说来windows编程有两种方法:1. windows c方式(SDK);
2.c++ 方式:即对SDK函数进行包装,如VC的MFC,BCB的OWL 等,如果要深入下去,还是要熟悉SDK。
两种方法有哪些区别呢:SDK编程就是直接调用windows的API 进行编程,但是有上千个API组成(win95的API有两千多个),这种数目太大了,对于编程显然不利。
而MFC把这些API封闭起来,共有一百多个类组成。
一般只需20多个windows类和另外20多个通用的非windows类就可“干活”了,这一改变无疑是有很大好处的。
尽管MFC如此方便,但是要学VC,直接去学MFC却是不明智的选择。
只有在熟悉了MFC的运行机制的情况下,才有可能深入下去。
那些如多少天精通什么什么的书籍其实讲的全是些如怎么使用VC这种工具的话题,学来学去学会了怎么使用VC这种工具,而不能深入MFC编程。
像VB这类工具就更令人感觉到太闷了,不过各有各的好处。
MFC虽然提高了程序员编程的效率,但是也失去了SDK编程的灵活性不好意思,跑题了……
API,全称Application Program Interface,意思是应用程序编程接口。
WDK编译环境配置说明

客户端DDK编译环境配置说明概要文档主要说明DDK编译环境的部署,如何使用该环境进行客户端代码的编译,环境中一些主要命令、如何扩展一些命令。
以及在从VC环境下移植过来后,代码需要改进的一些描述。
文章将着重对相关模块下的sources makefile进行描述。
主要分以下五个部分,各个部分的详细叙述请参见各章节。
1.DDK build server的部署2.DDK环境目录的介绍3.DDK编译工具和操作介绍4.编译过程描述以及tang工程编译分析5.VC源代码移植一些常见编译错误6.一些遗留移植和完善工作DDK build server的部署DDK build server是指存在ddk build环境的服务器,可供每个开发人员下载到自己的开发机器,经过简单的配置就能成为本地ddk编译换进的一套机制。
DDK build server可供公司各个项目组使用,方便的下载,配置并执行编译功能。
目前没有ddk build server部署,大家可以从机器192.168.12.103的共享目录中进行下载。
DDK环境目录的介绍从上图中可以看到红圈标识的几个文件和文件夹,下面一一进行介绍:Bin目录:包含了对应系统平台下的整个环境的工具和编译命令,已经进行环境设置的bat 等。
例如:cl.exe,mc.exe,midl.exe,rc.exe包括编译命令build.exe等。
Inc目录:包含了整个环境中的头文件,其中包含的子目录crt,atl,wtl,ddk,api,mfc等包含了各种不同编程框架,crt以及系统sdk的头文件。
各个子目录都,对应与相应的环境变量一一对应:Crt $( CRT_INC_PATH) = ddk下载目录\inc\crtSdk $( SDK_INC_PA TH)= ddk下载目录\inc\apiWtl $( WTL_INC_PA TH)= = ddk下载目录\inc\wtl80…Lib目录:包含了整个编译环境下的所有lib文件(除用户lib),其中包含的子目录atl,crt,mfc,以及不同操作系统对应的库目录。
第11章 Windows 编程初步-面向对象程序设计(C++语言)(第二版)-程磊-清华大学出版社

❖ 第一种方法的特点是可以使应用程序更精炼,运 行效率更高,编写程序时有较大的自由度,但难 度较大;
❖ 第二种方法的特点是采用MFC提供的类库编写程 序,这些类中已经封装了大部分的Windows API 函数,还提供了编写不同程序类型的模版和框架, 所以编写程序比较容易,而且还允许直接调用 Windows API 函数来实现一些特殊的功能。
第三部分 Visual C++环境下Windows程序 开发概述
第11章 Windows 编程初步 第12章 MFC库和应用程序框架 第13章 综合设计实例– 简单绘图程序
第11章 Windows 编程初步
本章要点:
❖简单的Windows程序框架 ❖自定义类和Windows程序框架结合
在编写Windows 应用程序时,常采用两种方法: ❖ 一是使用Windows SDK ( Software development Kit,即
图11.5 向解决方案中添加新项
图11.6 添加main.cpp文件
(6)可以看到在“解决方案管理器”视图中的“源文件” 栏目中被添加了一个main.cpp文件,同时可以看到 Visual Studio开发工具的中间编辑窗口也打开了一个空 白的文件编辑窗口,在这里输入例11.1的源程序,然后保 存,如图11.7所示。
❖ Windows程序一般是一个可视化的窗口程序,通过操作 系统发送的消息来处理用户输入的数据,然后通过在窗口 上绘制或者把数据发给窗口上的组件来显示数据。
❖ 句柄就是一个标识符,用来区别同类对象或者资源的唯一 标志,可以认为它是个无符号整数或者一个指针均可。
windows的运行机制

视图类:负责数据
的显示与打印 单文档应用程序WinGreet中使用到的类
MFC程序的启动
1、创建Application object对象 theApp
程序一开始生产一个(且只有一个)应用类对象 theApp,
也即一个CWinApp对象,这个全局对象一产生,便执行其 构造函数,导致其基类CWinApp类的构造函数被调用。该 函数定义于APPCORE.CPP第75行,因此,CWinApp之中的 成员变量将因为theApp这个全局对象的诞生而获得配置
}
MFC程序的运行
// process this message if (m_msgCur.message != WM_KICKIDLE &&
!PreTranslateMessage(&m_msgCur))
{ ::TranslateMessage(&m_msgCur); ::DispatchMessage(&m_msgCur); }
AfxWinInit之后的操作是pApp->InitApplication 而pApp指向CWinGreetApp对象,所以 相当于调用: CWinGreetApp::InitApplication(); 而CWinGreetApp继承自CWinApp, InitApplication
又是CWinApp的一个虚拟函数,我们并没有改写它(大
与初值
在SDK编程时,是通过一个应用程序的实例号来标示一个应用程序 的。在基于MFC应用程序中,是通过产生一个应用类的对象来唯一
标识我们的整个应用程序。
MFC程序的启动
2、WinMain登场 用SDK编程序时,程序的入口点是WinMain函数, 而在MFC程序里我们并没有看到WinMain函数, 原 来她是被隐藏在MFC代码里面了。当theApp配置完
Windows API编程入门教程

Windows API编程入门教程学习各种高级外挂制作技术,马上去百度搜索(魔鬼作坊),点击第一个站进入,快速成为做挂达人。
大家好再次自我介绍一下我是beyondcode,这次心血来潮,计划着做一系列关于Windows API编程的教程,用于帮助一些在Windows API编程上有疑惑的,纳闷的,迷惑的新手朋友们。
先解释一些术语或名词吧SDK是Software Development Kit的简写,也就是软件开发包的意思,其中就包含了我们写程序要用到的一些头文件,库,工具,帮助文档之类的。
Windows API编程是指调用Windows的接口函数来进行程序的编写,例如MessageBox就是一个API函数或者说接口函数。
怎么说都可以,自己理解就行。
如果你连这个都不太懂,我想也不会搜到这篇文章了吧~·为什么做这个系列教程呢,请听我一一道来先,最近遇到一些事一些人,让我真的感觉在这方面的引导入门文章真的很是匮乏,加上Windows SDK头文件中那些复杂,庞大,'烦人'的宏定义与数据类型定义,对于一个新手来说(我所说的新手不单只刚接触编程的,还特指那些在其他语言领域有比较高造诣的朋友)一个纯SDK写的helloworld程序都算是一个有些困难和挑战的任务了吧。
本着帮助别人,高兴自己的原则,我有了这个打算,当然对自己以前所学,所经历做一次回忆,也是这次计划的一部分。
声明一下,本系列教程是面向广大初次接触WIN32SDK程序编写的新手朋友们的,如果你是高手,一笑而过吧~当然,除了一笑而过,也多谢你们提出指正文章中的错误,以免我误人子弟啊~~谢谢Ok废话不多说,进入正题,今天第一篇,讲什么?对于一个新人来说,第一次接触SDK 编程或者说API编程,什么最迷惑你们的,我们讲它,我觉得Windows SDK中那'烦人'的数据类型定义和宏定义应该算这个很角色吧。
其实微软的本意也是善良的,为了减轻程序员的负担,和为了编程的方便,才花了那么多心思与精力定义出了这么一大套数据类型与宏定义,这也是我为什么在之前说它烦人都是加上引号的原因,因为他不是真的烦人,熟练了,你不但不觉得它烦,反而离不开它了,呵呵,日久深情也就是这么来的。
Win32+SDK教程

//窗口左上角的 y //窗口的宽度 //窗口的高度 //父窗口句柄 //菜单句柄 //实例句柄 //创建参数
//窗口消息处理 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: //关闭窗口 PostQuitMessage(0); //发送关闭消息 break; default: return DefWindowProc(hWnd, message, wParam, lParam); //缺省窗口处理函数 } return 0; }
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
01章 SDK 入门 01 章 SDK 入门
现在我们要学的是 Windows32 的编程,与 DOS 不同的是,实现的目标是一个 具有你所需要的功能的“窗口”。这个“窗口”时时刻刻都在与操作系统之间, 通过一个称之为“消息队列”的东西传送数据。因此处理好各种消息便成了 Win32 编程的核心。 SDK 编程是相对于 MFC 来说的, 也就是用 C 和 C++来调用 WindowsAPI, 这 API 是操作系统的东西,其他语言(如 VB)也可以调用。因此,以前也有人将这种 编程称为 API 编程。当然,这儿对 C 或 C++进行了一些扩展,所谓扩展,就是增 加了许多宏定义、模板,让你看了之后大吃一惊,真不知“何方神圣”倒底有何 神通。 如果你 C 或 C++还不会的话,请先学习 C 语言和 C++语言,否则,你再刻苦 也等于看电影,也许你看懂了但你肯定不会演电影。学习窗口编程之前,你要知 道几个概念。 1. 实例(instance): 这是 C++的内容,“类”相当于结构体的数据类 型,用“类”这种类型去定义一个变量(如果是指针,则假定已经得 到了空间),这个变量就是那个“类”的“实例”。它和 C 语言中的 变量是一回事,不过只有用“类”定义的变量才称为“实例”。 2. 句柄(handle):这是 C 语言的内容,和文件句柄一样,它实际上是一 个整数,用来标识是哪一个实例,也就是实例的标识符。通过句柄可 以操作这个实例。 3. 回调(CALLBACK): 这其实是 C 语言中的函数指针,函数指针一般在大 项目搭框架时常常使用。 也就是你设计好要得到什么, 把接口定义好, 具体怎么实现完全交给别人,别人只要把函数名传给你就 OK。这个 函数名就是地址, 不过取这种地址的指针在定义上与普通指针有些不 同。小雅在《C 语言教程》的“函数指针”中有详细解说和例子。 一、WinMain()函数 WinMain()函数是窗口程序的入口函数,在这个函数中你就可以调用各种 API 函数来完成你的目标。①一般是先调用 RegisterClassEx()函数用当前窗口 句柄去向操作系统申请(或称登录)将要创建一个什么样的窗口,申请成功后,② 再调用 CreateWindowEx()函数创建一个窗口对象,这仅仅是一个外观,③还要 调用 ShowWindow()函数设置初期表示,即最大或最小或普通等。④最后还要调 用 UpdateWindow()函数向窗口传送 WM_PAINT 消息来画出窗口里面的内容。 窗口创建完后,这是一个“静止”的窗口,⑤因此还要在 WinMain()函数的 最后添加消息循环,最后才 return。WinMain()函数完了之后,⑥还要再编写一 个“窗口消息处理”函数。 上面讲了一大堆 API 函数的调用也许有点昏头,但那
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•函数DefWindowProc是系统的默认处理过程, 以保证所有发送到该窗口的消息都能得到处 理
一个简单的Windows应用程序
我们先来分析程序代码段,然后再进行上机 操作 该段应用程序将生成一个简单的窗口 本例作为一 个简单的使用Windows API函 数进行编程的入门
#include <windows.h> //窗口函数说明 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM, LPARAM); //------------下面为初始化窗口类----------------//WinMain函数说明 int WINAPI WinMain ( HINSTANCE hInstance, //应用程序当前实例句柄 HINSTANCE hPrevInst, //应用程序其他实例句柄 LPSTR lpszCmdLine, //指向程序命令行参数的指针 int nCmdShow //应用程序开始执行时窗口显示方式 //的整数值标识 )
wndclass.hIcon=LoadIcon(NULL, IDI_APPLICATION);//窗口的最小化图标为缺省图标 wndclass.hCursor=LoadCursor(NULL, IDC_ARROW); //窗口采用箭头光标 wndclass.hbrBackground=GetStockObject (WHITE_BRUSH) ; //窗口背景为白色 wndclass.lpszMenuName = NULL; //窗口中无菜单 wndclass.lpszClassName = lpszClassName ; //窗口类名为"窗口示例"
C.创建窗口:创建一个窗口类的实例由函数 CreatWindow()实现,该函数原型为:
HWND CreateWindow( LPCTSTR lpszClassName, //窗口类名 LPCTSTR lpszTitle, //窗口标题名 DWORD dwStyle, //创建窗口的样式 int x, //窗口左上角横坐标 int y, //窗口左上角纵坐标 int nWidth, //窗口宽度 int nHeight, //窗口高度 HWND hwndParent, //该窗口的父窗口句柄 HMENU hMenu, //窗口的主菜单句柄
//----------------以下为窗口类注册-----------if( !RegisterClass( &wndclass)) //如果注册失败则发出警告声音 { MessageBeep(0) ; return FALSE ; }
//创建窗口 hwnd=CreateWindow( lpszClassName, //窗口类名 lpszTitle, //窗口实例的标题名 WS_OVERLAPPEDWINDOW, //创建窗口的样式 CW_USEDEFAULT, //窗口左上角横坐标为缺省值 CW_USEDEFAULT, //窗口左上角纵坐标为缺省 值 CW_USEDEFAULT, //窗口宽度为缺省值 CW_USEDEFAULT, //窗口的高为缺省值 NULL, //定义窗口的父窗口句柄,此窗口无父窗口 NULL, //窗口的主菜单句柄,此窗口无主菜单 hInstance, //创建此窗口的应用程序的当前句柄 NULL) ; //不使用该值
常用显示形式标识及其说明
SW_HIDE 隐藏窗口 SW_SHOWNORMAL 显示并激活窗口 SW_SHOWMINIMIZE 显示并最小化窗口 SW_SHOWMAXIMIZE 显示并最大化窗口 SW_SHOWNOACTIVE 显示但不激活窗口 SW_RESTORE 恢复窗口原来的位置及尺寸
Winmain函数: (消息循环)
{
HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; char lpszClassName[] = “窗口”; //窗口类名 char lpszTitle[]= "My_Windows"; //窗口标题名 //窗口类的定义 wndclass.style = 0; //窗口类型为缺省类型 wndclass.lpfnWndProc = WndProc; //窗口处理函数为WndProc wndclass.cbClsExtra= 0 ;//窗口类无扩展 wndclass.cbWndExtra= 0 ; //窗口实例无扩展 wndclass.hInstance = hInstance; //当前实例句柄
2、窗口函数
窗口函数定义了应用程序对接收到的不同消息 的响应 通常由一个或多个switch语句组成,每个case 语句对应一种消息 窗口函数是应用程序处理接收到的消息的函数, 包含了应用程序对各种可能接到的消息的处理 过程 窗口函数的一般形式为:
LRESULT CALLBACK WndProc ( HWND hwnd, //窗口句柄 UINT message, //代表所处理消息的消息值 WPARAM wParam, //消息的附加参数 LPARAM lParam //消息的附加参数 ) { …… switch(message) //Message为标识消息的消息值 {case…… …… break; ……
D.显示窗口: 窗口类的显示由ShowWindow()和 UpdateWindow()函数实现。应用程序调 用ShowWindow()函数在屏幕上显示窗口, 调用形式为: ShowWindow(hwnd,nCmdShow); hwnd为窗口句柄; nCmdShow为窗口显示形式标识 显示窗口后,应用程序常常调用 UpdateWindow()函数更新并绘制用户区, 并发出WM_PAINT消息。其形式为: UpdateWindow(hwnd);
•PostQuitMessage函数的原型为: void PostQuitMessage(int nExitCode); nExitCode为应用程序退出代码 •下列语句为未定义处理过程的消息提供默认 处理 default:
return DefWindowProc(hwnd,message,wParam,lParam);
GetMessage()函数的作用是从消息队列中读取一条消 息,并将消息放在一个MSG结构中。其形式为:
Getmassage ( lpMSG, //指向MSG结构的指针 hwnd, nMsgFilterMin, //用于消息过滤的最小消息号值 nMsgFilterMax //用于消息过滤的最大消息号值 )
//显示窗口 ShowWindow( hwnd, nCmdShow); //绘制用户区 UpdateWindow(hwnd); //消息循环 while( GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage( &Msg) ; DispatchMessage( &Msg) ; } return Msg.wParam; //消息循环结束即程序终止时将信息返回系统 }
常用窗口样式(2)
WS_OVERLAPPEDWINDOW 创建一带边框、标题栏、系统菜单及最大、最小 化按钮的窗口 WS_POPUP 创建一弹出式的窗口 WS_POPUPWINDOW 创建一带边框和系统菜单弹出式窗口 WS_SYSMENU 创建一带系统菜单的窗口 WS_VSCROLL 创建一带垂直滚动条的窗口
1、WinMain函数
WinMain函数是所有Windows应用程序的 入口,类似C语言的main() WinMain函数的功能是完成一系列的定义和 初始化工作,并产生消息循环 消息循环是整个程序的核心 WinMain函数由三部分组成:函数说明、初 始化和消息循环
WinMain函数的功能
注册窗口类,建立窗口及执行其他必要的初 始化工作 进入消息循环,根据从应用程序消息队列接 收的消息,调用相应的处理过程 当消息循环检索到WM_QUIT消息时,终止 程序运行
通过设置参数nMsgFilterMin和nMsgFilterMax 可实现消息的过滤,即仅处理所确定的消息号范 围内的消息。如果两个参数都为0,则不过滤消 息 TranslateMessage函数负责将消息的虚拟键转 换为字符消息:TranslateMessage(lpMSG); DispatchMessage函数将参数LpMSG指向的消 息传送到指定窗口函数,其形式为: DispatchMessage(lpMSG); 当GetMessage函数返回零值,即检索到 WM_QUIT消息时,程序将结束循环并退出
Winmain函数: (函数说明)
int WINAPI WinMain ( HINSTANCE hInstance,//应用程序当前实例句柄 HINSTANCE hPrevInst,//应用程序其他实例句柄 hPrevInst // LPSTR lpszCmdLine,//指向程序命令行参数的指针 int nCmdShow //应用程序开始执行时窗口显示方式 //的整数值标识 ) //HINSTANCE:常用句柄类型,标识当前实例句柄
Windows应用程序的运行以消息为核心。 Windows将产生的消息放入应用程序的消 息队列中,而应用程序的WinMain函数从消 息循环提取队列中的消息,并将其传递给窗 口函数的相应过程处理
消息循环的常见格式
MSG Msg; …… while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); }
WIN编程
WIN32编程
WIN32编程 一种封装方式
MFC封装 ATL编程
WIN32编程
通常模式
WinMain入口 RegisterClass注册窗体类,重要的是将窗体主 循环函数插入系统消息处理队列。 CreateWindow,ShowWindow, UpdateWindow 程序消息主循环处理消息 窗体函数处理消息:case语句筛选处理消息