windows程序设计01

上传人:tian****1990 文档编号:74336033 上传时间:2019-01-27 格式:PPT 页数:26 大小:223.50KB
返回 下载 相关 举报
windows程序设计01_第1页
第1页 / 共26页
windows程序设计01_第2页
第2页 / 共26页
windows程序设计01_第3页
第3页 / 共26页
windows程序设计01_第4页
第4页 / 共26页
windows程序设计01_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《windows程序设计01》由会员分享,可在线阅读,更多相关《windows程序设计01(26页珍藏版)》请在金锄头文库上搜索。

1、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程序编译器,Win3

2、2 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,采

3、用其开发windows应用程序过于繁琐。,API&MFC,1. KERNEL 在Win32中库名为 KERNEL32.DLL, 主要用于产生与操作系统之间的关联: 程序加载 上下文选择. 文件输入输出. 内存管理. 例如: GlobalMemoryStatus 函数就包括当前物理内存及虚拟内存的使用信息。,2. USER 这个类库在Win32中名叫 USER32.DLL。 它允许管理全部的用户接口,比如: 窗口 菜单 对话框 图标等., 例如: DrawIcon 函数将在指定的设备关联上“画”出图标或者鼠标。,3. GDI (Graphical Device Interface) 它在Win3

4、2中的库名为:GDI32.dll,它是图形输出库。使用GDI Windows“画”出窗口、菜单以及对话框等: 它能创建图形输出. 它也能保存图形文件. 例如: CreateBitmap 函数就能通过指定的长、宽、颜色创建一个位图。,API&MFC,API:一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数. MFC:是对WindowsAPI的封装, 是Win API与C+的结合, MFC就是挂在它之上的一个辅助软件开发包 MFC 主包含文件为“Afxwin.h”。 API 主包含文件为windows.h,(1)包含要调用函

5、数的声明文件 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 odbc

6、cp32.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, Wi

7、ndows 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 Fun

8、ctionName(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

9、 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 IN

10、IFileIO 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);,调

11、用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 =

12、GetPrivateProfileString(section,key,“,temp, 255, filePath); return temp.ToString(); ,回调函数,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。,某些API函数要求以callback作为你参数之一。如SetTimer,LineDDA,EnumObjects。,UINT_PTR SetTimer( HWND hWnd, / 窗口句柄 UINT_PTR nIDEvent, / 定时器ID,多个定时器时,可以通过该

13、ID判断是哪个定时器 UINT uElapse, / 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc / 回调函数 );,回调函数必须有关键词 CALLBACK 回调函数本身必须是全局函数或者静态函数,不可定义为某个特定的类的成员函数 回调函数并不由开发者直接调用执行(只是使用系统接口API函数作为起点) 回调函数通常作为参数传递给系统API,由该API来调用 回调函数可能被系统API调用一次,也可能被循环调用多次,int _stdcall CompareInts(const byte* velem1, const byte* velem2) int elem1 = *(in

14、t*)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, 4

15、321, 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, ,结 束,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号