MiniGUI编程之Helloworld(一)
2012-10-25 16:02
162 查看
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)
********代码********
*********************************
GetMessage(&Msg,hMainWnd)函数从应用程序中取出消息
Msg:消息结构体(用获取的消息填充)
hMainWnd:要获取消息的主窗口句柄
GetMessage返回值分析:
0:获得的消息为MSG-QUIT,将导致消息循环终止,其他返回非0
消息结构体原型:
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)
********代码********
#include <stdio.h> #include <minigui/common.h> #include <minigui/minigui.h> #include <minigui/gdi.h> #include <minigui/window.h> //#include<minigui/control.h> /*窗口消息处理*/ static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) { HDC hdc;//窗口句柄 switch (message) //接受到的消息在这里处理 { case MSG_PAINT: hdc = BeginPaint(hWnd);//绘制窗口 TextOut(hdc, 60, 60, "Hello world!");//显示输出 EndPaint(hWnd, hdc);//结束绘图 return 0; case MSG_CLOSE: DestroyMainWindow(hWnd);//销毁窗口对象 PostQuitMessage(hWnd);//退出消息循环 return 0; } /*当接收到的消息没有对应的处理过程,则交个下面函数处理*/ return DefaultMainWinProc(hWnd, message, wParam, lParam); } int MiniGUIMain(int argc, const char* argv[]) { MSG Msg;//消息数据结构体文章末尾给出 HWND hMainWnd;//窗口句柄 MAINWINCREATE CreateInfo;//窗口结构体,绘图等用到 #ifdef _MGRM_PROCESSES JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);//MiniGui-Processes模式下用到 #endif /*风格设置*/ CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; /*设置主窗口风格,此处设置为可见*/ CreateInfo.dwExStyle = WS_EX_NONE; /*设置主窗口标题*/ CreateInfo.spCaption = "HelloWorld"; /*设置主窗口菜单*/ CreateInfo.hMenu = 0; /*设置主窗口光标系统为系统默认光标*/ CreateInfo.hCursor = GetSystemCursor(0); /*设置主窗口图标*/ CreateInfo.hIcon = 0; /*设置主窗口函数,所有发往该窗口的消息有该函数处理*/ CreateInfo.MainWindowProc = HelloWinProc; /*设置主窗口位置: 左上角(0,0)*/ CreateInfo.lx = 0; CreateInfo.ty = 0; /*设置主窗口位置: 右下角(320,240)*/ CreateInfo.rx = 240; CreateInfo.by = 320; /*设置主窗口背景颜色*/ CreateInfo.iBkColor = COLOR_lightwhite; /*设置主窗口附加数据*/ CreateInfo.dwAddData = 0; /*设置主窗口的托管窗口为桌面*/ CreateInfo.hHosting = HWND_DESKTOP; /*创建主窗口*/ hMainWnd = CreateMainWindow(&CreateInfo); if (hMainWnd == HWND_INVALID) return -1; /*显示主窗口*/ ShowWindow(hMainWnd, SW_SHOWNORMAL); /*消息循环*/ while (GetMessage(&Msg, hMainWnd))//GetMessage函数文章末尾分析 { /*把击键消息转换成MSG_CHAR消息,然后直接发送窗口过程函数*/ TranslateMessage(&Msg); /*调用消息处理窗口过程函数(回调函数),处理完返回函数此函数*/ DispatchMessage(&Msg); } /*清理工作*/ MainWindowThreadCleanup(hMainWnd); return 0; } #ifndef _MGRM_PROCESSES #include <minigui/dti.c> #endif
*********************************
GetMessage(&Msg,hMainWnd)函数从应用程序中取出消息
Msg:消息结构体(用获取的消息填充)
hMainWnd:要获取消息的主窗口句柄
GetMessage返回值分析:
0:获得的消息为MSG-QUIT,将导致消息循环终止,其他返回非0
消息结构体原型:
typedf struct _MSG { HWND hwnd;//消息发往的窗口句柄 int message;//消息标示符,每个消息对应一个整数,在window.h头文件中有预定义 WPARAM wParam;//一个32位的消息参数,其含义跟消息不同而不同 LPARAM lParam;//一个32的消息参数,其含义取决于消息的类型 unsigned int time;//消息放入消息队列的时间 #ifndef LITE VERSION void * pAdd; #endif }MSG,*PMSG;
相关文章推荐
- GTK编程基础---入门篇(helloworld)
- linux编程学习4-从HelloWorld开始
- 【转载】Ubuntu下内核编程之第一个模块helloworld
- minigui界面生成工具的一种简单实现方式,轻松实现Windows/linux minigui 跨平台界面编程
- linux下jni编程指南之——HelloWorld
- 【转载】Ubuntu下内核编程之第一个模块helloworld
- 窥探Swift编程之别样的HelloWorld
- linux下jni编程指南之——HelloWorld
- Android JNI编程(一)——JNI概念以及C语言Dev-C++开发环境搭建、编写HelloWorld
- Google V8编程详解(二)HelloWorld
- 窥探Swift编程之别样的HelloWorld
- openGL编程GLUT配置和“helloworld”
- 利用Eclipse编写minigui的helloworld程序
- MiniGUI编程-细节
- windows编程之helloworld
- mpi编程入门之helloworld
- Linux脚本(shell)编程(一) 简单入门HelloWorld
- OpenCL学习笔记(三):OpenCL安装,编程简介与helloworld
- 简单的RPC编程实践——HelloWorld的实现
- C语言编程入门——HelloWorld!