最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

minigui心得

来源:动视网 责编:小OO 时间:2025-09-28 12:46:07
文档

minigui心得

1.1头文件Helloworld.c的开始包括的四个头文件、、和是所有的MINIGUI应用程序都必须包括的头文件:Common.h包括MINIGUI常用的宏以及数据类型的定义;Minigui.h包括了全局的和通用的接口函数以及某些杂项函数的定义;Gdi.h包含了MINIGUI绘图函数的接口定义;Window.h包含了窗口有关的宏、数据类型、数据结构定义以及函数接口声明。使用预定义控件的MINIGUI应用程序还必须包括另外一个头文件---:Control.h包含了linminigui中所有内建控
推荐度:
导读1.1头文件Helloworld.c的开始包括的四个头文件、、和是所有的MINIGUI应用程序都必须包括的头文件:Common.h包括MINIGUI常用的宏以及数据类型的定义;Minigui.h包括了全局的和通用的接口函数以及某些杂项函数的定义;Gdi.h包含了MINIGUI绘图函数的接口定义;Window.h包含了窗口有关的宏、数据类型、数据结构定义以及函数接口声明。使用预定义控件的MINIGUI应用程序还必须包括另外一个头文件---:Control.h包含了linminigui中所有内建控
1.1头文件

Helloworld.c的开始包括的四个头文件是所有的MINIGUI应用程序都必须包括的头文件:

Common.h 包括MINIGUI常用的宏以及数据类型的定义;

Minigui.h 包括了全局的和通用的接口函数以及某些杂项函数的定义;

Gdi.h 包含了MINIGUI绘图函数的接口定义;

Window.h 包含了窗口有关的宏、数据类型、数据结构定义以及函数接口声明。

使用预定义控件的MINIGUI应用程序还必须包括另外一个头文件---:

Control.h 包含了linminigui 中所有内建控件接口定义。

所以,一个MINIGUI 程序的开始通常包括如下的MINIGUI相关头文件:

#include

#include

#include

#include

#include

1.2程序入口点

一个C程序的入口点为main函数,而一个MINIGUI程序的入口点为MINIGUIMAIN,该函数原型如下:

int MiniGUIMain (int argc, const char* argv[])

1.3设置显示区域

#ifdef _LITE_VERSION

SetDesktopRect(0,0,800,600);

#endif

其中SetDesktopRect是一个宏,定义在头文件minigui.h中,如下:

#define SetDesktopRect (lx, ly ,rx, by)\\

JoinLayer(“”,””,lx, ty, rx, by)

void GUIAPI GetDesktopRect (int* lx, int* ty, int* rx, int* by);

所以,你也可以用JoinLayer 函数来代替SetDesktopRect,来设置程序的桌面显示区域。

1.4创建和显示主窗口

hMainWnd = CreateMainWindow (&CreateInfo);

在使用CreateInfo创建主窗口之前,需要设置它的各项属性。

CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;

设置主窗口风格,这里把窗口设为初始可见的,并具有边框和标题栏。

CreateInfo.dwExStyle = WS_EX_NONE;

设置主窗口的扩展风格,该窗口没有扩展风格。

CreateInfo.spCaption = "Hello, world";

设置主窗口的标题为"Hello, world"

CreateInfo.hMenu = 0;

设置主窗口的主菜单,该窗口没有主菜单。

CreateInfo.hCursor = GetSystemCursor(0);

设置主窗口的光标为系统缺省光标。

CreateInfo.hIcon = 0;

设置主窗口的图标,改窗口没有图标。

CreateInfo.MainWindowProc = HelloWinProc;

设置主窗口过程函数为HelloWinProc,所有发往该窗口的消息由该函数处理。

CreateInfo.lx = 0;

CreateInfo.ty = 0;

CreateInfo.rx = 320;

CreateInfo.by = 240;

设置主窗口在屏幕上的位置,该窗口左上角位于(0,0),右下角位于(320,240)。

CreateInfo.iBkColor = COLOR_lightwhite;

设置主窗口的背景色为白色,COLOR_lightwhite是MINIGUI预定义的像素值。

CreateInfo.dwAddData = 0;

设置主窗口的附加数据,该窗口没有附加数据。

CreateInfo.hHosting = HWND_DESKTOP;

设置主窗口的托管窗口为桌面窗口。

ShowWindow(hMainWnd, SW_SHOWNORMAL);

显示所创建的窗口,第一个参数为

所要显示的窗口句柄,第二个参数指明显示窗口的方式(显示还是隐藏),SW_SHOWNORMAL说明要显示主窗口,并把它置为顶层窗口。

1.5进入消息循环

调用显示窗口函数后,应用程序现在的任务就是执行如下的消息循环代码,不断地从消息队列中取出消息,进行处理:

while (GetMessage(&Msg, hMainWnd)) {

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}

Msg变量是类型为MSG的结构,MSG结构在window.h中定义如下:

typedef struct _MSG

{

/** the handle to the window which receives this message. */

HWND hwnd;

/** the message identifier. */

int message;

/** The first parameter of the message (32-bit integer). */

WPARAM wParam;

/** The second parameter of the message (32-bit integer). */

LPARAM lParam;

#ifdef _LITE_VERSION

unsigned int time;

#else

struct timeval time;

void* pAdd;

#endif

} MSG;

GetMessage函数调用从应用程序的消息队列中取出一个消息:

GetMessage(&Msg, hMainWnd)

该函数调用的第二个参数为要获取消息的主窗口的句柄,第一个参数为一个指向MSG结构的指针,GetMessage函数将用从消息队列中取出的消息来填充该消息结构的各个域,包括:

Hwnd消息发往的窗口的句柄。在helloworld.c程序中,该值与hMainWnd相同。

Message消息标识符。这是一个用于标识消息的整数值。每一个消息均有一个对应的预定义标识符,这些标识符定义在window.h头文件中,以前缀MSG开头。

wParam 一个32位的消息参数,其含义和值根据消息的不同而不同。

lParam 一个32位的消息参数,其含义和值取决于消息的类型。

Time 消息放入消息队列中的时间。

只要从消息队列中取出的消息不为MSG_QUIT,GetMessage就返回一个非0值,消息循环将持续下去。MSG_QUIT消息使GetMessage返回0,导致消息循环的终止。

TranslateMessage(&Msg);

TranslateMessage函数把击键消息转换为MSG_CHAR消息,然后直接发送到窗口过程函数。

DispatchMessage(&Msg);

DispatchMessage函数最终将把消息发往该消息的目标窗口的窗口过程,让它进行处理,在本例中,该窗口过程就是HelloWinproc。也就是说,MiniGUI在 DispatchMessage函数中调用主窗口的窗口过程函数(回调函数)对发往该主窗口的消息进行处理。处理完消息之后,应用程序的窗口过程函数将返回到 DispatchMessage函数中,而 DispatchMessage函数最后又将返回到应用程序代码中,应用程序又从下一个 DispatchMessage函数调用开始消息循环。

1.6窗口过程函数

窗口过程函数是MINIGUI程序的主体部分,应用程序实际所作的工作大部分都发生在窗口过程函数中。

在helloworld.c程序中,窗口过程是名为HelloWinProc的函数。窗口过程函数可以根据程序员任意命

名,CreateMainWindow函数根据MAINWINCREATE结构类型的参数中指定的窗口过程创建主窗口。

窗口过程函数总是定义为如下形式:

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

窗口过程的4个参数与MSG结构的前四个域是相同的。第一个参数hWnd是接收消息的窗口的句柄,它与CreateMainWindow函数的返回值相同,该值标识了接收该信息的特定窗口。第二个参数与MSG结构中的message域相同,它是一个标识窗口所收到消息的整数值,最后两个参数都是32位的消息参数,它提供和消息相关的特定信息。

窗口过程函数不予处理的消息应该传给DefaultMainWinProc函数进行缺省处理,从DefaultMainWinProc返回的值必须由窗口过程返回。

1.7屏幕输出

程序在响应MSG_PAINT消息时进行屏幕输出。应用程序应首先通过调用BeginPaint函数来获得设备上下文句柄,并用它调用GDI函数来执行绘制操作。这里,程序使用TextOut文本输出函数在客户区的中部显示了一个Hello, world!字符串。绘制结束后,应用程序应调用EndPaint函数释放设备上下文句柄。

1.8程序的提出

用户单击窗口右上角的关闭按钮时窗口过程函数将收到一个MSG_CLOSE消息,helloworld程序在收到MSG_CLOSE消息时调用DestroyMainWindow函数销毁主窗口,并调用PostQuitMessage函数在消息队列投入一个MSG_QUIT消息,当GetMessage函数取出MSG_QUIT消息时将返回0,最终导致程序退出消息循环。

程序最后调用 MainWindowThreadCleanup清楚主窗口所使用的消息队列等系统资源并最终由MiniGUIMain返回。

文档

minigui心得

1.1头文件Helloworld.c的开始包括的四个头文件、、和是所有的MINIGUI应用程序都必须包括的头文件:Common.h包括MINIGUI常用的宏以及数据类型的定义;Minigui.h包括了全局的和通用的接口函数以及某些杂项函数的定义;Gdi.h包含了MINIGUI绘图函数的接口定义;Window.h包含了窗口有关的宏、数据类型、数据结构定义以及函数接口声明。使用预定义控件的MINIGUI应用程序还必须包括另外一个头文件---:Control.h包含了linminigui中所有内建控
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top