科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Delpih 中的Windows API编程初步

Delpih 中的Windows API编程初步

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

使用RAD类型工具的人越来越多了,虽然我对于RAD类的工具向来不多作评议,但我还是常常使用的。

作者:潇潇 来源:天极网 2007年10月31日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
八、初步的封装, 面向过程的方式的编写

  可以看到对于任何一个Windows程序的创建和运行都要经过上面的几个步骤,而且这些步骤又很有条理,所以我们又可以将不同的功能封装在几个命名规范且容易理解的函数之中。下面是修改后的程序代码:

program Project1;
{ $ APPTYPE CONSOLE }
uses
Windows ,
Messages ;
{ uses
 SysUtils ; }
var
wClass : TWndClass; // 主窗口类
hInst , //应用程序句柄
Handle : HWnd ; // 主窗口
aMsg : TMsg ; //消息
RCT : TRect ; //区域
ps : TPaintStruct ; //显示
dc : hdc ; //设备上下文

//函数:WindowProc
//作用:处理主窗口的消息

function WindowProc ( hWnd , Msg , wParam , lParam : Longint ) : Longint ; stdcall ;
begin
 WindowProc : = 0 ;
 case Msg of
  WM_PAINT :
  begin
   dc : =BeginPaint ( hWnd , ps ) ;
   GetClientRect ( hWnd , RCT ) ;
   DrawText ( dc , ' hello , world ! ' , -1 , RCT , Dt_SINGLELINE or DT_CENTER or DT_VCENTER ) ;
   EndPaint ( hWnd , ps ) ;
   Exit ;
  end ;
  WM_DESTROY : //结束应用程序
  Begin
   PostQuitMessage ( 0 ) ;
   Exit ;
  end ;
 end ;
 Result : = DefWindowProc ( hWnd , Msg , wParam , lParam ) ; //消息默认处理
end ;

//函数:WinRegister
//作用:注册窗口类

function WinRegister : Boolean ;
begin
 with wClass do //初始化窗口类
 begin
  hInstance : = system.MainInstance ;
  Style : = CS_HREDRAW or CS_VREDRAW ;
  HIcon : = LoadIcon ( 0 , IDI_APPLICATION ) ;
  LpfnWndProc : = @WindowProc ;
  HbrBackground : = GetStockObject ( WHITE_BRUSH ) ;
  lpszClassName : = ' Sample Class ' ;
  hCursor : = LoadCursor ( 0 , IDC_ARROW ) ;
 end ;
 ReSult : = RegisterClass ( wClass ) <> 0 ; // 注册窗口类 end ;
 //函数:WinCreate
 //作用:创建窗口
 function WinCreate : HWnd ;
 begin
  //创建主窗口
  Handle : = CreateWindow (' Sample Class ' , // 窗口类名
       ' Windows API在Delphi中的应用 ' , //窗口标题
       WS_OVERLAPPEDWINDOW or WS_VISIBLE , // 窗口风格
       10 , //左边界坐标
       10 , //上边界坐标
       400 , // 宽度
       300 , // 高度
       0 , // 父窗口句柄
       0 , //菜单句柄
       system . MainInstance , // 应用程序实例
       nil //创建窗口的附加参数
  ) ;

 if Handle <> 0 then
 begin
  ShowWindow ( Handle , SW_SHOW ) ;
  UpdateWindow ( Handle ) ;
 end ;
 Result : = Handle ;
 end ;

 //主窗口
 //程序的进入点
 begin
 if not WinRegister then //调用函数:WinRegister注册窗口类
 begin
  MessageBox ( 0 , ‘ Register failed ‘ , nil , MB_OK ) ;
  Exit ;
 end ;
 Handle : = WinCreate ; //调用函数:WinCreate创建窗口
 if longint ( Handle ) = 0 then
 begin
  MessageBox ( 0 , ‘ WinCreate failed ‘ , nil , MB_OK ) ;
  Exit ;
 end;
 while ( GetMessage ( aMsg , Handle , 0 , 0 ) ) do //消息循环
 begin
  TranslateMessage ( aMsg ) ; //翻译消息
  DispatchMessage ( aMsg ) ; //发送消息
 end ;
end .
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章