第一个helloworld.c实例
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                第一个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_PROCESSESJoinLayer(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_VERSIONvoid* 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
                            
                        
                        
                        總結
以上是生活随笔為你收集整理的第一个helloworld.c实例的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 编译MiniGUI 程序
 - 下一篇: 如何安装MiniGUI 3.0在Linu