《Delphi高手突破》节选--脱离VCL的Windows程序

Nicrosoft 2002-09-29 06:50:35
我知道,朋友们等待这本书很久了,好多朋友都发Email来问。出版社现在说,10月中旬可以上市。上市最快的,应该是网络上的销售,然后,常规渠道来说,北京应该比其他区域快。

在此,再贴出一段节选。

书的支持网站:http://www.sunistudio.com/nicrosoft/book/did/
光盘内容下载暂时不提供。

谢谢!

-----------------------------------------------
4.4.1 脱离VCL的Windows程序
我想读者有必要先了解一个标准Windows程序的运行流程,如果您还不了解,请看下面的一个示例程序。在此,我给出一个用纯pascal所编写的十分简单的Windows应用程序,以演示标准Windows程序是如何被建立及运行的。该程序的代码及可执行文件可在本书配套光盘的WindowDemo目录下找到,程序可被Delphi编译通过。
以下是代码清单,请注意其中的注释:
program WindowDemo;

uses Windows, Messages;

// 窗口函数,窗口接到消息时被Windows所调用
function WindowProc(hwnd : HWND; uMsg : Cardinal; wParam : WPARAM;
lParam : LPARAM) : LResult; stdcall;
begin
Result := 0;

case uMsg of
// 关闭窗口消息,当用户关闭窗口后,通知主消息循环结束程序
WM_CLOSE : PostMessage(hwnd, WM_QUIT, 0, 0);
// 鼠标左键按下消息
WM_LBUTTONDOWN : MessageBox(hwnd, 'Hello!', '和您打个招呼',
MB_ICONINFORMATION);

else
// 其它消息做默认处理
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
end;
end;

var
wndcls : WNDCLASS; // 窗口类的记录(结构)类型
hWnd : THandle;
Msg : tagMSG; // 消息类型
begin
wndcls.style := CS_DBLCLKS; // 允许窗口接受鼠标双击
wndcls.lpfnWndProc := @WindowProc; // 为窗口类指定窗口函数
wndcls.cbClsExtra := 0;
wndcls.cbWndExtra := 0;
wndcls.hInstance := hInstance;
wndcls.hIcon := 0;
wndcls.hCursor := LoadCursor(hInstance, 'IDC_ARROW');
wndcls.hbrBackground := COLOR_WINDOWFRAME;
wndcls.lpszMenuName := nil;
wndcls.lpszClassName := 'WindowClassDemo'; // 窗口类名称

// 注册窗口类
if RegisterClass(wndcls) = 0 then
Exit;

// 创建窗口
hWnd := CreateWindow(
'WindowClassDemo', // 窗口类名称
'WindowDemo', // 窗口名称
WS_BORDER or WS_CAPTION or WS_SYSMENU, // 窗口类型
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,
0,
hInstance,
nil
);
if hWnd = 0 then
Exit;

// 显示窗口
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);

// 创建主消息循环,处理消息队列中的消息并分发
// 直至收到WM_QUIT消息,退出主消息循环,并结束程序
// WM_QUIT消息由PostMessage()函数发送
while GetMessage(Msg, hWnd, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
该程序没有使用VCL,它所做的事情就是显示一个窗口,当你在窗口上单击鼠标右键时弹出一个友好的对话框向您问好。如果您从来不曾了解过这些,那么我建议您实际运行一下光盘上的这个程序,对其多一些感性认识。
就是这样一个简单的程序,演示了标准Windows程序的流程:
1、从入口函数WinMain开始
2、注册窗口类及窗口函数(Window Procedure)
3、创建并显示窗口
4、进入主消息循环,从消息队列中获取并分发消息
5、消息被分发后,由Windows操作系统调用窗口函数,由窗口函数对消息进行处理。
在Object Pascal中,我们看不到所谓的“WinMain”函数,不过,其实整个program的begin处就是Windows程序的入口。
注册窗口类通过系统API函数RegisterClass()来完成,它向Windows系统注册一个窗口的类型。
注册窗口类型完成后,就可以创建这个类型的窗口实例,创建出一个真正的窗口通过API函数CreateWindow()来实现。
创建出的窗口实例通过API函数ShowWindow()来使得它显示在屏幕上。
当这一切都完成后,窗口开始进入一个while循环以处理各种消息,直至API函数GetMessage()返回0退出程序。循环中,程序需要从主线程的消息队列中取出各种消息,并将它分发给系统,然后由Windows系统调用窗口的窗口函数(WndProc)以完成窗口对消息的响应处理。
也许你会觉得,写一个Windows应用程序原来是那么繁琐的,需要调用大量的API函数来完成平时看起来很简单的事情,而我们平时使用VCL编写窗口应用程序时,似乎从来没有遇到过这些东西。是的,VCL作为一个Framework为我们做了很多事情,其中的TApplication除了定义一个应用程序的特性及行为外,另一个重要的使命就是封装以上的那些令人讨厌的、繁琐的步骤。
...全文
88 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
TINA 2002-10-21
  • 打赏
  • 举报
回复
哈哈,楼上的,我期待有人出本书叫做
<<Delphi高高高手突破>>
不用vcl,也不用api了,全都用汇编搞定。那样才叫高手呢。

无聊!!!
zwt00 2002-10-19
  • 打赏
  • 举报
回复
期待网上提供电子书籍
chons 2002-10-19
  • 打赏
  • 举报
回复
wait.
ijk1981 2002-10-19
  • 打赏
  • 举报
回复
有人知道有人不知道。
知道的人还不一定写的出来呢。
好歹给人家点面子嘛。
支持!
progray 2002-10-19
  • 打赏
  • 举报
回复
千万不要把VC入门那一套改成PASCAL,那样还不如学VC。期待更好!
my007 2002-10-19
  • 打赏
  • 举报
回复
真无聊,有vcl不用,自己写?
TINA 2002-10-18
  • 打赏
  • 举报
回复
这就是国产特色
TINA 2002-10-18
  • 打赏
  • 举报
回复
写书就是这儿抄点那儿抄点吗,有什么奇怪的
xjspa 2002-10-18
  • 打赏
  • 举报
回复
你的例子我在 delphi2.0 上见过
stanely 2002-10-17
  • 打赏
  • 举报
回复
楼主没有贴出整个一本书的“节选”,明明是在做广告嘛:)
大家给点面子好不好阿?
man8888 2002-10-17
  • 打赏
  • 举报
回复
用Win32 asm就不用VCL了。
吐血推荐!
谁感说下面程序不是windows程序!做出来的程序只有几个K谁都比不上!

.if wParam == 1000
invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL
.elseif wParam == 1900
szText TheMsg,"Assembler, Pure & Simple"
invoke MessageBox,hWin,ADDR TheMsg,ADDR szDisplayName,MB_OK
.endif
z_hongbao 2002-10-17
  • 打赏
  • 举报
回复
gz
hansion3406 2002-09-30
  • 打赏
  • 举报
回复
还好啦....有电子书我就来一本...
michaelpeng7799 2002-09-29
  • 打赏
  • 举报
回复
我认的几个学VC的就是编不出程序来,还告诉我标准模板库是ATL,真好笑
s_x_d 2002-09-29
  • 打赏
  • 举报
回复
收钱的东西不看!!
go_my_sky 2002-09-29
  • 打赏
  • 举报
回复
学vc的都知道,很简单
del_c_sharp 2002-09-29
  • 打赏
  • 举报
回复
呵呵,你为什么不早写呢,等我明白的差不多了才出来
yan_hui 2002-09-29
  • 打赏
  • 举报
回复
GOOD!! 希望你的书早点出来!!!
michaelpeng7799 2002-09-29
  • 打赏
  • 举报
回复
very very good
air_line 2002-09-29
  • 打赏
  • 举报
回复
把那五分给我吧~
Delphi XE2 正式版的破解程序,有效哦。 Delphi XE2 官方完整 delphicbuilder_xe2_win_dl.iso下载地址: http://altd.embarcadero.com/download/radstudio/xe2/delphicbuilder_xe2_win_dl.iso 文件大小: 2.33G MD5: de8b9f897e2ad678643b64898470b707 Delphi Prism XE2 - ISO 1.28G http://altd.embarcadero.com/download/prism/xe2/prism_xe2_win.iso RadPHP XE2 - ISO 343M http://altd.embarcadero.com/download/radphp/xe2/radphp_xe2_win.iso 建议大家用迅雷下载 ************************************** 英巴卡迪诺发布新版RAD Studio XE2开发工具套件 日前,英巴卡迪诺宣布发布新版RAD Studio XE2软件开发工具套件,新版包含了10多年来最深入全面的特性升级。RAD Studio XE2中包含了新版本的Delphi、C++Builder、Prism和RadPHP。主要特性包括完整的Delphi 64位Windows支持,通过全新的FireMonkey富商业应用平台支持Mac OSX和iOS,以及通过RadPHP XE2支持安卓web和移动应用开发。 对Delphi XE2和C++Builder XE2来说,一个极其重要的新特性就是FireMonkey,业界第一款用于创建商业软件的原生的能全面利用到CPU和GPU计算能力的富应用平台。使用 FireMonkey,Delphi和C++Builder开发人员能开发出视觉绚丽的高清和3D应用程序,并与后台的企业级数据库如Oracle、微软 SQL Server、IBM DB2、Sybase和其他数据库互联互通。FireMonkey应用以原生方式运行在Windows PC和Mac上,可以完全利用到现代GPU的处理能力,以不可置信的细节处理能力和优异的性能表现展现数据和用户界面。FireMonkey还可以使 Delphi XE2用户为移动(iOS)设备创建原生的高清和3D应用程序Delphi和C++Builder为应用开发提供原生开发方式,而RadPHP XE2则支持web开发和移动设备应用的开发。使用RadPHP XE2,开发人员可以轻松为移动智能电话和平板电脑创建支持触碰和UI优化的web应用。开发人员可以部署他们的移动Web应用为原生移动应用到苹果公司的iOS应用商店和安卓的应用市场。在他们的移动Web应用中,可以直接访问移动设备的硬件,如相机、GPS和重力感应器。 其他新增特性包括: Delphi XE2 和C++Builder XE2 Delphi XE2包括完整的Windows 64位对FireMonkey、编译器、调试器、RTL 和VCL的支持; dbExpress具有新的对InterBase XE, FireBird 2.5, SQL Anywhere 12 和ODBC的连接能力; 新的DataSnap移动连接器,带有原生的平台组件和示例以创建从移动客户端到Delphi DataSnap服务器的连接,支持安卓(Java), iOS (Objective C), 黑莓(Java) 和Windows Phone 7 (C#); 新增和更新的扩展工具,包括FastReport,用于快速设计和生成报表;Documentation Insight,用于Delphi的源代码文档工具; TeeChart、IBX、InstallAware、IP*Works、Aqtime、FinalBuilder、IntraWeb和Indy 的64位版本。 TeeChart、Indy和FinalBuilder还支持Mac平台; C++Builder XE2中还包含了新的代码审计和QA度量工具; LiveBindings使用户能连接任意类型的信息到任意的FireMonkey用户界面和图形对象上。用户可以绑定实时数据到标准的用户界面控件、高清或3D图形元素上,以创建可视化任意类型数据的崭新方式; RadPHP: 集成式为移动优化的Web开发; 部署应用到Web, iOS, 或安卓; 扩展的Zend框架组件集; Embarcadero Prism: 来自RemObjects的全新的.NET Oxygene编译器; 匿名接口实现; FastReport.net

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧