今年属虎的财运:请教pascal 中 windos单元里怎样应用里面的函数

来源:百度文库 编辑:中科新闻网 时间:2024/05/13 19:02:43
请问windos单元里有什么函数以及怎么用
怎样把程序弄成在window上界面

下面是Dev-pascal中的例子程序, 你可以试一下, 如果你有用C语言开发Windows程序的经验(至少是, 虽没写过, 但看过一些源代码)的话, 会感到很熟悉, 因为只是把C代码换为了Pascal代码:

{$APPTYPE GUI}
{$MODE DELPHI}
program WinHello;

uses
Strings, Windows;

const
AppName = 'WinHello';

function WindowProc(Window: HWnd; AMessage, WParam,
LParam: Longint): Longint; stdcall; export;

var
dc : hdc;
ps : paintstruct;
r : rect;

begin
WindowProc := 0;

case AMessage of
wm_paint:
begin
dc:=BeginPaint(Window,@ps);
GetClientRect(Window,@r);
DrawText(dc,'Hello world by Free Pascal',-1,@r,
DT_SINGLELINE or DT_CENTER or DT_VCENTER);
EndPaint(Window,ps);
Exit;
end;
wm_Destroy:
begin
PostQuitMessage(0);
Exit;
end;
end;

WindowProc := DefWindowProc(Window, AMessage, WParam, LParam);
end;

{ Register the Window Class }
function WinRegister: Boolean;
var
WindowClass: WndClass;
begin
WindowClass.Style := cs_hRedraw or cs_vRedraw;
WindowClass.lpfnWndProc := WndProc(@WindowProc);
WindowClass.cbClsExtra := 0;
WindowClass.cbWndExtra := 0;
WindowClass.hInstance := system.MainInstance;
WindowClass.hIcon := LoadIcon(0, idi_Application);
WindowClass.hCursor := LoadCursor(0, idc_Arrow);
WindowClass.hbrBackground := GetStockObject(WHITE_BRUSH);
WindowClass.lpszMenuName := nil;
WindowClass.lpszClassName := AppName;

Result := RegisterClass(WindowClass) <> 0;
end;

{ Create the Window Class }
function WinCreate: HWnd;
var
hWindow: HWnd;
begin
hWindow := CreateWindow(AppName, 'Hello world program',
ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,
cw_UseDefault, cw_UseDefault, 0, 0, system.MainInstance, nil);

if hWindow <> 0 then begin
ShowWindow(hWindow, CmdShow);
UpdateWindow(hWindow);
end;

Result := hWindow;
end;

var
AMessage: Msg;
hWindow: HWnd;

begin
if not WinRegister then begin
MessageBox(0, 'Register failed', nil, mb_Ok);
Exit;
end;
hWindow := WinCreate;
if longint(hWindow) = 0 then begin
MessageBox(0, 'WinCreate failed', nil, mb_Ok);
Exit;
end;

while GetMessage(@AMessage, 0, 0, 0) do begin
TranslateMessage(AMessage);
DispatchMessage(AMessage);
end;
Halt(AMessage.wParam);
end.

看到了吗? 它的uses子句中只用了Strings与Windows两个单元.
Windows单元中封装了Windows的API, 所以你问有什么函数, 太多了, 一下回答不了, 也记不住. 因为Free pascal是开放源代码的, 所以找一下它的源代码 (在它的官方网站www.freepascal.org就有). 一方面找Windows API的书研究API, 一方面找Windows单元的源代码研究一下, 当然如果你从未进行过Windows编程, 还得找这方面书研究一下, 比如窗口类, 消息什么的.