第一个helloworld.c实例

/*
 *	helloworld.c 的开始所包括的四个头文件<minigui/common.h>、<minigui/minigui.h>、
 *	<minigui/gdi.h> 和 <minigui/window.h> 是所有的MiniGUI 应用程序都必须包括的头文件:
 */
#include <stdio.h>
#include <minigui/common.h>		//包括MiniGUI 常用的宏以及数据类型的定义。
#include <minigui/minigui.h>	//包含了全局的和通用的接口函数以及某些杂项函数的定义。
#include <minigui/gdi.h>		//包含了 MiniGUI 绘图函数的接口定义。
#include <minigui/window.h>		//包含了窗口有关的宏、数据类型、数据结构定义以及函数接口声明。

//使用预定义控件的MiniGUI 应用程序还必须包括另外一个头文件— —<minigui/control.h>:
//control.h 包含了 libminigui 中所有内建控件的接口定义。

/*
 *在helloworld.c 程序中,窗口过程是名为HelloWinProc 的函数。窗口过程函数可以由程序员任意命名,
 *CreateMainWindow 函数根据MAINWINCREATE 结构类型的参数中指定的窗口过程创建主窗口。
 *窗口过程的4 个参数与MSG 结构的前四个域是相同的。
 *第一个参数hWnd 是接收消息的窗口的句柄,它与CreateMainWindow 函数的返回值相同,
 *该值标识了接收该消息的特定窗口。
 *第二个参数与MSG 结构中的message 域相同,它是一个标识窗口所收到消息的整数值。
 *最后两个参数都是32 位的消息参数,它提供和消息相关的特定信息。
 */
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);
}

/*	MiniGUI 程序的入口点为MiniGUIMain
 *	参数argc 和argv 与C 程序main
 *	函数的参数argc 和argv 的含义是一样的,分别为命令行参数个数和参数字符串数组指针。
 */
int MiniGUIMain (int argc, const char* argv[])
{
	MSG Msg;											//消息数据结构体文章末尾给出  
	HWND hMainWnd;										//窗口句柄  
	MAINWINCREATE CreateInfo;							//窗口结构体,绘图等用到 

	#ifdef _MGRM_PROCESSES								//JoinLayer 是MiniGUI-Processes 模式的专有函数,因此包含在 _MGRM_PROCESSES
	JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);	//的条件编译中。在 MiniGUI-Processes 运行模式下,每个MiniGUI 客户端程序在调用其它
	#endif												//MiniGUI 函数之前必须调用该函数将自己添加到一个层中(或创建一个新层)
	
	/*
	如果程序是 MiniGUI-Processes 服务器端,你应该改为调用 ServerStartup:
	if (!ServerStartup (0 , 0 , 0)) {
		fprintf (stderr,
		"Can not start the server of MiniGUI-Processes: mginit.\n");
		return 1;
	}
	*/

	CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;	//设置主窗口风格,这里把窗口设为初始可见的,并具有边框和标题栏。
	CreateInfo.dwExStyle = WS_EX_NONE;							//设置主窗口的扩展风格,该窗口没有扩展风格
	CreateInfo.spCaption = "HelloWorld";						//设置主窗口的标题为“HelloWorld”。
	CreateInfo.hMenu = 0;										//设置主窗口的主菜单,该窗口没有主菜单
	CreateInfo.hCursor = GetSystemCursor(0);					//设置主窗口的光标为系统缺省光标。
	CreateInfo.hIcon = 0;										//设置主窗口的图标,该窗口没有图标。
	CreateInfo.MainWindowProc = HelloWinProc;					//设置主窗口的窗口过程函数为HelloWinProc,所有发往该窗口的消息由该函数处理。
	
	/*设置主窗口在屏幕上的位置,该窗口左上角位于(0, 0),右下角位于(320, 240)。*/
	CreateInfo.lx = 0;
	CreateInfo.ty = 0;
	CreateInfo.rx = 240;
	CreateInfo.by = 180;
	
	CreateInfo.iBkColor = COLOR_lightwhite;						//设置主窗口的背景色为白色,PIXEL_lightwhite 是MiniGUI 预定义的象素值。
	CreateInfo.dwAddData = 0;									//设置主窗口的附加数据,该窗口没有附加数据。
	CreateInfo.hHosting = HWND_DESKTOP;							//设置主窗口的托管窗口为桌面窗口
	hMainWnd = CreateMainWindow (&CreateInfo);					//创建和显示主窗口
	if (hMainWnd == HWND_INVALID)								//判读窗口句柄是否为有效的句柄
		return -1;

	/*ShowWindow的第一个参数为所要显示的窗口句柄,第二个参数指明显示窗口的方式(显示还是隐藏)SW_SHOWNORMAL说明要显示主窗口,并把它置为顶层窗口。
	调用ShowWindow 函数才能把所创建的窗口显示在屏幕上。*/
	ShowWindow(hMainWnd, SW_SHOWNORMAL);						

	while (GetMessage(&Msg, hMainWnd)) {	//在调用ShowWindow 函数之后,主窗口就会显示在屏幕上。和其它GUI 一样,现在是
		TranslateMessage(&Msg);				//进入消息循环的时候了。MiniGUI 为每一个MiniGUI 程序维护一个消息队列。在发生事件之
		DispatchMessage(&Msg);				//后,MiniGUI 将事件转换为一个消息,并将消息放入目标程序的消息队列之中。应用程序现
	}										//在的任务就是执行如下的消息循环代码,不断地从消息队列中取出消息,进行处理:
	/*
	1.Msg 变量是类型为MSG 的结构,MSG 结构在window.h 中定义如下:
	typedef struct _MSG
	{
		HWND hwnd;
		int message;
		WPARAM wParam;
		LPARAM lParam;
		unsigned int time;
		#ifndef _LITE_VERSION
		void* pAdd;
		#endif
	} MSG;
	typedef MSG* PMSG;

	2.GetMessage 函数调用从应用程序的消息队列中取出一个消息:
	GetMessage( &Msg, hMainWnd);
	该函数调用的第二个参数为要获取消息的主窗口的句柄,第一个参数为一个指向MSG
    结构的指针,GetMessage 函数将用从消息队列中取出的消息来填充该消息结构的各个域

	3.只要从消息队列中取出的消息不为MSG_QUIT,GetMessage 就返回一个非0 值,消息
	循环将持续下去。MSG_QUIT 消息使GetMessage 返回0,导致消息循环的终止。
	TranslateMessage (&Msg);
	
	4.TranslateMessage 函数把击键消息转换为MSG_CHAR 消息,然后直接发送到窗口过程函数。
	DispatchMessage (&Msg);
	DispatchMessage 函数最终将把消息发往该消息的目标窗口的窗口过程,让它进行处理,
	*/

	/*程序退出
	用户单击窗口右上角的关闭按钮时窗口过程函数将收到一个MSG_CLOSE 消息。
	helloworld 程序在收到MSG_CLOSE 消息时调用DestroyMainWindow 函数销毁主窗口,并
	调用PostQuitMessage 函数在消息队列中投入一个MSG_QUIT 消息。当GetMessage 函数
	取出MSG_QUIT 消息时将返回0,最终导致程序退出消息循环。
	程序最后调用MainWindowThreadCleanup 清除主窗口所使用的消息队列等系统资源并
	最终由MiniGUIMain 返回。
     */
	MainWindowThreadCleanup (hMainWnd);
	return 0;
}
#ifndef _MGRM_PROCESSES
#include <minigui/dti.c>
#endif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值