奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> Delphi >> Delphi下用Windows API创建窗体
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • Delphi实现网页表单数

  • 用Delphi开发Web服务数

  • Delphi中利用钩子实现

  • 一个判断定文件是否为

  • 把Flash文件转换为Exe

  • 用Delphi实现文件下载

  • Delphi中保存图像列表

  • 基于Delphi的接口编程

  • Delphi下用Windows API创建窗体
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-22


    //   Delphi 下调用Windows API 创建窗体.       //
    //  模板-------BY Hottey 2004-4-13-0:18       //
    //  作者网站:http://asp.itdrp.com/hottey      //
    program delphi;

    uses
      windows,
      messages;

    const
      hellostr='Hello World!';

    {$R delphi.res}


    //窗口消息处理函数.
    function MyWinProc(hWnd:THandle;uMsg:UINT;wParam,lParam:Cardinal):Cardinal;exp
    ort;stdcall;

    var
      hdca,hdcb:THandle;         //设备描述表句柄.
      rect:TRect;                //矩形结构.
      font:HFont;
      ps:TPaintStruct;           //绘图结构.
    begin
      result:=0;
      case uMsg of
        WM_PAINT:
          begin
            hdca:=BeginPaint(hWnd,ps);
            SetBkMode(hdca, Transparent);
            SetBkColor(hdca,GetBkColor(hdca));
            GetClientRect(hWnd,rect);      //获取窗口客户区的尺寸.
            DrawText(hdca,Pchar(hellostr),-1,rect,DT_SINGLELINE or DT_CENTER or DT
    _VCENTER);
    //      TextOut(hdc,100,40,hellostr,Length(hellostr));
            EndPaint(hWnd,ps);
          end;
        WM_CREATE:
          begin
            hdcb  := GetDC(hWnd);
            font  := CreateFont(45, 0, 0, 0, FW_normal, 0, 0, 0, ansi_charset, out
    _default_precis, clip_default_precis,
            default_quality, 34, PChar('Arial'));
            SelectObject(hdcb, font);
            ReleaseDC(hWnd, hdcb);
          end;
        WM_DESTROY:
          PostQuitMessage(0)
        else
    //使用缺省的窗口消息处理函数.
          result:=DefWindowProc(hWnd,uMsg,wParam,lParam);
        end;
    end;

    //主程序开始.

    var
      Msg        :TMsg;          //消息结构.
      hWnd,hInst :THandle;       //Windows 窗口句柄.
      WinClass   :TWndClassEx;   //Windows 窗口类结构.
    begin
      hInst:=GetModuleHandle(nil); // get the application instance
      WinClass.cbSize:=SizeOf(TWndClassEx);
      WinClass.lpszClassName:='MyWindow';         //类名.
      WinClass.style:=CS_HREDRAW or CS_VREDRAW or CS_OWNDC;
      WinClass.hInstance:=hInst;              //程序的实例句柄.
    //设置窗口消息处理函数.
      WinClass.lpfnWndProc:=@MyWinProc;           //窗口过程.
      WinClass.cbClsExtra:=0;                     //以下两个域用于在类结构和Window
    s内部保存的窗口结构
      WinClass.cbWndExtra:=0;                     //中预留一些额外空间.
      WinClass.hIcon:=LoadIcon(hInstance,MakeIntResource('MAINICON'));
      WinClass.hIconsm:=LoadIcon(hInstance,MakeIntResource('MAINICON'));
      WinClass.hCursor:=LoadCursor(0,IDC_Arrow);
    //GetStockObject 获取一个图形对象,在这里是获取绘制窗口背景的刷子,返回一个白色刷
    子的句柄.
      WinClass.hbrBackground:=HBRUSH(GetStockObject(white_Brush));
      WinClass.lpszMenuName:=nil;                 //指定窗口类菜单.

    //向Windows 注册窗口类.
      if RegisterClassEx(WinClass)=0 then
      begin
        MessageBox(0,'Registeration Error!','SDK/API',MB_OK);
        Exit;
      end;

    //建立窗口对象.
      hWnd:=CreateWindowEx(
                     WS_EX_OVERLAPPEDWINDOW,                 //扩展的窗口风格.
                     WinClass.lpszClassName,                 //类名.
                     'Hello Window',                         //窗口标题.
                     WS_OVERLAPPEDWINDOW,                    //窗口风格.
                     CW_USEDEFAULT,                          //窗口左上角相对于屏幕
    左上角的初始位置x.
                     0,                                      //....右y.
                     CW_USEDEFAULT,                          //窗口宽度x.
                     0,                                      //窗口高度y.
                     0,                                      //父窗口句柄.
                     0,                                      //窗口菜单句柄.
                     hInst,                                  //程序实例句柄.
                     nil);                                   //创建参数指针.
      if hWnd<>0 then
         begin
           ShowWindow(hWnd,SW_SHOWNORMAL);        //显示窗口.
           UpdateWindow(hWnd);                    //指示窗口刷新自己.
           SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);

         end
      else
         MessageBox(0,'Window not Created!','SDK/API',MB_OK);

    //主消息循环程序.  
      while GetMessage(Msg,0,0,0) do
      begin
        TranslateMessage(Msg);                   //转换某些键盘消息.
        DispatchMessage(Msg);                    //将消息发送给窗口过程.
      end;
    end.

    >其实Windows 编程是每个学写程序的人都要掌握的,学Delphi时也最好能先学习Windos编
    程(最少要知道).以上代码虽说不如在Delphi中直接来个New->Form来的快,但它能告诉你本
    质的东西.能让你更好的了解消息循环以及其他.而这些正是让New出来的窗体给掩盖的部分
    .
    >注:以上代码是我从Windows 程序设计上通过C++语法直译过来的(),测试后没有问题.若我
    的注解有什么错误的地方,请各位指正!^_^
      
    hottey 于2004-5-19
    作者网站:http://asp.itdrp.com/hottey  (附例程)

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.