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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? minigui 體系結(jié)構(gòu)之二 多窗口管理和控件及控件類.htm

?? 一種 操作系統(tǒng) 一種操作系統(tǒng)
?? HTM
?? 第 1 頁 / 共 4 頁
字號:
        <TBODY>
        <TR>
          <TD><PRE>清單 4  控件的子類化

#define IDC_CTRL1     100
#define IDC_CTRL2     110
#define IDC_CTRL3     120
#define IDC_CTRL4     130

#define MY_ES_DIGIT_ONLY    0x0001
#define MY_ES_ALPHA_ONLY    0x0002
static WNDPROC old_edit_proc;
static int RestrictedEditBox (HWND hwnd, int message, WPARAM wParam, LPARAM lParam)
{
    if (message == MSG_CHAR) {
        DWORD my_style = GetWindowAdditionalData (hwnd);

        /* 確定被屏蔽的按鍵類型 */
        if ((my_style &amp; MY_ES_DIGIT_ONLY) &amp;&amp; (wParam &lt; '0' || wParam &gt; '9'))
            return 0;
        else if (my_style &amp; MY_ES_ALPHA_ONLY)
            if (!((wParam &gt;= 'A' &amp;&amp; wParam &lt;= 'Z') || (wParam &gt;= 'a' &amp;&amp; wParam &lt;= 'z')))
                /* 收到被屏蔽的按鍵消息,直接返回 */
                return 0;
    }

    /* 由老的窗口過程處理其余消息 */
    return (*old_edit_proc) (hwnd, message, wParam, lParam);
}

static int ControlTestWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    switch (message) {
    case MSG_CREATE:
    {
        HWND hWnd1, hWnd2, hWnd3;

        CreateWindow (CTRL_STATIC, "Digit-only box:", WS_CHILD | WS_VISIBLE | SS_RIGHT, 0,
                    10, 10, 180, 24, hWnd, 0);
        hWnd1 = CreateWindow (CTRL_EDIT, "", WS_CHILD | WS_VISIBLE | WS_BORDER, IDC_CTRL1,
                    200, 10, 180, 24, hWnd, MY_ES_DIGIT_ONLY);
        CreateWindow (CTRL_STATIC, "Alpha-only box:", WS_CHILD | WS_VISIBLE | SS_RIGHT, 0,
                    10, 40, 180, 24, hWnd, 0);
        hWnd2 = CreateWindow (CTRL_EDIT, "", WS_CHILD | WS_BORDER | WS_VISIBLE, IDC_CTRL2,
                    200, 40, 180, 24, hWnd, MY_ES_ALPHA_ONLY);
        CreateWindow (CTRL_STATIC, "Normal edit box:", WS_CHILD | WS_VISIBLE | SS_RIGHT, 0,
                    10, 70, 180, 24, hWnd, 0);
        hWnd3 = CreateWindow (CTRL_EDIT, "", WS_CHILD | WS_BORDER | WS_VISIBLE, IDC_CTRL2,
                    200, 70, 180, 24, hWnd, MY_ES_ALPHA_ONLY);

        CreateWindow ("button", "Close", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, IDC_CTRL4,
                    100, 100, 60, 24, hWnd, 0);

        /* 用自定義的窗口過程替換編輯框的窗口過程,并保存老的窗口過程。*/
        old_edit_proc = SetWindowCallbackProc (hWnd1, RestrictedEditBox);
        SetWindowCallbackProc (hWnd2, RestrictedEditBox);
        break;
    }

    ...
    }

    return DefaultMainWinProc (hWnd, message, wParam, lParam);
}
</PRE></TD></TR></TBODY></TABLE>
      <P>在清單 4 中,程序首先定義了一個窗口處理過程,即 RestrictedEditBox 函數(shù)。然后,在利用 CreateWindow 
      函數(shù)建立控件時,將其中兩個編輯框的窗口處理過程通過 SetWindowCallbackProc 替換成了自己定義的 
      RestrictedEditBox 函數(shù),并且將該函數(shù)返回的值(即老的控件窗口處理過程地址)保存在了 old_edit_box 
      變量中。在建立這些編輯框之后,它們的消息將首先由 RestrictedEditBox 函數(shù)處理,然后在某些情況下才由老的窗口處理過程處理。</P>
      <P>限于篇幅,另外兩種控件子類化的方法就不在這里講述。</P><STRONG>4.2 MiniGUI 中控件類的實現(xiàn)</STRONG> 
      <P>MiniGUI 
      函數(shù)庫實際維護了一個當前所有控件類的數(shù)據(jù)結(jié)構(gòu),其中包含了控件類名稱以及對應(yīng)的控件類信息。該數(shù)據(jù)結(jié)構(gòu)實際是一個哈希表,哈希表的每個入口包含由一個指針,該指針指向所有名程以某個字母開頭(不分大小寫)的控件類信息鏈表。控件類信息結(jié)構(gòu)定義如下:</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE>#define MAXLEN_CLASSNAME    15
typedef struct _CTRLCLASSINFO
{
    char      name [MAXLEN_CLASSNAME + 1];
                                // 控件類名程
    /*
     * common properties of this class
     */
    DWORD     dwStyle;          // 控件類風格

    HCURSOR   hCursor;          // 控件光標
    int       iBkColor;         // 控件的背景顏色

    int (*ControlProc)(HWND, int, WPARAM, LPARAM);
                                // 控件處理過程

    DWORD dwAddData;            // 附加數(shù)據(jù)

    int nUseCount;              // 使用計數(shù),即系統(tǒng)中屬于該控件類的控件個數(shù)
    struct _CTRLCLASSINFO*  next;
                                // 下一個控件類信息結(jié)構(gòu)
} CTRLCLASSINFO;
typedef CTRLCLASSINFO* PCTRLCLASSINFO;
</PRE></TD></TR></TBODY></TABLE>
      <P>在控件類的數(shù)據(jù)結(jié)構(gòu)中包含了鼠標、光標、控件類的回調(diào)函數(shù)地址等等信息。在創(chuàng)建屬于該控件類的控件時,這些信息會復(fù)制到控件數(shù)據(jù)結(jié)構(gòu)中。這樣,新的控件實例就繼承了這種控件類的表象和行為。</P>
      <P>該哈希表的哈希函數(shù)實際非常簡單,它的返回值就是控件類名稱首字母的英文字母表順序值:</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE>static int HashFunc (char* szClassname)
{
    /* 判斷首字符是否為字母 */
    if (!isalpha (szClassName[0])) return ERR_CTRLCLASS_INVNAME;

    /* 講所有字符轉(zhuǎn)換為大寫 */
    while (szClassName[i]) {
        szClassName[i] = toupper(szClassName[i]);

        i++;
        if (i &gt; MAXLEN_CLASSNAME)
            return ERR_CTRLCLASS_INVLEN;
    }

    /* 獲得哈希值 */
    return szClassName[0] - 'A';
}
</PRE></TD></TR></TBODY></TABLE>
      <P>控件類的注冊和注銷函數(shù)非常簡單,這里不再贅述。</P><STRONG>4.3 MiniGUI 中控件的實現(xiàn)</STRONG> 
      <P>控件結(jié)構(gòu)相對復(fù)雜一些。其中包含了控件在父窗口中的位置信息、控件風格、擴展風格、控件鼠標、圖標、控件回調(diào)函數(shù)地址等等:</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE>typedef struct _CONTROL
{
    /*
     * 這些成員和 MAINWIN 結(jié)構(gòu)一致.
     */
    short DataType;         // 內(nèi)部使用的數(shù)據(jù)類型
    short WinType;          // 內(nèi)部使用的窗口類型

    int left, top;          // 控件在父窗口中的位置
    int right, bottom;

    int cl, ct;             // 控件客戶區(qū)在父窗口中的位置
    int cr, cb;

    DWORD dwStyle;          // 控件風格
    DWORD dwExStyle;        // 控件擴展風格

    int iBkColor;           // 背景顏色
    HMENU hMenu;            // 菜單句柄
    HACCEL hAccel;          // 加速鍵表句柄
    HCURSOR hCursor;        // 鼠標光標句柄
    HICON hIcon;            // 圖標句柄
    HMENU hSysMenu;         // 系統(tǒng)菜單句柄

    HDC   privCDC;          // 私有 DC 句柄
    INVRGN InvRgn;          // 控件的無效區(qū)域
    PGCRINFO pGCRInfo;      // 控件的全局剪切區(qū)域
    PZORDERNODE pZOrderNode;
                            // Z 序節(jié)點
                            // 僅對具有 WS_EX_CTRLASMAINWIN 擴展風格的控件有效

    PCARETINFO pCaretInfo;  // 插入符消息

    DWORD dwAddData;        // 控件附加數(shù)據(jù)
    DWORD dwAddData2;       // 控件附加數(shù)據(jù)

    int (*ControlProc) (HWND, int, WPARAM, LPARAM); // 控件消息處理過程

    char* spCaption;         // 控件標題
    int   id;                // 控件標識符,整數(shù)

    SCROLLBARINFO vscroll;   // 垂直滾動條信息
    SCROLLBARINFO hscroll;   // 水平滾動條信息

    PMAINWIN pMainWin;       // 包含該控件的主窗口

    struct _CONTROL* pParent;// 控件的父窗口

    /*
     * Child windows.
     */
    struct _CONTROL* children;
                             // 控件的第一個子控件
    struct _CONTROL* active;
                             // 當前活動子控件
    struct _CONTROL* old_under_pointer;
                             // 老的鼠標鼠標所在子控件
    /*
     * 下面這些成員只對控件有效

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品色婷婷| 日产精品久久久久久久性色| 久久精品亚洲一区二区三区浴池 | 欧美日韩在线播放三区| 成人高清在线视频| 国产成人av电影在线| 国产一区二区免费在线| 美美哒免费高清在线观看视频一区二区| 亚洲福利一二三区| 亚洲愉拍自拍另类高清精品| 亚洲精品国产第一综合99久久| 中文字幕字幕中文在线中不卡视频| 国产精品美女久久久久久| 国产精品午夜春色av| 中文字幕免费观看一区| 亚洲欧美一区二区三区国产精品| 一区二区三区四区av| 亚洲一区二区不卡免费| 日韩专区一卡二卡| 六月丁香综合在线视频| 韩日av一区二区| k8久久久一区二区三区| 色综合色综合色综合| 欧美视频日韩视频在线观看| 欧美一区二区三区四区视频| 精品久久久久久久久久久久久久久 | 天堂在线亚洲视频| 日韩精品高清不卡| 久久超级碰视频| 成人久久久精品乱码一区二区三区| 91麻豆视频网站| 91精品综合久久久久久| 国产人妖乱国产精品人妖| 亚洲天堂2014| 五月激情六月综合| 国产成人一级电影| 色综合久久综合| 欧美一区二区三区思思人| 久久久另类综合| 亚洲婷婷在线视频| 丝袜美腿成人在线| 国产.欧美.日韩| 欧美色精品在线视频| 精品国产电影一区二区| 日韩一区欧美小说| 奇米精品一区二区三区四区| 成人高清视频在线| 欧美一区二区视频观看视频| 国产精品婷婷午夜在线观看| 亚洲第一搞黄网站| 国产福利一区二区三区| 欧美日韩在线免费视频| 亚洲国产高清在线观看视频| 亚洲一区二区精品久久av| 国产福利一区二区三区视频| 欧美丝袜丝nylons| 国产亚洲自拍一区| 午夜精品aaa| 波多野结衣一区二区三区| 91精品国产福利| 日韩美女视频19| 国产一区三区三区| 欧美猛男超大videosgay| 久久精品一级爱片| 秋霞电影网一区二区| 91免费版在线| 国产人妖乱国产精品人妖| 日本vs亚洲vs韩国一区三区二区 | 国产乱人伦精品一区二区在线观看 | 91国产免费看| 国产亚洲午夜高清国产拍精品 | 日韩国产精品大片| 色婷婷国产精品久久包臀| 国产网站一区二区| 蜜芽一区二区三区| 欧美日韩免费一区二区三区视频| 中文字幕国产一区二区| 精品亚洲欧美一区| 欧美精品久久一区| 亚洲一区二区三区四区在线| 成人午夜视频网站| 国产亚洲短视频| 狠狠v欧美v日韩v亚洲ⅴ| 91精品国产欧美一区二区18| 一区二区三区在线视频观看| 东方欧美亚洲色图在线| 精品成人在线观看| 蜜臀a∨国产成人精品| 欧美猛男男办公室激情| 亚洲一区二区在线免费观看视频| 99久久免费精品| 国产精品国产三级国产普通话蜜臀 | 国产精品小仙女| 日韩视频永久免费| 亚洲不卡在线观看| 在线一区二区三区做爰视频网站| 国产精品麻豆网站| 不卡的av在线播放| 国产精品高潮呻吟久久| 国产精品911| 国产喷白浆一区二区三区| 国产一区久久久| 久久久精品国产免大香伊| 国产一区二三区好的| 久久久综合精品| 国产麻豆精品视频| 久久久久久99久久久精品网站| 国产一区二区精品久久91| 久久久久久久久久久久久夜| 国产麻豆一精品一av一免费 | 精品三级在线观看| 久久er精品视频| 337p粉嫩大胆色噜噜噜噜亚洲| 美女网站一区二区| 精品国产免费一区二区三区香蕉| 精品一区二区久久久| 26uuu精品一区二区| 国产成人三级在线观看| 精品国产免费久久| 国产成人综合在线观看| 国产人妖乱国产精品人妖| 99亚偷拍自图区亚洲| 亚洲综合色婷婷| 欧美二区乱c少妇| 精品亚洲免费视频| 日本一区二区三区视频视频| 成人av在线一区二区| 亚洲狠狠丁香婷婷综合久久久| 在线观看亚洲精品| 日韩av在线播放中文字幕| 欧美videossexotv100| 国产成a人无v码亚洲福利| 亚洲天天做日日做天天谢日日欢 | 99精品欧美一区| 亚洲成av人片| 精品91自产拍在线观看一区| 粉嫩aⅴ一区二区三区四区五区| 国产精品二三区| 在线播放中文一区| 国产精品一区二区三区四区| 成人免费在线视频观看| 欧美美女激情18p| 国产精品一区免费视频| 亚洲免费观看高清完整版在线观看熊 | 94-欧美-setu| 蜜桃视频在线观看一区二区| 国产精品视频第一区| 欧美日韩国产高清一区二区三区 | 欧美理论电影在线| 国产精品18久久久| 亚洲成a人片综合在线| 久久久精品欧美丰满| 在线观看成人小视频| 日韩av电影天堂| 国产精品日产欧美久久久久| 欧美精品v日韩精品v韩国精品v| 东方欧美亚洲色图在线| 亚洲bt欧美bt精品777| 国产欧美综合在线| 欧美美女bb生活片| eeuss影院一区二区三区| 日本三级韩国三级欧美三级| 久久久久国产免费免费| 欧美日韩精品系列| 成人一区二区三区视频| 蜜臀av性久久久久蜜臀av麻豆| 亚洲人被黑人高潮完整版| 日韩欧美久久一区| 在线视频观看一区| 国产精品69毛片高清亚洲| 亚洲电影视频在线| 国产精品全国免费观看高清| 日韩免费性生活视频播放| 色8久久人人97超碰香蕉987| 国产成人8x视频一区二区| 日本欧美一区二区在线观看| 亚洲男人都懂的| 国产精品蜜臀在线观看| 日韩欧美成人一区| 欧美无砖砖区免费| 91丨九色丨蝌蚪丨老版| 国产久卡久卡久卡久卡视频精品| 亚洲午夜三级在线| 亚洲三级电影全部在线观看高清| 久久久午夜电影| 日韩一区二区三区视频在线观看| 在线视频国产一区| 91在线码无精品| 成人动漫精品一区二区| 国产高清不卡二三区| 精品亚洲aⅴ乱码一区二区三区| 亚洲一级二级在线| 中文字幕亚洲区| 欧美激情一区二区三区不卡| 亚洲精品一区二区三区福利| 1024精品合集| 国产午夜精品一区二区| 日韩久久久久久| 日韩丝袜情趣美女图片| 欧美精品乱码久久久久久|