张志峰的博客

水滴石川,积少成多。

导航

Delphi 纯Pascal编写的程序,没有通过VCL

Posted on 2011-07-12 12:14  ╰★张志峰★╮  阅读(584)  评论(0编辑  收藏  举报

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.