?? 基于 linux 和 minigui 的嵌入式系統(tǒng)軟件開發(fā)指南(二).htm
字號:
<P><SPAN class=atitle3>6.5 MSG_CREATE</SPAN><BR>該消息在建立好的窗口成功添加到 MiniGUI
的窗口管理器之后發(fā)送到窗口過程。這時,應(yīng)用程序可以在其中創(chuàng)建子窗口。如果該消息返回非零值,則將銷毀新建的窗口。注意,在 MSG_NCCREATE
消息被發(fā)送時,窗口尚未正常建立,所以不能在 MSG_NCCREATE 消息中建立子窗口。</P>
<P><SPAN class=atitle3>6.6
MSG_PAINT</SPAN><BR>該消息在需要進行窗口重繪時發(fā)送到窗口過程。MiniGUI
通過判斷窗口是否含有無效區(qū)域來確定是否需要重繪。當窗口在初始顯示、從隱藏狀態(tài)變化為顯示狀態(tài)、從部分不可見到可見狀態(tài),或者應(yīng)用程序調(diào)用
InvalidateRect 函數(shù)使某個矩形區(qū)域變成無效時,窗口將具有特定的無效區(qū)域。這時,MiniGUI
將在處理完所有的郵寄消息、通知消息之后處理無效區(qū)域,并向窗口過程發(fā)送 MSG_PAINT 消息。該消息的典型處理如下:</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc
border=1><TBODY>
<TR>
<TD><PRE><CODE>case MSG_PAINT:
{
HDC hdc;
hdc = BeginPaint (hWnd);
// 使用 hdc 繪制窗口
...
EndPaint (hWnd, hdc);
break;
}
</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
<P><SPAN class=atitle3>6.7 MSG_DESTROY</SPAN><BR>該消息在應(yīng)用程序調(diào)用
DestroyMainWindow 或者 DestroyWindow
時發(fā)送到窗口過程當中,用來通知系統(tǒng)即將銷毀一個窗口。如果該消息的處理返回非零值,則將取消銷毀過程。</P>
<P><A id=7 name=7><SPAN class=atitle2>7 Hello,
World</SPAN></A><BR>在這個小節(jié)當中,我們給出一個簡單的示例程序,該程序在窗口中打印"Hello, world!":</P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc
border=1><TBODY>
<TR>
<TD><PRE><CODE>#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
static int HelloWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
switch (message) {
case MSG_PAINT:
hdc = BeginPaint (hWnd);
TexOut (hdc, 0, 0, "Hello, world!");
EndPaint (hWnd, hdc);
break;
case MSG_CLOSE:
DestroyMainWindow (hWnd);
PostQuitMessage (hWnd);
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
static void InitCreateInfo (PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_CAPTION | WS_VISIBLE;
pCreateInfo->dwExStyle = 0;
pCreateInfo->spCaption = "Hello, world!" ;
pCreateInfo->hMenu = 0;
pCreateInfo->hCursor = GetSystemCursor (0);
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = HelloWinProc;
pCreateInfo->lx = 0;
pCreateInfo->ty = 0;
pCreateInfo->rx = 320;
pCreateInfo->by = 240;
pCreateInfo->iBkColor = PIXEL_lightwhite;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = HWND_DESKTOP;
}
int MiniGUIMain (int args, const char* arg[])
{
MSG Msg;
MAINWINCREATE CreateInfo;
HWND hMainWnd;
#ifdef _LITE_VERSION
SetDesktopRect (0, 0, 800, 600);
#endif
InitCreateInfo (&CreateInfo);
hMainWnd = CreateMainWindow (&CreateInfo);
if (hMainWnd == HWND_INVALID)
return -1;
while (GetMessage (&Msg, hMainWnd)) {
DispatchMessage (&Msg);
}
MainWindowThreadCleanup (hMainWnd);
return 0;
}
</CODE>
</PRE></TD></TR></TBODY></TABLE>很顯然,這是一個非常簡單的程序。該程序使用了 MiniGUI
的默認過程來處理我們前面提到的許多消息,而僅僅處理了 MSG_PAINT 和 MSG_CLOSE
兩條消息。當用戶單擊標題欄上的關(guān)閉按鈕時,MiniGUI 將發(fā)送 MSG_CLOSE
到窗口過程。這時,應(yīng)用程序就可以銷毀窗口,并終止消息循環(huán),最終退出程序。 <BR><BR>
<P><A id=8 name=8><SPAN class=atitle2>8 小結(jié)</SPAN></A><BR>本文描述了 MiniGUI
中與消息相關(guān)的幾個重要函數(shù),并講述了 MiniGUI-Threads 和 MiniGUI-Lite 在消息機制實現(xiàn)上的幾個不同。本文還講述了在
MiniGUI 中的窗口建立和銷毀過程,并解釋了窗口過程的概念以及一些重要消息的處理。最后,本文給出了一個簡單的 MiniGUI
的示例程序,該程序建立窗口,并在其中打印"Hello, world!"。</P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A id=author1 name=author1><SPAN class=atitle2>關(guān)于作者</SPAN></A>
<BR>魏永明(<A
href="mailto:ymwei@minigui.org">ymwei@minigui.org</A>),男,27
歲,工學碩士。國內(nèi)最有影響的自由軟件項目之一--MiniGUI 的創(chuàng)始人及主要開發(fā)人員。著有《Linux 實用教程》與《學用 Linux
與 Windows NT》,并主持翻譯了《Red Hat Linux 奧秘》、《Linux 編程寶典》 等大量優(yōu)秀的 Linux
技術(shù)著作。是清華大學 AKA Linux 編程技術(shù)系列講座的主講人。</TD></TR></TBODY></TABLE><!-- END PAPER BODY --></TD>
<TD width=10><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files/c.gif" width=10
border=0></TD></TR></TBODY></TABLE><BR clear=all><IMG height=10 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files/c.gif" width=100 border=0><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD align=right width="100%"><A
href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/guide/part2/index.shtml#top">到頁首</A></TD>
<TD width=5><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files/c.gif" width=5
border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=2><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files/c.gif" width=100
border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=2><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD>
<FORM action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument
method=post><INPUT type=hidden value="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南"
name=ArticleTitle> <INPUT type=hidden value=linux name=Zone> <INPUT
type=hidden value=/developerWorks/cn/thankyou/feedback-linux.html
name=RedirectURL> <A id=rating name=rating><B>您對這篇文章的看法如何?</B></A>
<TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD colSpan=5><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files/c.gif" width=100
border=0></TD></TR>
<TR vAlign=top>
<TD width="16%"><INPUT type=radio value=5 name=Rating>真棒!(5)</TD>
<TD width="20%"><INPUT type=radio value=4 name=Rating>好材料 (4)</TD>
<TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 (3)</TD>
<TD width="22%"><INPUT type=radio value=2 name=Rating>需提高 (2)</TD>
<TD width="18%"><INPUT type=radio value=1 name=Rating>太差!
(1)</TD></TR></TBODY></TABLE><BR><B>建議?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA><BR><BR><INPUT type=submit value=提交反饋意見></FORM></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right>(c) Copyright IBM Corp. 2001, (c) Copyright IBM China
2001, All Right Reserved</TD></TR>
<TR vAlign=top>
<TD class=bbg height=21> <A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&origin=dwhead">關(guān)于
IBM</A><SPAN class=divider> | </SPAN><A
class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/privacy/index.shtml&origin=dwhead">隱私條約</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/legal/index.shtml&origin=dwhead">使用條款</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/contact/index.shtml&origin=dwhead">聯(lián)系
IBM</A></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2
src="基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt=""
src="D:\新建文件夾\基于 Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開發(fā)指南(二).files\c(1).gif" width=1
border=0></NOSCRIPT> </A></BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -