delphi直接用windowsapi编程概要

上传人:今*** 文档编号:106233523 上传时间:2019-10-14 格式:DOC 页数:11 大小:113KB
返回 下载 相关 举报
delphi直接用windowsapi编程概要_第1页
第1页 / 共11页
delphi直接用windowsapi编程概要_第2页
第2页 / 共11页
delphi直接用windowsapi编程概要_第3页
第3页 / 共11页
delphi直接用windowsapi编程概要_第4页
第4页 / 共11页
delphi直接用windowsapi编程概要_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《delphi直接用windowsapi编程概要》由会员分享,可在线阅读,更多相关《delphi直接用windowsapi编程概要(11页珍藏版)》请在金锄头文库上搜索。

1、Delphi程序员往往习惯了用VCL元件编程,其实Delphi也能进行基于WINDOWS API SDK的编程。而且用Delphi在某些方面效果似乎比用Visual C+效果还要好。比如本例程,用Delphi 6编译出来只有9216字节(9k)而同样的Visual C+程序却有16896字节(17k)。(此例程是笔者从网上下载的c+源码例程,其中有c源程序,和编译好的.exe文件。源代码经笔者改写成Delphi代码。)这证明Delphi编译器的优化效果非常好。API是(Application Programming Interface)的缩写,意为应用编程界面,它包含了编写Windows所有函

2、数、数据类型。VCL就是以它为基础进行封装的,它是应用程序在Windows 上运行的基础。通过熟悉使用WINDOWS API SDK直接编制WINDOWS程序,程序员将对WINDOWS的执行机制有更深入的了解,从而编写出更高效、实用的程序。下面是我们用API函数建立的第一个程序:1 :program HELLOWIN;2 :3 :uses4 : windows, Messages ,mmsystem;5 :6 :7 :8 :var9 : sz_appname:array 0.8 of char=HelloWin#0;10 : Win_Class: WNDCLASSEX; /窗口类11 : w_

3、Handle,inst:HWND;/w_Handle窗口句柄、程序句柄12 : w_msg:TMSG; /消息数据13 :14 :function WindowProc(h_Wnd,u_Msg,w_Param,l_Param: LONGINT):LRESULT;stdcall;15 :/回调函数16 :var p_hdc:hdc;17 : p_rect:trect;18 : ps : PAINTSTRUCT ;19 :begin20 :21 :22 : case u_msg of23 : WM_DESTROY : PostQuitMessage (0);24 : WM_CREATE : Pla

4、ySound (pchar(hellowin.wav#0), 0, SND_FILENAME or SND_ASYNC) ;25 : WM_PAINT :begin26 : p_hdc := BeginPaint (h_wnd, ps) ;27 : GetClientRect (h_wnd, p_rect);28 : DrawText (p_hdc, pchar(Hello, Windows!#0), -1, p_rect,29 : DT_SINGLELINE or DT_CENTER or DT_VCENTER) ;30 : EndPaint (h_wnd, ps) ;31 : end;32

5、 :33 : end;34 : Result := DefWindowProc(h_Wnd, u_Msg, w_Param, l_Param);35 :end;36 :37 :38 :39 :40 :begin41 : Inst := hInstance;42 : win_class.cbSize := sizeof (win_class) ;43 : win_class.style := CS_HREDRAW or CS_VREDRAW ;44 : win_class.lpfnWndProc := WindowProc ;45 : win_class.cbClsExtra := 0 ;46

6、: win_class.cbWndExtra := 0 ;47 : win_class.hInstance := Inst ;48 : win_class.hIcon := LoadIcon (0, IDI_APPLICATION) ;49 : win_class.hCursor := LoadCursor (0, IDC_ARROW) ;50 : win_class.hbrBackground := HBRUSH (GetStockObject (WHITE_BRUSH) ;51 : win_class.lpszMenuName := nil ;52 : win_class.lpszClas

7、sName := sz_AppName ;53 : win_class.hIconSm := LoadIcon (0, IDI_APPLICATION) ;54 : RegisterClassEx(Win_Class);55 : w_Handle:=CreateWindow(sz_appname, pchar(The Hello Program#0),56 : WS_OVERLAPPEDWINDOW,200,200,300,300,0,0, 57 : Inst,nil) ;58 : 59 : ShowWindow (w_Handle, SW_SHOWNORMAL) ;60 : UpdateWi

8、ndow(w_Handle);61 :62 :63 : while(GetMessage(w_msg, 0, 0, 0) do64 : begin65 : TranslateMessage(w_msg);66 : DispatchMessage(w_msg);67 : end; 68 :69 :70 :end.以上源程序读者可以直接拷贝到记事本中,把行标去掉后另存为.dpr文件,然后用Delphi直接打开,就可以编译运行,之后你就会听到电脑向你发出的问候。(hellowin.wav文件可以自己用windows录音机录制)其中主程序(40-70行)的功能如下:设置窗口变量(42-53行)注册窗口

9、(54行)显示窗口(59-60行)消息循环(63-67行)以下根据以上四部分分别介绍:一、设置窗口变量:每一个标准的Windows应用程序都至少有一个主窗口,在本程序中代表主窗口的变量就是Win_Class,它的类型是 WNDCLASSEX,其在windows.pas的声明如下:tagWNDCLASSEXA = packed record cbSize: UINT; /设置成窗口类型的大小 style: UINT; /窗口类风格 lpfnWndProc: TFNWndProc; /指向该窗口的回调函数(本程序为WindowProc) cbClsExtra: Integer; /窗口类变量的扩展

10、字节数 cbWndExtra: Integer; /窗口实例的扩展字节数 hInstance: HINST; /窗口的实例句柄 hIcon: HICON; /窗口的图标句柄 hCursor: HCURSOR; /窗口鼠标指针句柄 hbrBackground: HBRUSH; /刷新窗口用户区背景的画刷句柄 lpszMenuName: PAnsiChar; /窗口类包含的菜单的名称 lpszClassName: PAnsiChar; /窗口类的名称 hIconSm: HICON; /窗口的小图标句柄 end;WNDCLASSEXA = tagWNDCLASSEXA;WNDCLASSEX = WN

11、DCLASSEXA;l 其中style的设置是以下各值通过位运算符or(或)联接合成。风 格含 义CS_HREDRAW 如果窗口宽度发生改变,重画整个窗口CS_VREDRAW 如果窗口高度发生改变,重画整个窗口 CS_DBLCLKS 能感受窗口中的双击消息 CS_NOCLOSE 禁用系统菜单中的“关闭”命令 CS_OWNDC 为该窗口类的各窗口分配各自独立的设备环境 CS_CLASSDC 为该窗口类的各窗口分配一个共享的设备环境 CS_PARENTDC 指定子窗口继承其父窗口的设备环境 CS_SAVEBITS 把被窗口遮掩的屏幕图象部分作为位图保存起来。当该窗口被移动时,Windows使用被保

12、存的位图来重建屏幕图象 l LpfnWndProc域是一个函数指针,它指向窗口的“回调函数”。本程序回调函数是WindowProc。回调函数指的是本窗口的消息处理函数。所谓“回调”指的是此函数在本程序中没有语句直接调用它,而调用它的是windows。每个窗口程序建立好之后,windows为每个程序维护一个“消息队列”。用户的操作如鼠标、键盘输入等都是先由windows处理接收的,windows判断如果用户的操作是针对本窗口程序的,就把此消息放到程序的消息队列中。而程序窗口通过消息循环语句(本程序的63-67行)取出消息(GetMessage函数),最后通过调用DispatchMessage函数

13、把消息传回windows,再由windows调用回调函数(本程序是WindowProc)处理消息,回调函数把消息处理完后(很多缺省消息的处理是回调函数再调用windows来处理的),windows结束DispatchMessage调用。应用程序进行下一个消息处理循环。其关系如下图所示:l cbClsExtra和wc.cbWndExtra在大多数情况下都会设为0。l hInstance它的值是应用程序的实例句柄,表明该窗口与该实例是相关联的。l hIcon是窗口的图标句柄。l hCursor是窗口的鼠标光标句柄。l hbrBackground是窗口的背景颜色。l lpszMenuName是标志菜单资源的字符串。l lpszClassName此窗口类的名称。l hIconSm是窗口的小图标句柄,它是显示在任务栏上的小图标,和窗口左上角的图标。二、注册窗口类:用RegisterClassEx函数注册窗口。其在windows.pas的声明如下:function RegisterClassEx(const WndClass: TWndClassEx): ATOM; stdcall;此函数的参数就是窗口类TwndClassEx

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

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

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