亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 基于 linux 和 minigui 的嵌入式系統軟件開發指南(二).htm

?? 詳細的介紹了minigui的原理及其在linux上的實現.
?? HTM
?? 第 1 頁 / 共 4 頁
字號:
          <TD>其他</TD>
          <TD>可以利用 PostSyncMessage 函數跨線程發送消息,并等待消息的處理結果</TD>
          <TD>不能使用 PostSyncMessage、SendAsynMessage 
      等消息。</TD></TR></TBODY></TABLE><BR><BR>
      <P><A id=5 name=5><SPAN class=atitle2>5 窗口的建立和銷毀</SPAN></A></P>
      <P><SPAN class=atitle3>5.1 窗口的建立</SPAN><BR>我們知道,MiniGUI 的 API 類似 Win32 的 
      API。因此,窗口的建立過程和 Windows 程序基本類似。不過也有一些差別。首先我們回顧一下 Windows 應用程序的框架:</P>
      <OL class=n01>
        <LI>在 WinMain () 中創建窗口,使用以下步驟:創建窗口類、登記窗口類、創建并顯示窗口、啟動消息循環。 
        <LI>在 WndProc () 中,負責對發到窗口中的各種消息進行響應。 </LI></OL>在 MiniGUI 
      中也同樣要有這兩個函數。不過稍微有點不同。程序的入口函數名字叫MiniGUIMain 
      (),它負責創建程序的主窗口。在建立主窗口之后,程序進入消息循環。<BR><BR>
      <P>在 Win32 程序中,在建立一個主窗口之前,程序首先要注冊一個窗口類,然后創建一個屬于該窗口類的主窗口。MiniGUI 
      卻沒有在主窗口中使用窗口類的概念。在 MiniGUI 程序中,首先初始化一個 MAINWINCREATE 結構,該結構中元素的含義是:</P>
      <TABLE cellSpacing=0 cellPadding=5 border=0>
        <TBODY>
        <TR>
          <TD>CreateInfo.dwStyle:</TD>
          <TD>窗口風格</TD></TR>
        <TR>
          <TD>CreateInfo.spCaption:</TD>
          <TD>窗口的標題</TD></TR>
        <TR>
          <TD>CreateInfo.dwExStyle :</TD>
          <TD>窗口的附加風格</TD></TR>
        <TR>
          <TD>CreateInfo.hMenu:</TD>
          <TD>附加在窗口上的菜單句柄</TD></TR>
        <TR>
          <TD>CreateInfo.hCursor:</TD>
          <TD>在窗口中所使用的鼠標光標句柄</TD></TR>
        <TR>
          <TD>CreateInfo.hIcon:</TD>
          <TD>程序的圖標</TD></TR>
        <TR>
          <TD>CreateInfo.MainWindowProc:</TD>
          <TD>該窗口的消息處理函數指針</TD></TR>
        <TR>
          <TD>CreateInfo.lx:</TD>
          <TD>窗口左上角相對屏幕的絕對橫坐標,以象素點表示</TD></TR>
        <TR>
          <TD>CreateInfo.ty:</TD>
          <TD>窗口左上角相對屏幕的絕對縱坐標,以象素點表示</TD></TR>
        <TR>
          <TD>CreateInfo.rx:</TD>
          <TD>窗口的長,以象素點表示</TD></TR>
        <TR>
          <TD>CreateInfo.by:</TD>
          <TD>窗口的高,以象素點表示</TD></TR>
        <TR>
          <TD>CreateInfo.iBkColor:</TD>
          <TD>窗口背景顏色</TD></TR>
        <TR>
          <TD>CreateInfo.dwAddData:</TD>
          <TD>附帶給窗口的一個 32 位值</TD></TR>
        <TR>
          <TD>CreateInfo.hHosting:</TD>
          <TD>窗口消息隊列所屬</TD></TR></TBODY></TABLE><BR><BR>
      <P>其中有如下幾點要特別說明:</P>
      <OL class=n01>
        <LI>CreateInfo.dwAddData:在程序編制過程中,應該盡量減少靜態變量,但是如何不使用靜態變量而給窗口傳遞參數呢?這時可以使用這個域。該域是一個 
        32 位的值,因此可以把所有需要傳遞給窗口的參數編制成一個結構,而將結構的指針賦予該域。在窗口過程中,可以使用 
        GetWindowAdditionalData 函數獲取該指針,從而獲得所需要傳遞的參數。 
        <LI>CreateInfo.hHosting:該域表示的是將要建立的主窗口使用哪個主窗口的消息隊列。使用其他主窗口消息隊列的主窗口,我們稱為"被托管"的主窗口。當然,這只在 
        MiniGUI-Threads 版本中有效。 
        <LI>MainWinProc 
        函數負責處理窗口消息。這個函數就是主窗口的"窗口過程"。窗口過程一般有四個入口參數,第一個是窗口句柄,第二個是消息類型,第三個和第四個是消息的兩個參數。 
        </LI></OL><BR><BR>
      <P>在準備好MAINWINCREATE 結構之后,就可以調用 CreateMainWindow 
      函數建立主窗口了。在建立主窗口之后,典型的程序將進入消息循環。如下所示:</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>int MiniGUIMain (int args, const char* arg[])
{
    MSG Msg;
    MAINWINCREATE CreateInfo;
    HWND hWnd;

    // 初始化 MAINWINCREATE 結構
    CreateInfo.dwStyle = WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_CAPTION;
    CreateInfo.spCaption= "MiniGUI step three";
    CreateInfo.dwExStyle = WS_EX_NONE;
    CreateInfo.hMenu = createmenu();
    CreateInfo.hCursor = GetSystemCursor(0);
    CreateInfo.hIcon = 0;
    CreateInfo.MainWindowProc = MainWinProc;
    CreateInfo.lx = 0;
    CreateInfo.ty = 0;
    CreateInfo.rx = 640;
    CreateInfo.by = 480;
    CreateInfo.iBkColor = COLOR_lightwhite;
    CreateInfo.dwAddData = 0;
    CreateInfo.hHosting = HWND_DESKTOP;

    // 建立主窗口
    hWnd = CreateMainWindow(&amp;CreateInfo);
    if (hWnd == HWND_INVALID)
        return 0;

    // 顯示主窗口
    ShowWindow (hWnd, SW_SHOWNORMAL);

    //  進入消息循環
    while (GetMessage(&amp;Msg, hWnd)) {
        TranslateMessage (&amp;Msg);
        DispatchMessage(&amp;Msg);
    }

    MainWindowThreadCleanup (hWnd);
    return 0;
}
</CODE>
</PRE></TD></TR></TBODY></TABLE>注意,和 Windows 程序不同的是,在退出消息循環之后,還要調用一個函數,即 
      MainWindowThreadCleaup 函數。該函數的工作是銷毀主窗口的消息隊列,一般在線程或者進程的最后調用。<BR><BR>
      <P><SPAN class=atitle3>5.2 窗口的銷毀</SPAN><BR>要銷毀一個主窗口,可以利用 DestroyMainWindow 
      (hWnd) 函數。該函數將銷毀主窗口,但不會銷毀主窗口所使用的消息隊列,而要使用MainWindowThreadCleaup 
      最終清除主窗口所使用的消息隊列。</P>
      <P>一般而言,一個主窗口過程在接收到 MSG_CLOSE 消息之后會銷毀主窗口,并調用 PostQuitMessage 
      消息終止消息循環。如下所示:</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>case MSG_CLOSE:
    // 銷毀窗口使用的資源
    DestroyLogFont (logfont1);
    DestroyLogFont (logfont2);
    DestroyLogFont (logfont3);
    
    // 銷毀子窗口
    DestroyWindow(hWndButton);
    DestroyWindow(hWndEdit);
    // 銷毀主窗口
    DestroyMainWindow (hWnd);
    // 發送 MSG_QUIT 消息
    PostQuitMessage(hWnd);
    return 0;
</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
      <P><A id=6 name=6><SPAN class=atitle2>6 
      幾個重要消息</SPAN></A><BR>在窗口(包括主窗口和子窗口在內)的生存周期當中,有幾個重要的消息需要仔細處理。下面描述這些消息的概念和典型處理。</P>
      <P><SPAN class=atitle3>6.1 MSG_NCCREATE</SPAN><BR>該消息在 MiniGUI 
      建立主窗口的過程中發送到窗口過程。lParam 中包含了由 CreateMainWindow 傳遞進入的 pCreateInfo 
      結構指針。您可以在該消息的處理過程中修改 pCreateInfo 結構中的某些值。</P>
      <P><SPAN class=atitle3>6.2 
      MSG_SIZECHANGING</SPAN><BR>該消息窗口尺寸發生變化時,或者建立窗口時發送到窗口過程,用來確定窗口大小。wParam 
      包含預期的窗口尺寸值,而 lParam 用來保存結果值。MiniGUI 的默認處理是,</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>case MSG_SIZECHANGING:
    memcpy ((PRECT)lParam, (PRECT)wParam, sizeof (RECT));
    return 0;
</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
      <P>你可以截獲該消息的處理,從而讓即將創建的窗口位于指定的位置,或者具有固定的大小,比如在 SPINBOX 
      控件中,就處理了該消息,使之具有固定的大小:</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>case MSG_SIZECHANGING:
{
    const RECT* rcExpect = (const RECT*) wParam;
    RECT* rcResult = (RECT*) lPraram;

    rcResult-&gt;left = rcExpect-&gt;left;
    rcResult-&gt;top = rcExpect-&gt;top;
    rcResult-&gt;right = rcExpect-&gt;left +  _WIDTH;
    rcResult-&gt;bottom = rcExpect-&gt;left +  _HEIGHT;
    return 0;
}
</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>
      <P><SPAN class=atitle3>6.3 
      MSG_CHANGESIZE</SPAN><BR>在確立窗口大小之后,該消息被發送到窗口過程,用來通知確定之后的窗口大小。wParam 
      包含了窗口大小 RECT 的指針。注意應用程序應該將該消息傳遞給 MiniGUI 進行默認處理。</P>
      <P><SPAN class=atitle3>6.4 MSG_SIZECHANGED</SPAN><BR>該消息用來確定窗口客戶區的大小,和 
      MSG_SIZECHANGING 消息類似。wParam 參數包含窗口大小信息,lParam 參數是用來保存窗口客戶區大小的 RECT 
      指針,并且具有默認值。如果該消息的處理返回非零值,則將采用 lParam 當中包含的大小值作為客戶區的大小;否則,將忽略該消息的處理。比如在 
      SPINBOX 控件中,就處理了該消息,并使客戶區占具所有的窗口范圍:</P>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>case MSG_SIZECHANGED
{
    RECT* rcClient = (RECT*) lPraram;

    rcClient-&gt;right = rcClient-&gt;left  +  _WIDTH;
    rcClient-&gt;bottom = rcClient-&gt;top +  _HEIGHT;
    return 0;
}
</CODE>
</PRE></TD></TR></TBODY></TABLE><BR><BR>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
老司机免费视频一区二区| 久久精品国内一区二区三区| 成人动漫精品一区二区| 精品日韩成人av| 国产综合久久久久久鬼色| 久久精品视频一区二区三区| 国产91丝袜在线观看| 国产精品久久久久一区| 国产综合色视频| 中日韩av电影| 91成人在线免费观看| 亚洲h动漫在线| 精品欧美黑人一区二区三区| 国产成人亚洲精品青草天美| 亚洲乱码一区二区三区在线观看| 欧美亚洲国产怡红院影院| 免费成人av资源网| 中文字幕第一页久久| 91官网在线观看| 国产精品污www在线观看| av电影在线观看不卡| 一区二区三区中文字幕电影| 91精品国产综合久久久久久久久久 | 亚洲一区在线看| 欧美一区二区美女| 成人高清免费观看| 亚洲成av人片在www色猫咪| 精品国内片67194| 91女厕偷拍女厕偷拍高清| 日本一不卡视频| 国产精品国产三级国产aⅴ中文| 在线观看一区二区视频| 国产乱色国产精品免费视频| 亚洲精品免费看| 国产亚洲成av人在线观看导航| 91蝌蚪porny九色| 狠狠色狠狠色综合| 亚洲一区二区影院| 国产午夜精品美女毛片视频| 欧美视频日韩视频在线观看| 国产一区二区三区美女| 亚洲国产你懂的| 国产视频一区二区在线| 51精品视频一区二区三区| 亚洲免费观看在线观看| 欧美性受极品xxxx喷水| 国产91精品一区二区麻豆网站| 亚洲福利视频一区| 中文字幕一区二区三区av| 欧美mv和日韩mv的网站| 欧美在线观看一区二区| 成人深夜在线观看| 麻豆91精品视频| 亚洲二区视频在线| 亚洲欧美偷拍卡通变态| 国产日韩欧美高清在线| 日韩免费高清av| 制服丝袜av成人在线看| 欧美亚洲一区二区在线观看| av在线播放一区二区三区| 国产剧情一区在线| 久久99久久99小草精品免视看| 亚洲bt欧美bt精品| 亚洲欧美日韩在线不卡| 国产精品福利一区| 中文字幕不卡在线| 国产女人aaa级久久久级 | 精品午夜久久福利影院| 怡红院av一区二区三区| 欧美激情一区二区三区不卡 | 欧美视频在线观看一区二区| 成人黄色av电影| 国产69精品久久久久777| 国产在线精品一区二区| 精品在线一区二区| 久久精品国产99久久6| 麻豆精品视频在线观看视频| 日日夜夜精品视频免费| 日韩精品成人一区二区三区| 亚洲福利一区二区三区| 亚洲成人tv网| 日韩高清欧美激情| 日韩国产一二三区| 久久国产精品72免费观看| 久久不见久久见免费视频1| 精品影院一区二区久久久| 国产日韩精品一区二区三区| 欧美一级精品在线| 日韩三级中文字幕| 欧美成人a在线| 国产亚洲女人久久久久毛片| 日本一区二区免费在线| 亚洲欧美怡红院| 一区二区三区在线视频免费观看| 亚洲综合色噜噜狠狠| 午夜精品免费在线| 国产乱码字幕精品高清av| 不卡一区二区中文字幕| 欧美性色黄大片手机版| 日韩欧美123| 国产精品色哟哟| 洋洋成人永久网站入口| 美女性感视频久久| 成人一道本在线| 欧美午夜不卡在线观看免费| 日韩欧美亚洲一区二区| 中文在线一区二区| 亚洲成av人**亚洲成av**| 另类小说图片综合网| 国产91精品久久久久久久网曝门| 91亚洲大成网污www| 91精品欧美久久久久久动漫| 欧美精品一区二区三| 亚洲乱码中文字幕| 激情综合色综合久久综合| av在线一区二区三区| 欧美久久久久久久久中文字幕| 26uuu欧美| 亚洲一级电影视频| 国产激情偷乱视频一区二区三区| av成人老司机| 精品欧美乱码久久久久久1区2区| 亚洲欧美色一区| 麻豆高清免费国产一区| 91久久久免费一区二区| 精品国产一区二区精华| 精品免费一区二区三区| 在线观看国产91| 精品欧美一区二区三区精品久久 | 欧美亚洲国产怡红院影院| 久久先锋影音av| 亚洲一区二区三区四区的| 国产精品18久久久| 91精品婷婷国产综合久久竹菊| 日本一区二区在线不卡| 日日夜夜精品视频免费| 色素色在线综合| 欧美韩国日本一区| 麻豆久久久久久| 在线播放/欧美激情| 亚洲色图在线看| 国产精品影视天天线| 欧美一区二区三区公司| 伊人色综合久久天天| 高清成人在线观看| 欧美变态tickle挠乳网站| 亚洲成人你懂的| 在线视频欧美精品| 中文字幕一区二区在线播放| 国产一区二区电影| 欧美精品一区二区三区在线播放| 亚洲一区二区三区四区在线| 精品久久久久久久久久久久包黑料 | 亚洲国产三级在线| 91亚洲精品久久久蜜桃网站| 欧美一区二区三区视频在线| 亚洲国产精品一区二区www| 99视频在线观看一区三区| 久久久99久久精品欧美| 久久99久久精品| 精品日韩欧美在线| 久久99精品视频| 欧美videofree性高清杂交| 秋霞国产午夜精品免费视频| 911精品产国品一二三产区| 亚洲国产精品视频| 欧美老肥妇做.爰bbww| 亚洲国产日韩在线一区模特| 欧美日韩小视频| 日韩精品乱码免费| 日韩欧美黄色影院| 国产一区二区伦理| 国产日韩欧美一区二区三区综合| 国产成人av电影在线播放| 国产午夜精品久久久久久免费视| 国产一区二区伦理| 欧美日韩精品一区视频| 中文字幕乱码久久午夜不卡| 国产成人av自拍| 国产精品久线观看视频| 99re66热这里只有精品3直播| 17c精品麻豆一区二区免费| 91浏览器打开| 性欧美疯狂xxxxbbbb| 日韩三级视频在线观看| 国产专区欧美精品| 国产精品久久久久一区二区三区| 91视频免费播放| 视频一区免费在线观看| 久久免费电影网| www.爱久久.com| 亚洲第一成年网| 精品毛片乱码1区2区3区| 成人一区二区视频| 伊人一区二区三区| 精品日本一线二线三线不卡| 成人av在线资源网站| 亚洲国产成人av| 久久在线免费观看| 91久久香蕉国产日韩欧美9色|