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

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

?? 009.txt

?? 會變語言實現(xiàn)的一些程序
?? TXT
字號:
第九課 子窗口控件


--------------------------------------------------------------------------------
本課中我們將探討控件,這些控件是我們程序主要的輸入輸出設(shè)備。 
理論:
WINDOWS 提供了幾個預(yù)定義的窗口類以方便我們的使用。大多數(shù)時間內(nèi),我們把它們用在對話框中,所以我們一般就它們叫做子窗口控件。子窗口控件會自己處理消息,并在自己狀態(tài)發(fā)生改變時通知父窗口。這樣就大大地減輕了我們的編程工作,所以我們應(yīng)盡可能地利用它們。本課中我們把這些控件放在窗口中以簡化程序,但是大多數(shù)時間內(nèi)子窗口控件都是放在對話框中的。我們示例中演示的子窗口控件包括:按鈕、下拉菜單、檢查框、單選按鈕、編輯框等。使用子窗口控件時,先調(diào)用CreateWindow 或 CreateWindowEx。在這里由于WINDOWS 已經(jīng)注冊了這些子控件,所以無須我們再注冊。當然我們不能改變它們的類名稱。譬如:如果您想產(chǎn)生一個按鈕,在調(diào)用上述兩個函數(shù)時就必須指定類名為"button"。其他必須指定的參數(shù)還有父窗口的句柄和將要產(chǎn)生的子控件的ID號。子控件的ID號是用來標識子控件的,故也必須是唯一 的。子控件產(chǎn)生后,當其狀態(tài)改變時將會向父窗口發(fā)送消息。一般我們應(yīng)在父窗口的WM_CREATE消息中產(chǎn)生字控件。子控件向父窗口發(fā)送的消息是WM_COMMAND,并在傳遞的參數(shù)wPara的底位中包括控件的ID號,消息號在wParam的高位,lParam中則包括了子控件的窗口的句柄。各類控件有不同的消息代碼集,詳情請參見WIN32 API參考手冊。父窗口也可以通過調(diào)用函數(shù)SendMessage向子控件發(fā)送消息,其中第一個參數(shù)是子控件的窗口句柄,第二個參數(shù)是要發(fā)送的消息號,附加的參數(shù)可以在wParam和lParam中傳遞,其實只要知道了某個窗口的句柄就可以用該函數(shù)向其發(fā)送相關(guān)消息。所以產(chǎn)生了子窗口后必須處理WM_COMMAND消息以便可以接收到子控件的消息。

例子:
我們將產(chǎn)生一個窗口,在該窗口中有一個編輯框和一個按鈕。當您按下按鈕時 ,會彈出一個對話框其中顯示了您在編輯框中輸入的內(nèi)容。另外,該應(yīng)用程序還有一個菜單,其中有四個菜單項: 
Say Hello  -- 把一個字符串輸入編輯控件; 
Clear Edit Box -- 清除編輯控件中的字符串; 
Get Text -- 彈出對話框顯示編輯控件中的字符串; 
Exit -- 退出應(yīng)用程序。 
.386 
.model flat,stdcall 
option casemap:none 
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD 

include \masm32\include\windows.inc 
include \masm32\include\user32.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\user32.lib 
includelib \masm32\lib\kernel32.lib 

.data 
ClassName db "SimpleWinClass",0 
AppName  db "Our First Window",0 
MenuName db "FirstMenu",0 
ButtonClassName db "button",0 
ButtonText db "My First Button",0 
EditClassName db "edit",0 
TestString db "Wow! I'm in an edit box now",0 

.data? 
hInstance HINSTANCE ? 
CommandLine LPSTR ? 
hwndButton HWND ? 
hwndEdit HWND ? 
buffer db 512 dup(?)                    ; buffer to store the text retrieved from the edit box 

.const 
ButtonID equ 1                                ; The control ID of the button control 
EditID equ 2                                    ; The control ID of the edit control 
IDM_HELLO equ 1 
IDM_CLEAR equ 2 
IDM_GETTEXT equ 3 
IDM_EXIT equ 4 

.code 
start: 
    invoke GetModuleHandle, NULL 
    mov    hInstance,eax 
    invoke GetCommandLine
    mov CommandLine,eax 
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT 
    invoke ExitProcess,eax 

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD 
    LOCAL wc:WNDCLASSEX 
    LOCAL msg:MSG 
    LOCAL hwnd:HWND 
    mov   wc.cbSize,SIZEOF WNDCLASSEX 
    mov   wc.style, CS_HREDRAW or CS_VREDRAW 
    mov   wc.lpfnWndProc, OFFSET WndProc 
    mov   wc.cbClsExtra,NULL 
    mov   wc.cbWndExtra,NULL 
    push  hInst 
    pop   wc.hInstance 
    mov   wc.hbrBackground,COLOR_BTNFACE+1 
    mov   wc.lpszMenuName,OFFSET MenuName 
    mov   wc.lpszClassName,OFFSET ClassName 
    invoke LoadIcon,NULL,IDI_APPLICATION 
    mov   wc.hIcon,eax 
    mov   wc.hIconSm,eax 
    invoke LoadCursor,NULL,IDC_ARROW 
    mov   wc.hCursor,eax 
    invoke RegisterClassEx, addr wc 
    invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName, \ 
                        ADDR AppName, WS_OVERLAPPEDWINDOW,\ 
                        CW_USEDEFAULT, CW_USEDEFAULT,\ 
                        300,200,NULL,NULL, hInst,NULL 
    mov   hwnd,eax 
    invoke ShowWindow, hwnd,SW_SHOWNORMAL 
    invoke UpdateWindow, hwnd 
    .WHILE TRUE 
        invoke GetMessage, ADDR msg,NULL,0,0 
        .BREAK .IF (!eax) 
        invoke TranslateMessage, ADDR msg 
        invoke DispatchMessage, ADDR msg 
    .ENDW 
    mov     eax,msg.wParam 
    ret 
WinMain endp 

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 
    .IF uMsg==WM_DESTROY 
        invoke PostQuitMessage,NULL 
    .ELSEIF uMsg==WM_CREATE 
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\ 
                        WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\ 
                        ES_AUTOHSCROLL,\ 
                        50,35,200,25,hWnd,8,hInstance,NULL 
        mov  hwndEdit,eax 
        invoke SetFocus, hwndEdit 
        invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText,\ 
                        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\ 
                        75,70,140,25,hWnd,ButtonID,hInstance,NULL 
        mov  hwndButton,eax 
    .ELSEIF uMsg==WM_COMMAND 
        mov eax,wParam 
        .IF lParam==0 
            .IF ax==IDM_HELLO 
                invoke SetWindowText,hwndEdit,ADDR TestString 
            .ELSEIF ax==IDM_CLEAR 
                invoke SetWindowText,hwndEdit,NULL 
            .ELSEIF  ax==IDM_GETTEXT 
                invoke GetWindowText,hwndEdit,ADDR buffer,512 
                invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK 
            .ELSE 
                invoke DestroyWindow,hWnd 
            .ENDIF 
        .ELSE 
            .IF ax==ButtonID 
                shr eax,16 
                .IF ax==BN_CLICKED 
                    invoke SendMessage,hWnd,WM_COMMAND,IDM_GETTEXT,0 
                .ENDIF 
            .ENDIF 
        .ENDIF 
    .ELSE 
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam 
        ret 
    .ENDIF 
     xor    eax,eax 
    ret 
WndProc endp 
end start 

分析:
我們現(xiàn)在開始分析, 
    .ELSEIF uMsg==WM_CREATE 
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, \ 
                        ADDR EditClassName,NULL,\ 
                        WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT\ 
                        or ES_AUTOHSCROLL,\ 
                        50,35,200,25,hWnd,EditID,hInstance,NULL 
        mov  hwndEdit,eax 
        invoke SetFocus, hwndEdit 
        invoke CreateWindowEx,NULL, ADDR ButtonClassName,\ 
                        ADDR ButtonText,\ 
                        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\ 
                        75,70,140,25,hWnd,ButtonID,hInstance,NULL 
        mov  hwndButton,eax 
我們在WM_CREATE中產(chǎn)生子控件,其中在函數(shù)CreateWindowEx中給子控件窗口一個WS_EX_CLIENTEDGE風格,它使得子控件窗口看上去邊界下凹,具有立體感。每一個子控件的類名都是預(yù)定義的,譬如:按鈕的預(yù)定義類名是"button",編輯框是"edit"。接下來的參數(shù)是窗口風格,除了通常的窗口風格外,每一個控件都有自己的擴展風格,譬如:按鈕類的擴展風格前面加有BS_,編輯框類則是:ES_,WIN32 API 參考中有所有的擴展風格的描述。注意:您在CreateWindowsEx函數(shù)中本來要傳遞菜單句柄的地方傳入子窗口空間的ID號不會有什么副作用,因為子窗口控件本身不能有菜單。產(chǎn)生控件后,我們保存它們的句柄,然后調(diào)用SetFocus把焦點設(shè)到編輯控件上以便用戶立即可以輸入。接下來的是如何處理控件發(fā)送的通知消息WM_COMMAND: 
    .ELSEIF uMsg==WM_COMMAND 
        mov eax,wParam 
        .IF lParam==0 

我們以前講過選擇菜單想也會發(fā)送WM_COMMAND 消息,那我們應(yīng)如何區(qū)分呢?看了下表您就會一目了然:
  

  Low word of wParam High word of wParam lParam 
Menu Menu ID 0 0 
Control Control ID Notification code Child Window Handle 

其中我們可以看到不能用wParam來區(qū)分,因為菜單和控件的ID號可能相同,而且子窗口空間的消息號也有可能為0。 

            .IF ax==IDM_HELLO 
                invoke SetWindowText,hwndEdit,ADDR TestString 
            .ELSEIF ax==IDM_CLEAR 
                invoke SetWindowText,hwndEdit,NULL 
            .ELSEIF  ax==IDM_GETTEXT 
                invoke GetWindowText,hwndEdit,ADDR buffer,512 
                invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK 

您可以調(diào)用SetWindowText函數(shù)把一字符串繁縟到編輯控件中去,為了清0,傳入NULL值。SetWindowText是一個通用函數(shù),即可以用它來設(shè)定一個窗口的標題,也可以用它來改變一個按鈕上的文字。如果是要得到按鈕上的文字,則調(diào)用GetWindowText。 

            .IF ax==ButtonID 
                shr eax,16 
                .IF ax==BN_CLICKED 
                    invoke SendMessage,hWnd,WM_COMMAND,IDM_GETTEXT,0 
                .ENDIF 
            .ENDIF 

上面的片段是處理用戶按鈕事件的。他首先檢查wParam的高字節(jié)看是否是按鈕的ID 號,若是則檢查低字節(jié)看發(fā)送的消息號是否BN_CLICKED,該消息是在按鈕按下時發(fā)送的,如果一切都對,則轉(zhuǎn)入處理該消息,我們可以從處理消息IDM_GETTEXT處復(fù)制全部的代碼,但是更專業(yè)的辦法是在發(fā)送一條IDM_GETTEXT消息讓主窗口過程處理,這只要把傳送的消息設(shè)置為WM_COMMAND,再把wParam的低字節(jié)中設(shè)置為IDM_GETTEXT即可。這樣一來您的代碼就簡潔了許多,所以盡可能利用該技巧。最后,當然不是或有或無,必須在消息循環(huán)中調(diào)用函數(shù)TranslateMessage,因為您的應(yīng)用程序需要在編輯框中輸入可讀的文字。如果省略了該函數(shù),就不能在編輯框中輸入任何東西。 


--------------------------------------------------------------------------------


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品伦理在线| 日韩你懂的在线播放| 综合欧美一区二区三区| 91在线视频在线| 亚洲一本大道在线| 欧美精品自拍偷拍动漫精品| 秋霞影院一区二区| 久久久久国产一区二区三区四区 | 一区二区三区四区亚洲| 色8久久精品久久久久久蜜| 一区二区三区高清在线| 欧美久久久久久久久久| 黄色资源网久久资源365| 久久精品一二三| 91欧美一区二区| 亚洲午夜三级在线| 亚洲精品一区二区三区四区高清| 国产精品99久久久久久有的能看| 综合欧美一区二区三区| 91精品国产aⅴ一区二区| 国产电影精品久久禁18| 亚洲色图欧美激情| 欧美一区二区视频观看视频 | 国产亚洲福利社区一区| 9l国产精品久久久久麻豆| 一区二区久久久| 精品国产乱码久久久久久久| 99久久综合99久久综合网站| 视频一区二区三区入口| 国产精品青草综合久久久久99| 在线观看日产精品| 精品一区二区三区免费视频| ㊣最新国产の精品bt伙计久久| 欧美高清激情brazzers| 成人免费视频一区| 天涯成人国产亚洲精品一区av| 久久精品视频免费| 欧美片在线播放| 91在线观看地址| 精品一区二区三区影院在线午夜 | 国产亚洲成aⅴ人片在线观看 | 91美女精品福利| 久久精品国产澳门| 亚洲国产欧美日韩另类综合| 国产欧美一区二区精品久导航 | 国产亚洲一区二区三区四区| 欧美在线观看18| 成人网在线免费视频| 麻豆视频一区二区| 亚洲电影在线免费观看| 国产精品热久久久久夜色精品三区| 5月丁香婷婷综合| 在线视频观看一区| 成人综合在线网站| 国内外成人在线| 青青草97国产精品免费观看无弹窗版 | 波多野结衣视频一区| 国产精品一区在线| 欧美在线观看禁18| 亚洲女人****多毛耸耸8| 成人午夜精品在线| 亚洲美女精品一区| 91黄色小视频| 久久国产精品99精品国产 | 综合色中文字幕| 色综合一个色综合| 天堂蜜桃一区二区三区| 欧美剧在线免费观看网站| 日韩av午夜在线观看| 久久美女高清视频| 欧美性感一类影片在线播放| 日韩高清一区二区| 国产精品久久久久一区| 在线免费观看一区| 久久99国产精品免费网站| 久久久精品欧美丰满| 欧美亚洲国产一区二区三区| 蜜桃视频免费观看一区| 国产精品美女久久久久高潮| 欧美精品视频www在线观看| 国产福利电影一区二区三区| 国产偷v国产偷v亚洲高清| 欧美三级视频在线播放| 国产成人aaa| 国内精品在线播放| 91麻豆国产精品久久| 欧美精品乱码久久久久久按摩| 成人综合婷婷国产精品久久 | 国产欧美一区在线| 中文子幕无线码一区tr| 久久精品欧美一区二区三区麻豆| 欧美疯狂做受xxxx富婆| 大胆亚洲人体视频| 国产日本欧美一区二区| 在线观看国产精品网站| 色综合久久88色综合天天6 | 一区二区三区中文免费| 精品国产乱码久久久久久图片| 91日韩精品一区| 91电影在线观看| 911精品产国品一二三产区| 日韩午夜av一区| 国产日韩欧美一区二区三区乱码 | 精品福利一区二区三区免费视频| 久久夜色精品国产噜噜av| 欧美激情综合在线| 国产精品进线69影院| 亚洲国产成人精品视频| 久久不见久久见免费视频1| 丰满少妇在线播放bd日韩电影| 91在线丨porny丨国产| 91精品在线麻豆| 国产精品每日更新在线播放网址 | 色婷婷国产精品| 欧美一级片免费看| 亚洲国产精品激情在线观看| 亚洲一区二区成人在线观看| 国内精品第一页| 在线亚洲免费视频| 26uuu欧美| 亚洲午夜久久久久久久久久久 | 天堂一区二区在线| 国产成人aaaa| 宅男噜噜噜66一区二区66| 欧美韩国一区二区| 日韩精品五月天| 99国产一区二区三精品乱码| 日韩亚洲欧美高清| 亚洲精品va在线观看| 韩国女主播成人在线观看| 欧美午夜在线一二页| 国产精品天美传媒| 激情综合五月婷婷| 欧美日韩中文字幕一区| 国产精品色在线| 精品中文字幕一区二区| 欧美日韩视频在线一区二区| 中文字幕欧美日韩一区| 久久aⅴ国产欧美74aaa| 欧美午夜片在线看| 亚洲免费在线观看| 成人免费三级在线| 欧美xxx久久| 日本aⅴ亚洲精品中文乱码| 91免费在线看| 中文在线资源观看网站视频免费不卡| 日韩电影在线一区二区三区| 91福利精品视频| 亚洲三级电影全部在线观看高清| 高清国产一区二区| 国产亚洲女人久久久久毛片| 激情久久久久久久久久久久久久久久| 欧美日韩精品免费观看视频| 亚洲综合激情另类小说区| 91免费精品国自产拍在线不卡| 国产欧美日韩亚州综合| 国产一区二区三区精品视频| 欧美一级日韩一级| 亚洲成av人影院| 欧美日韩大陆一区二区| 亚洲午夜免费福利视频| 欧美四级电影网| 亚洲国产精品久久艾草纯爱| 在线一区二区三区四区| 亚洲综合色噜噜狠狠| 欧美在线视频你懂得| 一区二区三区免费在线观看| 色噜噜夜夜夜综合网| 亚洲美女屁股眼交| 欧美日韩中文一区| 婷婷成人激情在线网| 欧美一区二区精美| 久久aⅴ国产欧美74aaa| 久久综合999| 成人免费视频视频| 亚洲欧美偷拍另类a∨色屁股| 在线免费一区三区| 午夜精品一区二区三区三上悠亚| 欧美久久久影院| 六月丁香婷婷久久| 中文字幕va一区二区三区| 91免费看视频| 天天av天天翘天天综合网色鬼国产| 欧美精品一级二级三级| 久久av资源网| 国产精品国产馆在线真实露脸 | 午夜精品视频一区| 91麻豆精品91久久久久同性| 精品一区二区影视| 中文字幕一区二区三区av| 色婷婷综合久久久中文字幕| 日韩中文字幕麻豆| 国产欧美日韩视频在线观看| 色婷婷激情一区二区三区| 午夜成人在线视频| 久久久天堂av| 在线观看视频一区二区欧美日韩| 香蕉久久夜色精品国产使用方法 | 丁香桃色午夜亚洲一区二区三区| 自拍偷拍亚洲欧美日韩|