您的当前位置:首页正文

10、MiniGUI应用程序(helloworld)含解释

2021-12-16 来源:易榕旅网
10、以下是MiniGUI(helloworld)应用程序,请认真阅读以下程序,回答各程序片段的功能。 /*

** $Id: helloworld.c,v 1.17 2004/06/10 06:12:53 weiym Exp $ ** Listing 2.1

** helloworld.c: Sample program for MiniGUI Programming Guide ** The first MiniGUI application. ** Copyright (C) 2003 Feynman Software. ** License: GPL*/

#include #include

#include #include #include #include #include

static const char* en_text = \"If you see this text, MiniGUI on this board is OK now.\"; static char msg_text [256];

static RECT msg_rc = {10, 50, 300, 80}; /*-----第1个程序片段开始---------*/

static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) { //窗口过程函数HelloWinProc HDC hdc; RECT rc;

switch (message) {

case MSG_CREATE: //窗口创建消息 在窗口成功创建并添加到MiniGUI的窗口管理器之后发送到窗口过程

strcpy (msg_text, \"No message so far.\"); printf (\"created helloworld.\\n\"); break;

case MSG_LBUTTONDOWN: //左键按下消息 printf (\"The left button pressed.\\n\");

strcpy (msg_text, \"The left button pressed.\"); InvalidateRect (hWnd, &msg_rc, TRUE); break;

case MSG_LBUTTONUP: //左键放开消息 printf (\"The left button released.\\n\");

strcpy (msg_text, \"The left button released.\");

InvalidateRect (hWnd, &msg_rc, TRUE);// InvalidateRect函数使整个矩形区域变成无效 break;

case MSG_PAINT://窗口绘制消息 在需要进行窗口重绘时发送到窗口过程 printf (\"BeginPaint.\\n\"); hdc = BeginPaint (hWnd); #if 1

rc.left = 10; rc.top = 10;

rc.right = 300; rc.bottom = 40; printf (\"DrawText1.\\n\");

DrawText (hdc, en_text, -1, &rc, DT_LEFT | DT_WORDBREAK); printf (\"DrawText2.\\n\");

DrawText (hdc, msg_text, -1, &msg_rc, DT_LEFT | DT_WORDBREAK); #else

TextOut (hdc, 10, 10, en_text); TextOut (hdc, 10, 50, msg_text); #endif

EndPaint (hWnd, hdc); printf (\"EndPaint.\\n\"); return 0;

case MSG_KEYDOWN: //键盘按下消息

printf (\"The %d key pressed.\\n\

sprintf (msg_text, \"The %d key pressed\ InvalidateRect (hWnd, &msg_rc, TRUE); return 0;

case MSG_KEYUP://键盘放开消息

printf (\"The %d key released.\\n\

sprintf (msg_text, \"The %d key released\ InvalidateRect (hWnd, &msg_rc, TRUE); return 0;

case MSG_CLOSE://单击“关闭”按钮时,向窗口过程发送此消息

DestroyMainWindow (hWnd);//调用DestroyMainWindow函数销毁主窗口

PostQuitMessage (hWnd);//在消息队列中投入一个MSG_QUIT消息(0)GetMessage退出循环 return 0; }

return DefaultMainWinProc(hWnd, message, wParam, lParam);// DefaultMainWinProc处理窗口过程函数不予处理的消息,由它来进行默认处理

}

/*-----第1个程序片段结尾---------*/程序片段1功能如下:

/*窗口过程函数是MiniGUI程序的主体部分,任务是接收和处理窗口收到的各种消息(是一个回调函数)。(hWnd:接收消息的窗口句柄。message:与MSG结构中的message域相同,是一个标识窗口所接收到消息的整数值。wParam:32位的消息参数。iParam:32位的消息参数 wParam 与iParam含义和值取决于消息的类型)*/

int MiniGUIMain (int argc, const char* argv[])//MiniGUIMain为MiniGUI程序的入口点(argc:命令行参数个数。argv:参数字符串指针) {/*-----第2个程序片段开始---------*/

MSG Msg; //MSG结构的各个域(hwnd,message,wParam,iParam,time) HWND hMainWnd; //主窗口句柄hMainWnd

MAINWINCREATE CreateInfo;// MAINWINCREATE结构描述了一个主窗口的属性 /*-----第2个程序片段结尾---------*/ #ifdef _LITE_VERSION

SetDesktopRect(0, 0, 1024, 768); #endif /*-----第3个程序片段开始---------*/

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;//设置主窗口背景色为白色 CreateInfo.dwAddData = 0;//设置主窗口的附加数据(没有)

CreateInfo.hHosting = HWND_DESKTOP;//设置主窗口的托管窗口为桌面窗口

/*-----第3个程序片段结尾---------*/ //程序片3功能:设置主窗口的各项属性 /*-----第4个程序片段开始---------*/

hMainWnd = CreateMainWindow (&CreateInfo);// CreateMainWindow创建一个主窗口(参数为一个指向MAINWINCREATE结构的指针) if (hMainWnd == HWND_INVALID) return -1; /*-----第4个程序片段结尾---------*/ /*-----第5个程序片段开始---------*/

ShowWindow(hMainWnd, SW_SHOWNORMAL);//把所创建的窗口显示在屏幕上(hMainWnd:要显示的窗口句柄。SW_SHOWNORMAL:指明显示窗口的方式,显示并置顶层窗口)

/*-----第5个程序片段结尾---------*/ /*-----第6个程序片段开始---------*/

while (GetMessage(&Msg, hMainWnd)) { // GetMessage函数从应用程序的消息队列中取出一个消息 TranslateMessage(&Msg);// TranslateMessage把击键消息转换(翻译)为字符消息MSG_CHAR DispatchMessage(&Msg);// DispatchMessage函数把消息发送到窗口过程函数HelloWinProc }

/*-----第6个程序片段结尾----*/ //程序片6:消息循环代码(不断从消息循环队列中取出消息,进行处理)

/*-----第7个程序片段开始---------*/

MainWindowThreadCleanup (hMainWnd);//清除主窗口所使用的消息队列等系统资源 /*-----第7个程序片段结尾---------*/ return 0; }

因篇幅问题不能全部显示,请点此查看更多更全内容