zoukankan      html  css  js  c++  java
  • Windows 编程[6] 学习窗体生成的过程六: 最终的代码!

    program Project1;
    
    uses
      Windows, Messages;
    
    {回调函数; 其中要处理的消息很多, 最好用 case 语句}
    function WndProc(wnd: HWND; msg: UINT; wParam: Integer; lParam: Integer): Integer; stdcall;
    begin
      Result := 0;
      case msg of
        WM_DESTROY: PostQuitMessage(0); {收到 WM_DESTROY 后, 发送 WM_QUIT 消息指示退出}
      else
        {其他消息交 DefWindowProc 处理; DefWindowProc 会返回回调函数需要的返回值}
        Result := DefWindowProc(wnd, msg, wParam, lParam);
      end;
    end;
    
    {登记与注册窗口类的函数}
    function RegMyWndClass: Boolean;
    var
      MyWndClass: TWndClass;
    begin
      {指定窗口类型}
      MyWndClass.style         := CS_HREDRAW or CS_VREDRAW;  {改变大小时重绘}
      MyWndClass.lpfnWndProc   := @WndProc;                  {回调函数指针}
      MyWndClass.cbClsExtra    := 0;                         {没有额外的窗口类信息}
      MyWndClass.cbWndExtra    := 0;                         {没有额外的窗口信息}
      MyWndClass.hInstance     := HInstance;                 {程序实例句柄}
      MyWndClass.hIcon         := 0;                         {没指定图标}
      MyWndClass.hCursor       := LoadCursor(0, IDC_ARROW);  {选用了系统提供的指针}
      MyWndClass.hbrBackground := HBRUSH(COLOR_BTNFACE + 1); {背景色使用 Windows 默认的按钮颜色}
      MyWndClass.lpszMenuName  := nil;                       {不指定默认菜单}
      MyWndClass.lpszClassName := 'MyWindowClass';           {给窗口类型命名}
    
      Result := RegisterClass(MyWndClass) <> 0;              {注册窗口类型}
    end;
    
    {主程序}
    var
      hWnd: THandle;
      Msg : TMsg;
    begin
      {调用登记与注册窗口的函数}
      if not RegMyWndClass then
      begin
        MessageBox(0, '窗口类注册失败!', '提示', MB_OK + MB_ICONERROR);
        Exit;
      end;
    
      {建立窗口并返回句柄; 既然有 CreateWindowEx 就不使用 CreateWindow 了}
      hWnd := CreateWindowEx(0,                      {不使用扩展风格}
                             'MyWindowClass',        {窗口类型名}
                             '新窗口',               {标题}
                             WS_OVERLAPPEDWINDOW,    {窗口的常规样式}
                             Integer(CW_USEDEFAULT), {默认水平位置}
                             Integer(CW_USEDEFAULT), {默认垂直位置}
                             Integer(CW_USEDEFAULT), {默认宽度}
                             Integer(CW_USEDEFAULT), {默认高度}
                             0,                      {无父窗口}
                             0,                      {无主菜单}
                             HInstance,              {实例句柄}
                             nil                     {无附加信息}
                             );
    
      if hWnd = 0 then {如果窗口建立失败}
      begin
        MessageBox(0, '窗口建立失败!', '提示', MB_OK + MB_ICONERROR);
        Exit;
      end;
    
      {显示窗口与更新窗口}
      ShowWindow(hWnd, SW_SHOWNORMAL);
      UpdateWindow(hWnd);
    
      {消息循环; GetMessage 在收到 WM_QUIT 消息时会返回 False, 从而终止循环}
      while(GetMessage(Msg, 0, 0, 0)) do
      begin
        TranslateMessage(Msg); {需要对部分键盘消息的再处理}
        DispatchMessage(Msg);  {将消息发送给回调函数}
      end;
      Halt(Msg.wParam); {没有了消息循环程序自然会退出; 加上这句, 程序会根据退出码主动退出}
    end.
    
  • 相关阅读:
    java中的拷贝(二)深克隆
    java中的拷贝(一)
    java类的访问权限
    对象和对象引用
    equals和==
    类与继承(一)
    WebSocket简单介绍
    php获取请求的方式(get/post)
    php 使用jquery实现ajax
    PHP 系统常量及自定义常量
  • 原文地址:https://www.cnblogs.com/del/p/1155809.html
Copyright © 2011-2022 走看看