minigui之初学习(1)----hello word

本文介绍MiniGUI的不同模式及其应用场景,并通过一个简单的HelloWorld示例详细解释了如何使用MiniGUI创建窗口、处理消息以及绘制基本图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

minigui资料:http://www.360doc.com/content/13/0830/20/7377734_311029487.shtml

                        https://blog.youkuaiyun.com/HiRuyue/article/details/11703695

MiniGUI由飞漫公司于1998年为嵌入式平台开发的基于framebuffer图像库,至今以发展的非常完善!目前大致可以分为三种模式:

1.MiniGui-Threads,运行在MiniGui-Threads的程序可以再不同的线程中建立多个窗口,但是所有的窗口在一个进程或者地址空间中运行。
适用范围:uC/OS-ll,eCos,VxWorks,pSOS等无内存单元cpu的系统(Linux和uClinux上也可)
 2.MiniGui-Standalone,可以以独立进程的方式运行,不需要多线程和多进程的支持。
 适用范围:功能单一的应用场合,如uClinux的嵌入式产品
 3.MiniGui-Processes,和MiniGui-Threads相反,每个进程是独立的进程,每个进程可以有多个窗口。

然后其中MiniGui-Processes模式应用颇为广泛!

MiniGui是基于消息驱动的图像化编程,比如一个创建一个主窗口,那么MiniGui会为这个进程创建一个消息队列,当一个事件被触发以后会被转化成消息发送到这个消息队列当中,然后执行响应的过程函数进行处理。下面一个个经典的HelloWorld例子来讲解!

好了看完代码来分析一下,做个win32图像编程的很容易上手!

大概步骤:

1.首先是定义窗口对象CreateInfo;

2.初始化工作,设置CreateInfo的一些属性和对应的过程函数等;

3.创建主窗口CreateMainWindow(&CreateInfo);

4.显示窗口ShowWindow(hMainWnd, SW_SHOWNORMAL);

5.消息轮询,从消息队列中获取消息以及消息响应;

编译选项:gcc -o hello helloworld.c -lminigui -ljpeg -lpng -lz (如果为Thread模式加上 -lpthread)

********代码********

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2. #include <minigui/common.h>  
  3. #include <minigui/minigui.h>  
  4. #include <minigui/gdi.h>  
  5. #include <minigui/window.h>  
  6. //#include<minigui/control.h>  
  7. /*窗口消息处理*/  
  8. static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)  
  9. {  
  10.  HDC hdc;//窗口句柄  
  11.  switch (message) //接受到的消息在这里处理  
  12.  {  
  13.  case MSG_PAINT:  
  14.   hdc = BeginPaint(hWnd);//绘制窗口  
  15.   TextOut(hdc, 60, 60, "Hello world!");//显示输出  
  16.   EndPaint(hWnd, hdc);//结束绘图  
  17.   return 0;  
  18.  case MSG_CLOSE:  
  19.   DestroyMainWindow(hWnd);//销毁窗口对象  
  20.   PostQuitMessage(hWnd);//退出消息循环  
  21.   return 0;  
  22.  }  
  23.  /*当接收到的消息没有对应的处理过程,则交个下面函数处理*/  
  24.  return DefaultMainWinProc(hWnd, message, wParam, lParam);  
  25. }  
  26.   
  27. int MiniGUIMain(int argc, const char* argv[])  
  28. {  
  29.  MSG Msg;//消息数据结构体文章末尾给出  
  30.  HWND hMainWnd;//窗口句柄  
  31.  MAINWINCREATE CreateInfo;//窗口结构体,绘图等用到  
  32. #ifdef _MGRM_PROCESSES  
  33.  JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);//MiniGui-Processes模式下用到  
  34. #endif  
  35.  /*风格设置*/  
  36.  CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;  
  37.  /*设置主窗口风格,此处设置为可见*/  
  38.  CreateInfo.dwExStyle = WS_EX_NONE;  
  39.  /*设置主窗口标题*/  
  40.  CreateInfo.spCaption = "HelloWorld";  
  41.  /*设置主窗口菜单*/  
  42.  CreateInfo.hMenu = 0;  
  43.  /*设置主窗口光标系统为系统默认光标*/  
  44.  CreateInfo.hCursor = GetSystemCursor(0);  
  45.  /*设置主窗口图标*/  
  46.  CreateInfo.hIcon = 0;  
  47.  /*设置主窗口函数,所有发往该窗口的消息有该函数处理*/  
  48.  CreateInfo.MainWindowProc = HelloWinProc;  
  49.  /*设置主窗口位置: 左上角(0,0)*/  
  50.  CreateInfo.lx = 0;  
  51.  CreateInfo.ty = 0;  
  52.  /*设置主窗口位置: 右下角(320,240)*/  
  53.  CreateInfo.rx = 240;  
  54.  CreateInfo.by = 320;  
  55.  /*设置主窗口背景颜色*/  
  56.  CreateInfo.iBkColor = COLOR_lightwhite;  
  57.  /*设置主窗口附加数据*/  
  58.  CreateInfo.dwAddData = 0;  
  59.  /*设置主窗口的托管窗口为桌面*/  
  60.  CreateInfo.hHosting = HWND_DESKTOP;  
  61.   
  62.  /*创建主窗口*/  
  63.  hMainWnd = CreateMainWindow(&CreateInfo);  
  64.  if (hMainWnd == HWND_INVALID)  
  65.   return -1;  
  66.  /*显示主窗口*/  
  67.  ShowWindow(hMainWnd, SW_SHOWNORMAL);  
  68.  /*消息循环*/  
  69.  while (GetMessage(&Msg, hMainWnd))//GetMessage函数文章末尾分析  
  70.  {  
  71.   
  72.   /*把击键消息转换成MSG_CHAR消息,然后直接发送窗口过程函数*/  
  73.   TranslateMessage(&Msg);  
  74.   /*调用消息处理窗口过程函数(回调函数),处理完返回函数此函数*/  
  75.   DispatchMessage(&Msg);  
  76.  }  
  77.  /*清理工作*/  
  78.  MainWindowThreadCleanup(hMainWnd);  
  79.  return 0;  
  80. }  
  81.   
  82. #ifndef _MGRM_PROCESSES  
  83. #include <minigui/dti.c>  

    *********************************

    GetMessage(&Msg,hMainWnd)函数从应用程序中取出消息
    Msg:消息结构体(用获取的消息填充)
    hMainWnd:要获取消息的主窗口句柄
    GetMessage返回值分析:
     0:获得的消息为MSG-QUIT,将导致消息循环终止,其他返回非0

    消息结构体原型:

    [cpp]  view plain  copy
    1. typedf struct _MSG  
    2. {  
    3.  HWND hwnd;//消息发往的窗口句柄  
    4.  int message;//消息标示符,每个消息对应一个整数,在window.h头文件中有预定义  
    5.  WPARAM wParam;//一个32位的消息参数,其含义跟消息不同而不同  
    6.  LPARAM lParam;//一个32的消息参数,其含义取决于消息的类型  
    7. unsigned int time;//消息放入消息队列的时间  
    8. #ifndef LITE VERSION  
    9.  void * pAdd;  
    10. #endif  
    11. }MSG,*PMSG;  
  84. #endif 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值