GUI学习笔记之一--“Hello world”程序

  因为工作需要,开始接触GUI,首先对GUI的运行过程有一个初步的了解。一般是先在程序入口函数fnGUI_AppMain中调用fnGUI_SetDesktopRect 函数来设置桌面,然后定义主窗口的各种属性pCreateInfo,根据设定的属性调用fnGUI_CreateMainWindow 创建主窗口,接着是消息循环传递机制,

while( fnGUI_GetMessage(&Msg, HWND_DESKTOP) )
{
fnGUI_(&Msg);
fnGUI_(&Msg);
}

利用GetMessage检索与HWND窗口有关的消息,利用TranslateMessage转换消息,利用DispatchMessage发送消息,实际就是让接收对象的窗口过程去响应该消息,最后需调用fnGUI_DestroyMainWindow 函数释放该主窗口占用的系统资源和调用fnGUI_MainWindowCleanup 函数将保存指定主窗口属性的空间清空释放。下面是GUI的运行过程:

1)创建GUI 任务,启动GUI 系统的运行。
2)GUI 系统进行初始化
3)进入用户入口函数fnGUI_AppMain,构建用户界面。
4)进入消息循环,等待输入
5)当接收到QUIT 消息时退出消息循环,卸载GUI,销毁GUI 任务

 以下是GUI"hello world"程序:

 

代码
   
     
#include < string .h >

// 添加头文件
#include " sysGUI.h "

// 消息处理函数
T_WORD ControlTestWinProc(T_GUI_HWND hWnd, T_WORD message,
T_GUI_WPARAM wParam, T_GUI_LPARAM lParam)
{
  switch (message)
  {
    case MSG_PAINT:
    {
      T_GUI_HDC hdc;
      T_GUI_Rect rect;
      T_WORD x,y;
      fnGUI_GetClientRect (hWnd,
& rect);
      hdc
= fnGUI_BeginPaint (hWnd); /* 获取作图用的DC */
      /* 计算文字显示的起始位置,是相对于hdc所属窗口客户区左上角的坐标 */
      x
= (rect.right - rect.left) / 2 ;
      y
= (rect.bottom - rect.top) / 2 ;
      x
= x - strlen( " Hello,world " ) * fnGUI_GetCharWidth() / 2 ;
      fnGUI_TextOut (hdc,x,y,
" Hello,World " );
      fnGUI_EndPaint (hWnd,hdc);
      break ;
    }
    //主窗口关闭,销毁主窗口自己
    case MSG_CLOSE:
      fnGUI_DestroyMainWindow(hWnd);
      break ;
  }
  //将消息交由系统作缺省处理
  return fnGUI_DefaultMainWinProc(hWnd, message, wParam, lParam);

}

// 构建窗口属性
T_MODULE T_VOID InitCreateInfo(T_GUI_pMainWinCreate pCreateInfo)
{
  pCreateInfo
-> dwStyle = WS_CAPTION | WS_BORDER | WS_MINIMIZEBOX
  | WS_MAXIMIZEBOX | WS_VISIBLE;
  pCreateInfo
-> dwExStyle = WS_EX_NONE;
  pCreateInfo
-> spCaption = " the first window " ;
  pCreateInfo
-> hMenu = 0 ;
  pCreateInfo
-> hIcon = 0 ;
  
  // 调用消息处理函数
  pCreateInfo -> MainWindowProc = ControlTestWinProc;
  pCreateInfo
-> lx = 5 ;
  pCreateInfo
-> ty = 5 ;
  pCreateInfo
-> rx = 154 ;
  pCreateInfo
-> by = 234 ;
  pCreateInfo
-> iBkColor = COLOR_LIGHTWHITE;
  pCreateInfo
-> dwAddData = 0 ;
  pCreateInfo
-> hHosting = HWND_DESKTOP;
}

// 程序主入口函数
T_WORD fnGUI_AppMain()
{
  T_GUI_Msg Msg;
  T_GUI_MainWinCreate CreateInfo;
  T_GUI_HWND hMainWnd;
  fnGUI_SetDesktopRect (
0 , 0 , 159 , 239 );
  InitCreateInfo(
& CreateInfo);
  hMainWnd
= fnGUI_CreateMainWindow( & CreateInfo);
  if (hMainWnd == HWND_INVALID)
  return - 1 ;
  while ( fnGUI_GetMessage( & Msg, HWND_DESKTOP) )
  {
    fnGUI_TranslateMessage(
& Msg);
    fnGUI_DispatchMessage(
& Msg);
  }
  //清空释放保存主窗口属性的空间
  fnGUI_MainWindowCleanup(hMainWnd);
  return 0 ;
}

你可能感兴趣的:(Hello world)