/*************************************************************
*MINIGUI显示HELLOWORLD 学习笔记
*
**************************************************************/
#include
#include
#include
#include
#include
/* common.h 包括MINIGUI常用的宏以及数据类型的定义
* minigui.h 包含了全局的和通用的接口函数以及某些杂项函数的定义
* gdi.h 包含了MINIGUI绘图函数的接口定义
* window.h 包含了窗口有关的宏、数据类型、数据结构定义以及函数接口声明
* 使用预定义控件的MINIGUI应用程序还必须包括另外一个头文件
*
* 一个MINIGUI程序的入口点为MiniGuiMain,该函数原型如下:
* int MiniGUIMain (int argc,const char* argv[])
*/
Static int HelloWinProc(HWND hWnd, int message ,WPARAM wParam,LPARAM lParam)
//窗口过程函数
{
HDC hdc;
Swtch (message)
{
Case MSG_PAINT:
Hdc = BeginPaint (hwnd);
Textout (hdc,100,100,”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 hMain;
MAINWINCREATE CreateInfo;
/******************************
*设置显示区域
*可以用JoinLayer函数来代替SetDesktopRect
*/
#ifdef _LITE_VERSION
SetDesktopRect(0,0,800,600);
#endif
CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
/*设置主窗口的风格,这里把窗口设置为初始可见的,并具有边框和标题栏*/
CreateInfo.dwExStyle = WS_EX_NONE;
/*设置主窗口的扩展风格,该窗口没有扩展风格*/
CreateInfo.spCaption = “HelloWord”;
/*设置主窗口的标题为“HelloWorld”*/
CreateInfo.hMenu = 0;
/*设置主窗口的主菜单,该窗口没有主菜单*/
CreateInfo.hCurso r =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;
/*设置主窗口的背景色为白色*/
CreateInfo.dwAddData = 0;
/*设置主窗口的附加数据,该窗口没有附加数据*/
CreateInfo.hHosting = HWND_DESKTOP;
/ *设置出窗口的托管窗口为桌面窗口*/
/**
*创建和显示主窗口,调用CreateMainWindow函数来创建一个主窗口
*其参数是指向MAINWINCREATE结构的指针,返回值为所创建主窗口的句柄
*/
hMainWnd = CreateMainWindow (&CreateInfo);
if (hMainWnd == HWND_INVALID)
return -1;
ShowWindow(hMainWnd,SW_SHOWNORMAL);
/*在调用ShowWindow函数之后,主窗口就会显示在屏幕上,在发生时间之后,minigui将事件
转换为一个消息,并将消息放入目标程序的消息队列之中,应用程序现在的任务就是执行如
下的消息循环代码,不断地从消息队列中取出消息进行处理*/
While (GetMessage(&Msg,hMainWnd)) //从消息队列中取出一个消息
{
TranslateMessage(&Msg);//将击键消息转换为MSG_CHAR消息,然后发送
DispatchMessage(&Msg);//窗口过程函数,将消息发往该消息的目标窗口窗口过程
}
MainWindowThreadCleanup(hMainWnd);
Return 0;
}
#ifndef _LITE_VERSION
#include
#endif
/****************************
程序在相应MSG_PAINT消息时进行屏幕输出。应用程序应首先通过调用BeginPaint函数来获得
设备上下文句柄,并用它调用GDI函数来执行绘制操作。这里,程序使用TextOut文本输出函数
在客户区的中部显示了一个“hello world!”字符串。绘制结束之后,应用程序应调用Endpaint函
数释放设备上下文句柄。单击窗口右上角的关闭按钮时窗口过程函数将收到一个 MSG_CLOSE消息。
Helloworld程序在收到MSG_CLOSE消息时调用DestroyMainWindows函数销毁主窗口,并
调用PostQuitMessage函数在消息队列中投入一个MSG_OUT消息。当GetMessage函数取出MSG_QUIT消息
时返回0,最终导致程序退出消息循环。
程序最后调用MainWindowThreadCleanup清除主窗口所使用的消息队列等系统资源并最终
由MiniGUIMain返回。************************************************************/