MiniGui--HelloWorld(详解)

#include

#include
#include
#include
#include

 

static int HelloWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam);


int MiniGUIMain(int argc,const char **argv)
{
 MSG Msg;
 HWND hMainWnd;
 MAINWINCREATE CreateInfo;//用于描述一个窗口的各项属性

 //MiniGui-Processes模式下加入层
 //#ifdef _MGRM_PROCESSES//JoinLayer 是 MiniGUI-Processes 模式的专有函数,因此包含在 _MGRM_PROCESSES 宏的条件编译中
 //在 MiniGUI-Processes 运行模式下,每个 MiniGUI 客户端程序在调用其它 MiniGUI 函数之前
 //必须调用该函数将自己添加到一个层中(或创建一个新层)
 //JoinLayer(NAME_DEF_LAYER,"helloworld",0,0);
 //#endif

 //设置主窗口风格,这里把窗口设为初始可见的,并具有边框和标题栏
 CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;

 //设置主窗口的扩展风格,该窗口没有扩展风格。
 CreateInfo.dwExStyle = WS_EX_NONE;

 //设置窗口的标题为"HelloWorld"
 CreateInfo.spCaption = "HelloWorld";

 //设置窗口的主菜单,该窗口没有主菜单
 CreateInfo.hMenu = 0;

 //设置窗口的光标为系统缺省光标
 CreateInfo.hCursor = GetSystemCursor (0);

 //设置窗口的图标,该窗口没有图标
 CreateInfo.hIcon = 0;

 //设置主窗口的窗口过程函数为 HelloWinProc ,所有发往该窗口的消息由该函数处理
 CreateInfo.MainWindowProc = HelloWinProc;
 CreateInfo.lx = 0;
 CreateInfo.ty = 0;
 CreateInfo.rx = 800;
 CreateInfo.by = 480;
 CreateInfo.iBkColor = COLOR_lightwhite;//背景色为白色
 CreateInfo.dwAddData = 0;//设置窗口没有附加数据
 CreateInfo.hHosting = HWND_DESKTOP;//设置主窗口的托管窗口为桌面窗口。

 //创建主窗口,返回值为所创建窗口的句柄
 hMainWnd = CreateMainWindow (&CreateInfo);

 if (hMainWnd == HWND_INVALID)
  return -1;

 //把所创建的窗口显示出来,参数二指明窗口的显示方式(显示还是隐藏)
 ShowWindow (hMainWnd, SW_SHOWNORMAL);//SW_SHOWNORMAL 说明要显示主窗口,并把它置为顶层窗口。

 
 //进入消息循环
 //在发生事件之后, MiniGUI 将事件转换为一个消息,并将消息放入目标程序的消息队列之中。
 //应用程序现在的任务就是执行如下的消息循环代码,不断地从消息队列中取出消息,进行处理
 while (GetMessage (&Msg, hMainWnd))
 {
  //函数把击键消息转换为 MSG_CHAR 消息,然后直接发送到窗口过程函数。
  TranslateMessage (&Msg);

  //把消息发往消息的目标窗口的窗口过程,让窗口过程进行处理。
  DispatchMessage (&Msg);// 所做的工作就是获取消息的目标窗口的窗口过程,然后直接调用该窗口过程函数对消息进行处理。
 }
 
 //DetroyMainWindow 销毁一个主窗口,但不会销毁主窗口所使用的消息队列以及窗口对象本身。
 //因此,应用程序要在线程或进程的最后使用 MainWindowCleaup
 //最终清除主窗口所使用的消息队列以及窗口对象本身。
 MainWindowThreadCleanup (hMainWnd);
 return 0;
}


//窗口过程函数
//第一个参数hWnd是接收消息的窗口的句柄,它与CreateMainWindow 函数的返回值相同,该值标识了接收该消息的特定窗口。
//第二个参数与 MSG 结构中的 message 域相同,它是一个标识窗口所收到消息的整数值。
//最后两个参数都是 32 位的消息参数,它提供和消息相关的特定信息。
//程序通常不直接调用窗口过程函数,而是由 MiniGUI 进行调用;也就是说,它是一个回调函数。
static int HelloWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
 HDC hdc;
 switch (message)
 {
  case MSG_PAINT:
   //应用程序应首先通过调用 BeginPaint 函数来获得设备上下文句柄,
   //并用它调用 GDI 函数来执行绘制操作。
   hdc = BeginPaint (hWnd);
   TextOut (hdc, 60, 60, "Hello world!");
   //调用 EndPaint 函数释放设备上下文句柄。
   EndPaint (hWnd, hdc);
   return 0;

  case MSG_CLOSE://用户单击窗口右上角的关闭按钮时窗口过程函数将收到一个 MSG_CLOSE 消息
   DestroyMainWindow (hWnd); //主窗口的销毁
   PostQuitMessage (hWnd); //发送MSG_QUIT消息
   return 0;
 }
 return DefaultMainWinProc (hWnd, message, wParam, lParam);
}

你可能感兴趣的:(MiniGui)