⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 基于 linux 和 minigui 的嵌入式系统软件开发指南(二).htm

📁 Programming Embedded Systems in C and C
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                  wParam;<BR>RECT* rcResult = (RECT*) 
                  lPraram;<BR><BR>rcResult-&gt;left = 
                  rcExpect-&gt;left;<BR>rcResult-&gt;top = 
                  rcExpect-&gt;top;<BR>rcResult-&gt;right = rcExpect-&gt;left + 
                  _WIDTH;<BR>rcResult-&gt;bottom = rcExpect-&gt;left + 
                  _HEIGHT;<BR>return 0;<BR>}</TD></TR></TBODY></TABLE></DIV>
            <P><B>6.3 MSG_CHANGESIZE&nbsp;<BR></B>&nbsp;&nbsp;&nbsp; 
            在确立窗口大小之后,该消息被发送到窗口过程,用来通知确定之后的窗口大小。wParam 包含了窗口大小 RECT 
            的指针。注意应用程序应该将该消息传递给 MiniGUI 进行默认处理。</P>
            <P><B>6.4 MSG_SIZECHANGED&nbsp;<BR></B>&nbsp;&nbsp;&nbsp; 
            该消息用来确定窗口客户区的大小,和 MSG_SIZECHANGING 消息类似。wParam 参数包含窗口大小信息,lParam 
            参数是用来保存窗口客户区大小的 RECT 指针,并且具有默认值。如果该消息的处理返回非零值,则将采用 lParam 
            当中包含的大小值作为客户区的大小;否则,将忽略该消息的处理。比如在 SPINBOX 
            控件中,就处理了该消息,并使客户区占具所有的窗口范围:</P>
            <DIV align=center>
            <TABLE cellSpacing=1 width="90%" border=0>
              <TBODY>
              <TR>
                <TD width="100%" bgColor=#c0c0c0>case 
                  MSG_SIZECHANGED<BR>{<BR>RECT* rcClient = (RECT*) 
                  lPraram;<BR><BR>rcClient-&gt;right = rcClient-&gt;left + 
                  _WIDTH;<BR>rcClient-&gt;bottom = rcClient-&gt;top + 
                  _HEIGHT;<BR>return 0;<BR>}</TD></TR></TBODY></TABLE></DIV>
            <P><B>6.5 MSG_CREATE&nbsp;<BR></B>&nbsp;&nbsp;&nbsp; 该消息在建立好的窗口成功添加到 
            MiniGUI 的窗口管理器之后发送到窗口过程。这时,应用程序可以在其中创建子窗口。如果该消息返回非零值,则将销毁新建的窗口。注意,在 
            MSG_NCCREATE 消息被发送时,窗口尚未正常建立,所以不能在 MSG_NCCREATE 消息中建立子窗口。</P>
            <P><B>6.6 MSG_PAINT<BR></B>&nbsp;&nbsp;&nbsp; 
            该消息在需要进行窗口重绘时发送到窗口过程。MiniGUI 
            通过判断窗口是否含有无效区域来确定是否需要重绘。当窗口在初始显示、从隐藏状态变化为显示状态、从部分不可见到可见状态,或者应用程序调用 
            InvalidateRect 函数使某个矩形区域变成无效时,窗口将具有特定的无效区域。这时,MiniGUI 
            将在处理完所有的邮寄消息、通知消息之后处理无效区域,并向窗口过程发送 MSG_PAINT 
消息。该消息的典型处理如下:&nbsp;</P>
            <DIV align=center>
            <TABLE cellSpacing=1 width="90%" border=0>
              <TBODY>
              <TR>
                <TD width="100%" bgColor=#c0c0c0>case MSG_PAINT:<BR>{<BR>HDC 
                  hdc;<BR><BR>hdc = BeginPaint (hWnd);<BR><BR>// 使用 hdc 
                  绘制窗口<BR>...<BR><BR>EndPaint (hWnd, 
              hdc);<BR>break;<BR>}</TD></TR></TBODY></TABLE></DIV>
            <P><B>6.7 MSG_DESTROY&nbsp;<BR></B>&nbsp;&nbsp;&nbsp; 该消息在应用程序调用 
            DestroyMainWindow 或者 DestroyWindow 
            时发送到窗口过程当中,用来通知系统即将销毁一个窗口。如果该消息的处理返回非零值,则将取消销毁过程。</P>
            <P><B>7 Hello, World&nbsp;<BR></B>&nbsp;&nbsp;&nbsp; 
            在这个小节当中,我们给出一个简单的示例程序,该程序在窗口中打印"Hello, world!":&nbsp;</P>
            <DIV align=center>
            <TABLE cellSpacing=1 width="90%" border=0>
              <TBODY>
              <TR>
                <TD width="100%" bgColor=#c0c0c0>#include 
                  &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include 
                  &lt;string.h&gt;<BR><BR>#include 
                  &lt;minigui/common.h&gt;<BR>#include 
                  &lt;minigui/minigui.h&gt;<BR>#include 
                  &lt;minigui/gdi.h&gt;<BR>#include 
                  &lt;minigui/window.h&gt;<BR><BR>static int HelloWinProc (HWND 
                  hWnd, int message, WPARAM wParam, LPARAM lParam)<BR>{<BR>HDC 
                  hdc;<BR><BR>switch (message) {<BR>case MSG_PAINT:<BR>hdc = 
                  BeginPaint (hWnd);<BR>TexOut (hdc, 0, 0, "Hello, 
                  world!");<BR>EndPaint (hWnd, hdc);<BR>break;<BR><BR>case 
                  MSG_CLOSE:<BR>DestroyMainWindow (hWnd);<BR>PostQuitMessage 
                  (hWnd);<BR>return 0;<BR>}<BR><BR>return 
                  DefaultMainWinProc(hWnd, message, wParam, 
                  lParam);<BR>}<BR><BR>static void InitCreateInfo 
                  (PMAINWINCREATE pCreateInfo)<BR>{<BR>pCreateInfo-&gt;dwStyle = 
                  WS_CAPTION | WS_VISIBLE;<BR>pCreateInfo-&gt;dwExStyle = 
                  0;<BR>pCreateInfo-&gt;spCaption = "Hello, world!" 
                  ;<BR>pCreateInfo-&gt;hMenu = 0;<BR>pCreateInfo-&gt;hCursor = 
                  GetSystemCursor (0);<BR>pCreateInfo-&gt;hIcon = 
                  0;<BR>pCreateInfo-&gt;MainWindowProc = 
                  HelloWinProc;<BR>pCreateInfo-&gt;lx = 
                  0;&nbsp;<BR>pCreateInfo-&gt;ty = 
                  0;&nbsp;<BR>pCreateInfo-&gt;rx = 320;<BR>pCreateInfo-&gt;by = 
                  240;<BR>pCreateInfo-&gt;iBkColor = 
                  PIXEL_lightwhite;&nbsp;<BR>pCreateInfo-&gt;dwAddData = 
                  0;<BR>pCreateInfo-&gt;hHosting = HWND_DESKTOP;<BR>}<BR><BR>int 
                  MiniGUIMain (int args, const char* arg[])<BR>{<BR>MSG 
                  Msg;<BR>MAINWINCREATE CreateInfo;<BR>HWND 
                  hMainWnd;<BR><BR>#ifdef _LITE_VERSION<BR>SetDesktopRect (0, 0, 
                  800, 600);<BR>#endif<BR><BR>InitCreateInfo 
                  (&amp;CreateInfo);<BR><BR>hMainWnd = CreateMainWindow 
                  (&amp;CreateInfo);<BR>if (hMainWnd == HWND_INVALID)<BR>return 
                  -1;<BR><BR>while (GetMessage (&amp;Msg, hMainWnd)) 
                  {<BR>DispatchMessage 
                  (&amp;Msg);<BR>}<BR><BR>MainWindowThreadCleanup 
                  (hMainWnd);<BR>return 0;<BR>}</TD></TR></TBODY></TABLE></DIV>
            <P>&nbsp;&nbsp;&nbsp; 很显然,这是一个非常简单的程序。该程序使用了 MiniGUI 
            的默认过程来处理我们前面提到的许多消息,而仅仅处理了 MSG_PAINT 和 MSG_CLOSE 
            两条消息。当用户单击标题栏上的关闭按钮时,MiniGUI 将发送 MSG_CLOSE 
            到窗口过程。这时,应用程序就可以销毁窗口,并终止消息循环,最终退出程序。&nbsp;</P>
            <P><B>8 小结<BR></B>&nbsp;&nbsp;&nbsp; 本文描述了 MiniGUI 
            中与消息相关的几个重要函数,并讲述了 MiniGUI-Threads 和 MiniGUI-Lite 
            在消息机制实现上的几个不同。本文还讲述了在 MiniGUI 
            中的窗口建立和销毁过程,并解释了窗口过程的概念以及一些重要消息的处理。最后,本文给出了一个简单的 MiniGUI 
            的示例程序,该程序建立窗口,并在其中打印"Hello, world!"。 </P></TD></TR></TBODY></TABLE></DIV>
      <DIV align=center>
      <TABLE height=10 cellSpacing=0 cellPadding=0 width="50%" border=0>
        <TBODY>
        <TR>
          <TD width="100%" height=10></TD></TR></TBODY></TABLE></DIV>
      <DIV align=center>
      <TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
        <TBODY>
        <TR>
          <TD width="100%"><FONT size=2>本文出处:<FONT class=txd size=2>【<A 
            href="http://www.cn.ibm.com/developerWorks/linux/index.shtml" 
            target=_blank>IBM : developerWorks 
        中国网站</A></FONT>】</FONT></TD></TR></TBODY></TABLE></DIV>
      <DIV align=center>
      <TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
        <TBODY>
        <TR>
          <TD vAlign=bottom align=left width="50%"><INPUT style="COLOR: #000000; BORDER-TOP-STYLE: inset; BORDER-RIGHT-STYLE: inset; BORDER-LEFT-STYLE: inset; BACKGROUND-COLOR: #ffbd00; BORDER-BOTTOM-STYLE: inset" onclick=javascript:window.close() type=button value=关闭窗口> 
          </TD>
          <TD vAlign=bottom align=right width="50%"><A 
            href="http://www.pocketix.com.cn/" target=_top><IMG height=46 
            alt=博利思软件有限公司 
            src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(二).files/penguin56a1.gif" 
            width=40 border=0></A></TD></TR></TBODY></TABLE></DIV>
      <DIV align=center>
      <TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
        <TBODY>
        <TR>
          <TD width="100%">
            <HR SIZE=1>
          </TD></TR></TBODY></TABLE></DIV>
      <DIV align=center>
      <TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
        <TBODY>
        <TR>
          <TD align=middle width="100%"><FONT size=2>版权所有,需要转载请<A 
            href="mailto:web@pocketix.com">联系通知我们</A>,嵌入式Linux</FONT></TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE></CENTER></DIV>
<TABLE height=15 cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD width="100%" background="" 
height=15></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -