windows程序设计01.ppt_第1页
windows程序设计01.ppt_第2页
windows程序设计01.ppt_第3页
windows程序设计01.ppt_第4页
windows程序设计01.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows程序设计基础,主要内容,Windows编程基础知识,Win32程序运行原理,用实例剖析Windows高级特性,参考书: Windows程序设计(第二版) 人民邮电出版社 王艳平 张铮 编著,第一章 windows程序设计基础知识,1.1 必备知识,Windows的操作系统: Windows95 Windows98 Windows Me Windows2000 Windows XP Windows2003 (32) Vista Win 7(64),开发工具VB、 Visual FoxPro 、VC+、Delphi、C# 、 VC+ .NET。 TC是16位DOS程序编译器,Win32 API (Application Programming Interface),Win32 API可认为是一个程序库,提供各式各样的与windows系统服务有关的函数。 Win32 API是最底层的服务。调用windows的各种服务。 通常所说的sdk编程就是直接调用API函数进行编程。 Win32 API是指编制32位应用程序时用的一组函数、结构、宏定义。在win32的环境下,任何语言都是建立在Win32 API基础上的。Visual FoxPro、VB等软件API隐藏的较深。,大多数API位于三个核心DLL中: kernel32.dll 、 user32.dll、GDI32.dll,采用其开发windows应用程序过于繁琐。,API&MFC,1. KERNEL 在Win32中库名为 KERNEL32.DLL, 主要用于产生与操作系统之间的关联: 程序加载 上下文选择. 文件输入输出. 内存管理. 例如: GlobalMemoryStatus 函数就包括当前物理内存及虚拟内存的使用信息。,2. USER 这个类库在Win32中名叫 USER32.DLL。 它允许管理全部的用户接口,比如: 窗口 菜单 对话框 图标等., 例如: DrawIcon 函数将在指定的设备关联上“画”出图标或者鼠标。,3. GDI (Graphical Device Interface) 它在Win32中的库名为:GDI32.dll,它是图形输出库。使用GDI Windows“画”出窗口、菜单以及对话框等: 它能创建图形输出. 它也能保存图形文件. 例如: CreateBitmap 函数就能通过指定的长、宽、颜色创建一个位图。,API&MFC,API:一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数. MFC:是对WindowsAPI的封装, 是Win API与C+的结合, MFC就是挂在它之上的一个辅助软件开发包 MFC 主包含文件为“Afxwin.h”。 API 主包含文件为windows.h,(1)包含要调用函数的声明文件 windows.h 包含其他头文件 windef.h 基本类型定义 winnt.h 支持Unicode的类型定义 winbase.h 内核函数 winuser.h 用户接口函数 wingdi.h 图形设备接口函数 winsock.h 网络编程函数,1.2 API函数的调用方法,1.C+调用过程,(2)连接到指定的库文件 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib 显式设置:#pragma comment(lib,” WS2_32.lib ”) (3)在API函数前加“:”表示这是一个全局函数,以与 C+类的成员函数区分。,API函数的调用方法,#include 就可以使用API函数,调用API例子(C+),#include “stdafx.h“ / 这是VC自动添加的头文件,没有什么用途 #include / 包含MessageBox函数声明的头文件 int main(int argc, char* argv) / 调用API函数MessageBox int nSelect = :MessageBox(NULL, “Hello, Windows XP“, “Greetings“, MB_OKCANCEL); if(nSelect = IDOK) printf(“ 用户选择了“确定”按钮 n“); else printf(“ 用户选择了“取消”按钮 n“); return 0; ,2.C#调用格式 using System.Runtime.InteropServices; /引用此名称空间,简化后面的代码 . /使用DllImportAttribute特性来引入api函数,注意声明的是空方法,即方法体为空。 DllImport(“user32.dll“) public static extern ReturnType FunctionName(type arg1,type arg2,.); /调用时与调用其他方法并无区别,1.VB不能直接调用Win API,要先声明然后再调用。 2. 声明 API 过程 ,比如声名SetWindowTextA 首先,在模块的声明部分对过程进行声明: Private Declare Function SetWindowText Lib “user32“ Alias “SetWindowTextA“ (ByVal hwnd As Long, ByVal lpString As String) As Long 3.调用 API 过程 在声明了函数之后,调用它的方式与标准的 Visual Basic 函数相同。在下例中,Form Load 事件调用了上面声明的过程。 Private Sub Form_Load() SetWindowText Form1.hWnd, “Welcome to VB“ End Sub 在VB环境下,涉及到的所有integer(整型数),都是16位,调用API例子(VB),调用API例子(C#),读写INI文件。 using System; using System.IO; using System.Text; using System.Runtime.InteropServices; namespace FileIO public class INIFileIO DllImport(“kernel32“) private static extern long WritePrivateProfileString(string section, string key,string val,string filePath); DllImport(“kernel32“) private static extern int GetPrivateProfileString(string section, string key,string def, StringBuilder retVal, int size,string filePath);,调用API例子(C#),public INIFileIO() public static void INIWriteValue(string section,string key,string val,string filePath) WritePrivateProfileString(section,key,val,filePath); public static string INIReadValue(string section,string key,string filePath) StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(section,key,“,temp, 255, filePath); return temp.ToString(); ,回调函数,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。,某些API函数要求以callback作为你参数之一。如SetTimer,LineDDA,EnumObjects。,UINT_PTR SetTimer( HWND hWnd, / 窗口句柄 UINT_PTR nIDEvent, / 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 UINT uElapse, / 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc / 回调函数 );,回调函数必须有关键词 CALLBACK 回调函数本身必须是全局函数或者静态函数,不可定义为某个特定的类的成员函数 回调函数并不由开发者直接调用执行(只是使用系统接口API函数作为起点) 回调函数通常作为参数传递给系统API,由该API来调用 回调函数可能被系统API调用一次,也可能被循环调用多次,int _stdcall CompareInts(const byte* velem1, const byte* velem2) int elem1 = *(int*)velem1; int elem2 = *(int*)velem2; if(elem1 elem2) return 1; return 0; ,int _stdcall CompareStrings(const byte* velem1, const byte* velem2) const char* elem1 = (char*)velem1; const char* elem2 = (char*)velem2; return strcmp(elem1, elem2); ,int main(int argc, char* argv) int i; int array = 5432, 4321, 3210, 2109, 1098; cout “Before sorting ints with Bubblesortn“; for(i=0; i 5; i+) cout arr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论