Delphi中控制台程序和创建窗体并响应事件(不使用VCL创建窗体)

本文介绍了如何在Delphi中使用WindowsAPI创建一个简单的窗口,处理WM_CLOSE和WM_LBUTTONDOWN消息,并实现基本的消息循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


program WindowDemo;

//{$APPTYPE CONSOLE}

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值