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

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

?? 010.txt

?? 會變語言實現的一些程序
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
第十課 以對話框為主要界面的應用程序


--------------------------------------------------------------------------------
現在我們開始學習一些有關GUI編程的有趣的部分, 即:以對話框為主要界面的應用程序。我們將分兩課來講述這一過程 
理論:
如果您仔細關注過前一個程序就會發現:您無法按TAB鍵從一個子窗口控件跳到另一個子窗口控件,要想轉移的話只有 用鼠標一下一下地去點擊。對用戶來說這是不友好的。另一件事是如果您象前一課中那樣把主窗口的背景色從白色改成 灰色,為了子窗口控件無縫地作相應地改變,您必須細分類所有子窗口。 造成上述諸多不便的原因是子窗口控件本來是為對話框而設計的,象子窗口控件的背景色是灰色的,而對話框的背景色也是 灰色的,這樣它們本來就相互協調了,而無須程序員加入其他的處理。 在我們深入討論對話框前我們必須知道何謂對話框。一個對話框其實是有很多的子窗口控件的一個窗口,WINDOWS在對話框 內部有一個管理程序,由其來處理象按下TAB鍵則輸入焦點從一個子窗口空間條到另一個子窗口控件、按下ENTER鍵等于在當 前具有輸入焦點的子窗口控件上點擊了鼠標 等等這些雜事,這樣程序員就可以集中精力于他們的邏輯事務了。對話框主要用 作輸入輸出接口,人們無須知道它們內部的工作原理,而只要知道如何和他們進行交互就可以了。這也是面向對象設計中的 所謂信息隱藏。只要這個黑盒子中的實現足夠完美,我們就可以放心地使用,當然我們必須強調的是“黑盒子”必須完美。 WIN32 API 內部 的實現即是一個“黑盒子”。 噢,好象我們的討論有些走題,現在讓我們回到正題來,對話框的設計是為了減少程序員的工作量的,一般您如果在窗口中 自己放一個子窗口控件您就必須自己處理其中的按鍵邏輯和細分類它的窗口過程。如果您把它放到對話框中,則這些雜事 對話框會自己處理,您只要知道如何獲得用戶輸入的數據和如何把數據放入到子窗口控件中去就可以了。 在程序中對話框和菜單一樣被定義成一種資源,您可以在腳本文件中寫一個對話框模板,其中包含該對話框和子窗口的特性, 然后用資源編輯器編輯。需要注意的是所有的資源必須放在同一個腳本文件中。 雖然可以用文本編輯器去編輯腳本文件,但是象要調整子窗口控件位置時要涉及到一些坐標值時最好還是用一些可視化的編 輯器,這樣方便多了。一般在編譯器的開發包中都會帶資源編輯器,您可以用它們來產生一個模板然后增刪一些子窗口控件。 有兩種主要的對話框:模式對話框和無模式對話框。無模式對話框允許您把輸入焦點切換到(同一個應用程序的)另一個窗口,而該對話框無須關閉 。比如MS WORD 中的FIND對話框。模式對話框又有兩類:應用程序模式對話框和系統對話框。應用程序對話框不允許您在本 應用程序中切換輸入焦點,但是可以切換到其它的應用程序中去,而系統對話框則必須您對該對話框做出響應否則不能切換到 任何的應用程序中去。要創建一個無模式對話框調用API函數CreateDialogParam,而創建一個模式對話框則調用API函數DialogBoxParam。 其中應用程序模式對話框和系統模式對話框之間的差別是style參數不同,要想創建一個系統模式對話框該參數必須“或”上 DS_SYSMODAL標志位。在對話框中若要和子窗口控件通訊則調用函數SendDlgItemMesage。該函數的語法如下:

  
SendDlgItemMessage proto hwndDlg:DWORD,\ 
                                             idControl:DWORD,\ 
                                             uMsg:DWORD,\ 
                                             wParam:DWORD,\ 
                                             lParam:DWORD
該PAI函數對于用在向子窗口控件發送方面是非常有用的。譬如:如果您想得到編輯控件中的字符串可以這么做: 
call SendDlgItemMessage, hDlg, ID_EDITBOX, WM_GETTEXT, 256, ADDR text_buffer
具體要發送那些消息應當查詢有關的WIN32 API 參考手冊。 WINDOWS 還 提供幾個快速存取控件數據的函數。譬如:GetDlgItemText、CheckDlgButton等。這樣一來,您就可以不用去查詢每個消息的wParam和lParam參數獲得相關信息了。您應盡可能地使用這些API 函數,這樣使得您的代碼將來比較容易維護。對話框的管理函數會把一些消息發送給一個特定的回調函數:對話框過程處理函數,該函數的格式為: 
DlgProc  proto hDlg:DWORD ,\ 
                        iMsg:DWORD ,\ 
                        wParam:DWORD ,\ 
                        lParam:DWORD
該函數的格式非常類似于窗口的過程函數,除了返回值是TURE和FALSE,而不是HRESULT,存在于WINDOWS內部的對話框管理器才是對話框真正的窗口過程函數。它會把某些消息傳遞給我們的窗口過程函數。所以當我們的窗口過程函數處理這些消息時就返回TTRUE,否則就在eax中返回FALSE。這也意味著我們的窗口過程函數在接受到自己不處理的消息時并不會調用DefWindowProc函數,因為它本身不是一個真正的窗口過程函數。對于對話框有兩種用法:一種是把它作為一個主窗口來用,一種是把它作為一種輸入輸出設備使用。本課中我們將示范第一種用法。“把對話框用作主窗口”有兩種意思: 1。您可以調用RegisterClassEx函數把對話框模板注冊為一個窗口類。這樣該對話框的行為就類似于一個普通的窗口了:它通過在注冊窗口時指定的窗口過程來處理所有的消息,通過這種方法來使用對話框的好處是您不需要顯示地創建子窗口控件,WINDOWS本身會幫您創建好,另外還會幫您處理所有的按鍵邏輯,另外您還可以指定您窗口類結構中的光標和圖標; 2。您的應用程序創建沒有父窗口的對話框窗口,這種方法中,沒有必要需要一段處理消息循環的代碼,因為所有的消息被直接送到對話框過程處理函數,這樣您也可以不要注冊一個窗口類。本課中我門將先使用第一種方法然后使用第二中方法。 
例子:

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

dialog.asm 

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

.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 "DLGCLASS",0 
MenuName db "MyMenu",0 
DlgName db "MyDialog",0 
AppName db "Our First Dialog Box",0 
TestString db "Wow! I'm in an edit box now",0 

.data? 
hInstance HINSTANCE ? 
CommandLine LPSTR ? 
buffer db 512 dup(?) 

.const 
IDC_EDIT        equ 3000 
IDC_BUTTON      equ 3001 
IDC_EXIT        equ 3002 
IDM_GETTEXT     equ 32000 
IDM_CLEAR       equ 32001 
IDM_EXIT        equ 32002 

.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 hDlg: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,DLGWINDOWEXTRA 
    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 CreateDialogParam,hInstance,ADDR DlgName,NULL,NULL,NULL 
    mov   hDlg,eax 
    invoke ShowWindow, hDlg,SW_SHOWNORMAL 
    invoke UpdateWindow, hDlg 
    invoke GetDlgItem,hDlg,IDC_EDIT 
    invoke SetFocus,eax 
    .WHILE TRUE 
        invoke GetMessage, ADDR msg,NULL,0,0 
        .BREAK .IF (!eax) 
       invoke IsDialogMessage, hDlg, ADDR msg 
        .IF eax ==FALSE 
            invoke TranslateMessage, ADDR msg 
            invoke DispatchMessage, ADDR msg 
        .ENDIF 
    .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_COMMAND 
        mov eax,wParam 
        .IF lParam==0 
            .IF ax==IDM_GETTEXT 
                invoke GetDlgItemText,hWnd,IDC_EDIT,ADDR buffer,512 
                invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK 
            .ELSEIF ax==IDM_CLEAR 
                invoke SetDlgItemText,hWnd,IDC_EDIT,NULL 
            .ELSE 
                invoke DestroyWindow,hWnd 
            .ENDIF 
        .ELSE 
            mov edx,wParam 
            shr edx,16 
            .IF dx==BN_CLICKED 
                .IF ax==IDC_BUTTON 
                    invoke SetDlgItemText,hWnd,IDC_EDIT,ADDR TestString 
                .ELSEIF ax==IDC_EXIT 
                    invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0 
                .ENDIF 
            .ENDIF 
        .ENDIF 
    .ELSE 
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam 
        ret 
    .ENDIF 
    xor    eax,eax 
    ret 
WndProc endp 
end start 



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

Dialog.rc 

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

#include "resource.h" 
#define IDC_EDIT                                       3000 
#define IDC_BUTTON                                3001 
#define IDC_EXIT                                       3002 

#define IDM_GETTEXT                             32000 
#define IDM_CLEAR                                  32001 
#define IDM_EXIT                                      32003 
  

MyDialog DIALOG 10, 10, 205, 60 
STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | 
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK 
CAPTION "Our First Dialog Box" 
CLASS "DLGCLASS" 
BEGIN 
    EDITTEXT         IDC_EDIT,   15,17,111,13, ES_AUTOHSCROLL | ES_LEFT 
    DEFPUSHBUTTON   "Say Hello", IDC_BUTTON,    141,10,52,13 
    PUSHBUTTON      "E&xit", IDC_EXIT,  141,26,52,13, WS_GROUP 
END 
  

MyMenu  MENU 
BEGIN 
    POPUP "Test Controls" 
    BEGIN 
        MENUITEM "Get Text", IDM_GETTEXT 
        MENUITEM "Clear Text", IDM_CLEAR 
        MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/ 
        MENUITEM "E&xit", IDM_EXIT 
    END 
END 

分析:
我們先來分析第一個例子: 
該例顯示了如何把一個對話框模板注冊成一個窗口類,然后創建一個由該窗口類派生的窗口。由于您沒有必要自己去創建子窗口控件,所以就簡化了許多的工作。
我們先來分析對話框模板。 
MyDialog DIALOG 10, 10, 205, 60 

先是對話框的名字,然后是關鍵字“DAILOG”。接下來的四個數字中,前兩個是對話框的坐標,后兩個是對話框的寬和高(注意:它們的單位是對話框的單位,而不一定是像素點)。 

STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | 
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩欧美综合一区| 欧美日韩在线综合| 欧美激情中文字幕一区二区| 国产超碰在线一区| 亚洲男女毛片无遮挡| 一本色道a无线码一区v| 性欧美疯狂xxxxbbbb| 51精品国自产在线| 国产乱码精品一品二品| 中文字幕一区二区三区蜜月| 色综合久久88色综合天天6 | 亚洲综合成人网| 欧美三级视频在线| 精品一区二区三区在线观看国产 | 午夜精品福利一区二区三区av| 欧美精品久久久久久久多人混战 | 亚洲少妇屁股交4| 欧美性猛交xxxxxxxx| 免费成人在线视频观看| 国产精品剧情在线亚洲| 欧美中文字幕不卡| 狠狠色丁香婷婷综合久久片| 最新欧美精品一区二区三区| 在线综合亚洲欧美在线视频| 国产一区欧美日韩| 亚洲国产美国国产综合一区二区| 日韩视频在线一区二区| eeuss鲁一区二区三区| 午夜久久久久久电影| 久久九九影视网| 欧美在线啊v一区| 精品一区中文字幕| 悠悠色在线精品| 欧美r级电影在线观看| 色综合久久久久综合99| 极品销魂美女一区二区三区| 亚洲色图第一区| 精品1区2区在线观看| 在线精品亚洲一区二区不卡| 国产99久久久久| 蜜桃视频第一区免费观看| 亚洲精品国产无天堂网2021| 久久精品一区二区三区不卡| 欧美日韩电影在线播放| 成人av网站免费观看| 蜜臂av日日欢夜夜爽一区| 亚洲精品成人a在线观看| 亚洲国产成人在线| 精品久久久久一区| 欧美老肥妇做.爰bbww| 99精品1区2区| 成人h精品动漫一区二区三区| 日韩高清不卡一区二区三区| 亚洲免费视频中文字幕| 亚洲国产精品av| 欧美电影免费观看高清完整版在| 欧洲生活片亚洲生活在线观看| 国产91丝袜在线播放九色| 免费高清视频精品| 天天综合日日夜夜精品| 亚洲自拍偷拍综合| 亚洲精品久久7777| 亚洲欧洲日本在线| 国产精品美女久久久久久久久| 精品成人一区二区三区| 日韩免费视频一区二区| 欧美一区日本一区韩国一区| 欧美日韩国产系列| 欧美日韩国产不卡| 欧美日韩午夜精品| 欧美老女人第四色| 欧美人伦禁忌dvd放荡欲情| 欧美视频三区在线播放| 精品视频999| 欧美乱熟臀69xxxxxx| 欧美精品成人一区二区三区四区| 欧洲精品一区二区| 欧美网站一区二区| 91精品国产综合久久精品| 欧美一级一区二区| 日韩一区二区三区电影| 精品日韩一区二区三区| 精品日韩一区二区| 久久久精品影视| 国产精品电影一区二区| 综合欧美亚洲日本| 亚洲一区二区在线免费看| 天天综合网 天天综合色| 国产99精品国产| 不卡视频免费播放| 欧美自拍偷拍一区| 91精品啪在线观看国产60岁| 精品久久久网站| 中文字幕乱码久久午夜不卡| 日韩美女精品在线| 亚洲一区在线电影| 麻豆国产91在线播放| 国产乱色国产精品免费视频| aaa欧美日韩| 欧美日韩国产高清一区二区三区 | 国产美女在线精品| 99r精品视频| 91精品国产91久久久久久一区二区| 精品国产伦一区二区三区观看方式 | 激情小说欧美图片| av在线播放不卡| 欧美日韩性生活| 久久久蜜桃精品| 国产精品久久久久久久久免费相片| 亚洲免费观看高清| 蜜臀a∨国产成人精品| 豆国产96在线|亚洲| 日本韩国精品一区二区在线观看| 777久久久精品| 国产欧美久久久精品影院| 一区二区三区欧美亚洲| 美美哒免费高清在线观看视频一区二区 | 亚洲午夜免费视频| 国产自产视频一区二区三区| 99在线视频精品| 欧美一区二区三区成人| 国产精品欧美一级免费| 日韩电影在线观看电影| 成人免费视频视频| 91精品国产福利在线观看| 中文av一区二区| 秋霞成人午夜伦在线观看| a亚洲天堂av| 欧美成人精品3d动漫h| 亚洲欧美电影院| 国产精品69毛片高清亚洲| 欧美日韩三级一区| 国产精品国产三级国产普通话99| 日本麻豆一区二区三区视频| 99久久精品国产网站| 精品国产sm最大网站免费看| 夜夜操天天操亚洲| 国产成人在线视频网站| 91超碰这里只有精品国产| 亚洲欧美偷拍卡通变态| 国产福利一区二区三区视频在线 | 在线观看视频一区| 欧美国产精品久久| 国内精品嫩模私拍在线| 欧美一级在线免费| 成人午夜私人影院| 日韩午夜在线影院| 亚洲大型综合色站| 日本精品视频一区二区| 国产精品九色蝌蚪自拍| 国产乱码精品一区二区三| 精品国产一区二区三区av性色| 日韩精品高清不卡| 欧美日韩的一区二区| 亚洲一卡二卡三卡四卡| 色综合av在线| 一区二区三区中文在线观看| 99久久精品国产一区| 成人免费在线播放视频| 不卡视频一二三| 亚洲欧洲韩国日本视频| a在线欧美一区| 日韩毛片精品高清免费| 99精品视频在线观看| 18欧美亚洲精品| 91美女福利视频| 一区二区三区资源| 欧美日韩一区二区三区视频| 亚洲综合色婷婷| 欧美日韩aaa| 麻豆一区二区在线| 久久色在线观看| 成人午夜视频网站| 亚洲欧洲综合另类| 欧美亚洲另类激情小说| 亚洲123区在线观看| 在线播放91灌醉迷j高跟美女| 日本一不卡视频| 精品黑人一区二区三区久久 | 中文字幕欧美日本乱码一线二线| 国产传媒一区在线| 亚洲欧洲av色图| 99re热这里只有精品免费视频| 亚洲免费视频中文字幕| 欧美日韩另类一区| 久久av中文字幕片| 国产精品女同互慰在线看| 91视频免费观看| 爽好久久久欧美精品| 久久久国产精品麻豆 | 色婷婷av一区二区三区gif | 欧美日韩mp4| 国产又黄又大久久| 亚洲欧洲精品成人久久奇米网| 欧美专区日韩专区| 久久精品国产免费| 亚洲欧洲综合另类在线| 制服.丝袜.亚洲.中文.综合| 国产一区二三区好的| 依依成人精品视频|