资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
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 arrayi n; Bubblesort(byte*)array, 5, sizeof(array0), ,const char str510 = “estella“,“danielle“,“crissy“,“bo“,“angie“; cout “Before sorting strings with Quicksortn“; for(i=0; i 5; i+) cout stri n; Quicksort(byte*)str, 5, 10, ,结 束,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号