用最原始的方法编制程序
Delphi 将几乎所有我们要用到的东西进行了封装,让程序员以面向对象的方法来快速高效地完成任务。正如使用
MFC 编写程序,其生成的最终可执行文件要比使用纯 C 语言编制的程序大得多,Delphi生成的最终程序往往很大。
其实 Delphi 本质上仍是一种编程语言,只不过它的可视化特性太过强大,使得程序员往往忘了这一点。使用纯 C 语言编制 Windows
应用程序的朋友都知道,常规的方法是为 Windows 提供一个回调函数,在这个回调函数中处理各种消息,而程序的入口是一个名为 WinMain
的函数。
如果将 Delphi 看成一个单纯的 PASCAL 语言,就可以按上述的常规方法编制程序,下面就是这样一个例子,最终生成的可执行程序十分小,只有不到10KB。使用
C 语言编程的朋友可得会觉得下面的代码很眼熟。
program MyApp;
uses Windows, Messages;
function AppWindowProc( hWnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM):LRESULT;
stdcall; // 回调函数
begin
Result := 0;
case uMsg of WM_DESTROY:begin
PostQuitMessage(0);
Exit;
end;
end;
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
end;
var
wc: TWndClass;
hWnd: Integer;
MSG: TMsg;
begin // 程序从这里开始执行
wc.style := CS_VREDRAW or CS_HREDRAW;
wc.lpfnWndProc := @AppWindowProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hIcon := LoadIcon(0, IDI_APPLICATION);
wc.hCursor := LoadCursor(0, IDC_ARROW);
wc.hbrBackground := (COLOR_BTNFACE+1);
wc.lpszMenuName := nil;
wc.lpszClassName := 'My App';
if RegisterClass(wc)=0 then Exit;
hWnd := CreateWindow( wc.lpszClassName, 'TEST', WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0,
HInstance, nil);
if hWnd=0 then Exit;
ShowWindow(hWnd, SW_SHOWNORMAL);
while GetMessage(MSG, 0, 0, 0) do
begin
TranslateMessage(MSG);
DispatchMessage(MSG);
end;
Halt(MSG.wParam);
end.
|