zoukankan      html  css  js  c++  java
  • Delphi7 API之 MDI窗口创建

    继续上节,我们还是用工程文件创建一个MDI窗口。代码如下:

    program MDIApp;
    
    uses
      Windows,
      Messages;
    
    var
      TheMessage:TMsg;
      FrameWindow,ClientWindow,ChildWindow:HWND;
    
    const
      IDCHILDWND = 100;   //第一个MDI子窗口ID
    {$R *.RES}
    //回调函数
    function FrameWindowProc(TheFrameWindow:HWND;TheMessage,WParam,LParam:LongInt):LongInt;stdcall;
    var
      ClientStruct:TClientCreateStruct;
    begin
      case TheMessage of
      WM_CREATE:
        begin
          ClientStruct.hWindowMenu:=0;
          ClientStruct.idFirstChild:=IDCHILDWND;
    
          ClientWindow  := CreateWindowEx(0,
                      'MDICLIENT',
                      nil,
                      WS_CHILD or
                      WS_CLIPCHILDREN or
                      WS_VISIBLE,
                      0,
                      0,
                      0,
                      0,
                      TheFrameWindow,
                      0,
                      HInstance,
                      @ClientStruct);
          if ClientWindow = 0 then
            begin
              MessageBox(0,'createwindow faild',nil,MB_OK);
              Exit;
            end;
        end;
      WM_DESTROY:
        begin
          PostQuitMessage(0);
          Exit;
        end;
      end;
      Result := DefFrameProc(TheFrameWindow,ClientWindow,TheMessage,WParam,LParam);
    
    end;
    //注册主窗口
    function RegisterFrameClass:Boolean;
    var
      WindowClass:TWndClass;
    begin
      WindowClass.style:=CS_HREDRAW or CS_VREDRAW;
      WindowClass.lpfnWndProc:=@FrameWindowProc;
      WindowClass.cbClsExtra := 0;
      WindowClass.cbWndExtra := 0;
      WindowClass.hInstance := HInstance;
      WindowClass.hIcon := LoadIcon(0,IDI_WINLOGO);
      WindowClass.hCursor:= LoadCursor(0,IDC_ARROW);
      WindowClass.hbrBackground:= COLOR_WINDOW;
      WindowClass.lpszMenuName:= nil;
      WindowClass.lpszClassName:= 'FrameClass';
      Result := windows.RegisterClass(WindowClass)<>0;
    end;
    //注册子窗口
    function RegisterChildClass: Boolean;
    var
      WindowClass:TWndClass;
    begin
       WindowClass.style := CS_HREDRAW or CS_VREDRAW;
       WindowClass.lpfnWndProc:= @DefMDICHildProc;
       WindowClass.cbClsExtra := 0;
       WindowClass.cbWndExtra := 0;
       WindowClass.hInstance := HInstance;
       WindowClass.hIcon := LoadIcon(0,IDI_APPLICATION);
       WindowClass.hCursor := LoadCursor(0,IDC_ARROW);
       WindowClass.hbrBackground := COLOR_WINDOW;
       WindowClass.lpszMenuName := nil;
       WindowClass.lpszClassName := 'ChildClass';
       Result := windows.RegisterClass(WindowClass)<>0;
    end;
    //开始主程序
    begin
      if not RegisterFrameClass then
      begin
        MessageBox(0,'RegisterFrameClass faild',nil,MB_OK);
        Exit;
      end;
      FrameWindow := CreateWindowEx(0,
                                  'FrameClass',
                                  'Frame Window',
                                  WS_OVERLAPPEDWINDOW or
                                  WS_CLIPCHILDREN,
                                  CW_USEDEFAULT,
                                  CW_USEDEFAULT,
                                  CW_USEDEFAULT,
                                  CW_USEDEFAULT,
                                  0,
                                  0,
                                  HInstance,
                                  nil);
      if FrameWindow <> 0 then
      begin
        ShowWindow(FrameWindow,SW_SHOWNORMAL);
        UpdateWindow(FrameWindow);
      end
      else
      begin
        MessageBox(0,'CreateFrameWindow failed',nil,MB_OK);
        Exit;
      end;
       if not RegisterChildClass then
       begin
         MessageBox(0,'RegisterChildClass failed',nil,MB_OK);
         Exit;
       end;
       ChildWindow:= CreateMDIWindow('ChildClass',
                            'Child Window',
                            WS_VISIBLE,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            ClientWindow,
                            HInstance,
                            0);
       if ChildWindow <> 0 then
       begin
         ShowWindow(ChildWindow,SW_SHOWNORMAL);
         UpdateWindow(ChildWindow);
       end
       else
       begin
         MessageBox(0,'CreateChildWindow falid',nil,MB_OK);
         Exit;
       end;
       while GetMessage(TheMessage,0,0,0) do
       begin
         TranslateMessage(TheMessage);
         DispatchMessage(TheMessage);
       end;
    end.

    效果如下:

     

  • 相关阅读:
    python 四舍五入
    Elasticsearch 入门
    Mac下ElasticSearch安装、Kibana
    Mysql 终端中文显示乱码
    Zookeeper 在 Kafka 中的作用
    mac 安装Kafka
    Creating a NuGet Package in 7 easy steps
    Updating and Publishing a NuGet Package
    ASP.NET Core 发布
    An entry point cannot be marked with the 'async' modifier
  • 原文地址:https://www.cnblogs.com/delphi2014/p/4064804.html
Copyright © 2011-2022 走看看