青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

luqingfei@C++

為中華之崛起而崛起!
兼聽(tīng)則明,偏聽(tīng)則暗。

Win32匯編--使用資源--對(duì)話框(一)

 

使用資源對(duì)話框

 

簡(jiǎn)介

顧名思義,對(duì)話框完成的是“對(duì)話”功能,應(yīng)用程序一般建立一個(gè)主窗口用做工作界面,大部分的工作分在主窗口的客戶區(qū)完成,但程序往往需要和用戶交互,如輸入?yún)?shù)和輸入文本等,這些界面不必要全部放在主窗口中,習(xí)慣的做法是通過(guò)選擇菜單項(xiàng)彈出一個(gè)窗口,然后在這個(gè)窗口中完成對(duì)話,這個(gè)窗口就是“對(duì)話框”,對(duì)話框中的按鈕、文本框和圖標(biāo)等稱為“子窗口控件”。

 

為了提示用戶,習(xí)慣于在會(huì)引出對(duì)話框的菜單項(xiàng)后面加上省略號(hào)。如“文件”菜單中的“另存為”表示會(huì)引出一個(gè)選擇文件名的對(duì)話框,所以“另存為”3個(gè)字后面加了個(gè)省略號(hào)。對(duì)話框最典型的例子就是寫字板“查找”菜單彈出的窗口以及IE瀏覽器中選擇“Internet 選項(xiàng)”菜單項(xiàng)彈出的設(shè)置窗口。

 

1、對(duì)話框的類型

對(duì)話框分兩類:modal對(duì)話框和modeless對(duì)話框,翻譯成中文就是“模態(tài)的”和“非模態(tài)的”(也有的地方翻譯成“模式的”和“非模式的”,Visual FoxPro中文版式就是這樣),它們之間的區(qū)別在于是否允許用戶在不同窗口間進(jìn)行切換:當(dāng)顯示非模態(tài)對(duì)話框時(shí),用戶可以隨意在這個(gè)對(duì)話框和其它窗口之間切換;而顯示一個(gè)模態(tài)對(duì)話框時(shí),用戶在關(guān)閉對(duì)話框之前不允許切換到同一程序的其它窗口中,但可以切換到其他程序的窗口中;如果顯示的是操作系統(tǒng)所屬的模態(tài)對(duì)話框(即“系統(tǒng)模態(tài)的”),則切換到其他任何程序的窗口都是不允許的。

 

Windows在資源文件中定義對(duì)話框,然后在程序中利用這個(gè)模板創(chuàng)建對(duì)話框,模態(tài)對(duì)話框和非模態(tài)對(duì)話框的資源定義是相同的,只是創(chuàng)建時(shí)調(diào)用的函數(shù)不同而已。

 

2、對(duì)話框的工作原理

很明顯,對(duì)話框和普通窗口之間有很多相似之處,實(shí)際上對(duì)話框就是基于窗口的,對(duì)話框的窗口風(fēng)格使用的就是普通窗口的風(fēng)格定義,對(duì)話框也有一個(gè)類似于窗口過(guò)程的對(duì)話框過(guò)程,但對(duì)話框和普通窗口在實(shí)現(xiàn)上又有很多不同之處,模態(tài)對(duì)話框和非模態(tài)對(duì)話框的實(shí)現(xiàn)也是不同的。普通的窗口在建立之前需要用RegisterClass注冊(cè)一個(gè)窗口類,然后用CreateWindow建立窗口,建立窗口所需的參數(shù)如窗口風(fēng)格、大小位置和窗口過(guò)程地址等由窗口類以及CreateWindow中的參數(shù)共同提供。

 

建立對(duì)話框的時(shí)候并不使用CreateWindow函數(shù),取而代之,建立模態(tài)對(duì)話框的函數(shù)是DialogBoxParam,建立非模態(tài)對(duì)話框的函數(shù)是CreateDialogParam,調(diào)用這兩個(gè)函數(shù)創(chuàng)建對(duì)話框窗口之前不需要注冊(cè)對(duì)話框的窗口類。

 

Windows在這兩個(gè)函數(shù)的內(nèi)部調(diào)用CreateWindowEx來(lái)建立對(duì)話框,使用的風(fēng)格、大小和位置參數(shù)取自資源中定義的對(duì)話框模板,使用的窗口類則是Windows內(nèi)部定義的類,如果讀者用一些工具去查看,會(huì)發(fā)現(xiàn)類名是“#32770之類的字符串,在這個(gè)名字奇特的窗口類中,窗口過(guò)程被定義到了Windows內(nèi)部的“對(duì)話框管理器”代碼中,Windows在這里處理對(duì)話框的大部分消息,如維護(hù)客戶區(qū)的刷新,鍵盤接口(按Tab鍵在不同子窗口之間切換、按回車調(diào)用默認(rèn)按鈕等),對(duì)話框管理器在初始化對(duì)話框時(shí)會(huì)根據(jù)對(duì)話框模板中定義的子窗口控件建立對(duì)話框中所有的子窗口。

 

用戶程序中的對(duì)話框過(guò)程是由對(duì)話框管理器調(diào)用的,在處理消息前,對(duì)話框管理器會(huì)先調(diào)用用戶指定的對(duì)話框過(guò)程,再根據(jù)對(duì)話框過(guò)程的返回值決定是否處理它們。

 

Windows對(duì)模態(tài)對(duì)話框,和非模態(tài)對(duì)話框的處理有些不同。在創(chuàng)建并顯示模態(tài)對(duì)話框后,Windows會(huì)為它在內(nèi)部建立一個(gè)消息循環(huán),在這個(gè)消息循環(huán)中把消息發(fā)送給對(duì)話框管理器,對(duì)話框管理器在處理消息的過(guò)程中會(huì)調(diào)用用戶定義的對(duì)話框過(guò)程,當(dāng)對(duì)話框關(guān)閉的時(shí)候,Windows退出內(nèi)建的消息循環(huán),并從DialogBoxParam函數(shù)返回。而對(duì)于非模態(tài)對(duì)話框,CreateDialogParam函數(shù)在創(chuàng)建對(duì)話框后直接返回,對(duì)話框窗口的消息是通過(guò)用戶程序中的消息循環(huán)派送的。

 

由于模態(tài)對(duì)話框的特征,使得用戶它來(lái)做小程序的主窗口非常方便,因?yàn)橛靡痪?/span>DialogBoxParam函數(shù)就可以搞定了,既不用注冊(cè)窗口類,也不用寫消息循環(huán),這對(duì)看到創(chuàng)建窗口的幾十句代碼就煩的讀者來(lái)說(shuō)可真是個(gè)福音,這種方法的缺點(diǎn)就是無(wú)法使用依賴消息循環(huán)來(lái)完成的功能,很明顯,加速鍵就不能用了。

 

 

對(duì)話框的資源定義

對(duì)話框資源定義的語(yǔ)法

在資源腳本中定義對(duì)話框的語(yǔ)法是:

       對(duì)話框ID      DIALOG        [DISCARDABLE] x坐標(biāo), y坐標(biāo), 寬度, 高度

       [可選屬性]

       BEGIN

                     子窗口控件

                    

       END

 

對(duì)話框中的子窗口控件語(yǔ)句定義在BEGIN/END(當(dāng)然也可以以用花括號(hào))之中,在這之前,可以定義對(duì)話框的一些可選屬性,每種屬性單獨(dú)用一行定義,常用的可選屬性如下表所示:

                     對(duì)話框的可選屬性

屬性

定義語(yǔ)法

說(shuō)明

標(biāo)題文字

CAPTION “文字

定義顯示在窗口標(biāo)題欄上的文字

窗口類

CLASS “類名

定義對(duì)話框窗口使用的窗口類,如果不定義,則使用Windows內(nèi)建的類

窗口風(fēng)格

STYLE 風(fēng)格組合

定義對(duì)話框的窗口風(fēng)格,同CreateWindowEx中的dwStyle參數(shù)

擴(kuò)展風(fēng)格

EXSTYLE風(fēng)格組合

定義對(duì)話框的擴(kuò)展窗口風(fēng)格,同CreateWindowEx中的dwExStyle參數(shù)

字體

FONT 大小, “字體名

定義對(duì)話框包括子窗口控件使用的字體

菜單

MENU 菜單 ID

對(duì)話框中使用的菜單,菜單ID在同一個(gè)資源腳本文件中定義

 

本節(jié)例子程序的資源腳本文件Dialog.rc定義如下:

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#include    <resource.h>

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#define         ICO_MAIN        0x1000      //圖標(biāo)

#define         DLG_MAIN        1

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ICO_MAIN        ICON            "Main.ico"

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DLG_MAIN        DIALOG 50, 50, 113, 64

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION "對(duì)話框模板"

FONT 9, "宋體"

{

    ICON    ICO_MAIN, -1, 10, 11, 18, 21

    CTEXT   "簡(jiǎn)單的對(duì)話框例子\n Win32ASM編寫", -1, 36, 14, 70, 19

    DEFPUSHBUTTON "退出(&X)", IDOK, 58, 46, 50, 14

    CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 39, 103, 1

}

 

腳本文件中除了定義圖標(biāo)之外,另外還定義了一個(gè)ID1的對(duì)話框,對(duì)話框中有4個(gè)子窗口控件,分別是圖標(biāo)、文本、按鈕和一個(gè)橫線,按鈕的IDIDOK,其他的子窗口控件由于是靜態(tài)控件,不會(huì)向?qū)υ捒蜻^(guò)程發(fā)送命令,所以ID就設(shè)置為-1,這些控件的具體用法將在后面的內(nèi)容中詳細(xì)介紹。

 

定義中還指定了一些可選屬性,STYLE語(yǔ)句定義了對(duì)話框窗口的風(fēng)格,CAPTION語(yǔ)句把標(biāo)題欄定義為“對(duì)話框模板”,FONT語(yǔ)句指定了對(duì)話框使用的字體是大小為9的宋體。

 

對(duì)話框的位置為(5050),大小為寬113單位,高64單位,讀者可能已經(jīng)注意到:這個(gè)對(duì)話框的大小好像比寬113像素、高64像素的窗口要大,事實(shí)上的確如此,這也正是大小是“單位”而不是“像素”的原因。對(duì)話框的位置、大小以及所有子窗口控件的度量單位是根據(jù)系統(tǒng)字體的大小來(lái)決定的,橫向(x坐標(biāo)和寬度)每單位為系統(tǒng)字符平均寬度的1/4,縱向(y坐標(biāo)和高度)每單位為字符平均高度的1/8,由于系統(tǒng)字體的字符高度大致為寬度的兩倍,所以雖然這種計(jì)算方法有些費(fèi)解,但橫向和縱向的數(shù)值在視覺(jué)上還是成比例的,但和以“像素”為單位在數(shù)值上肯定是不同的。如果讀者一定要知道這個(gè)值換算成像素后是多少,那么可以用GetDialogBaseUnits函數(shù)來(lái)獲取系統(tǒng)字體的高度和寬度再進(jìn)行計(jì)算。

 

當(dāng)一些英文版的軟件在中文Windows上運(yùn)行的時(shí)候,對(duì)話框中有些文本往往被砍掉了尾巴,原因就是這些程序是在英文Windows上調(diào)試的,文本框的尺寸是以英文Windows系統(tǒng)字符的大小來(lái)度量的,到了其他語(yǔ)言的Windows上后,系統(tǒng)字符的大小可能改變,對(duì)話框的大小也隨著改變,結(jié)果就是原來(lái)剛好的寬度可能會(huì)變得不夠,這也算是對(duì)話框尺寸度量方法的缺點(diǎn)吧!

 

使用文本編輯器直接書寫對(duì)話框腳本定義不是很直觀,所以在創(chuàng)建對(duì)話框資源時(shí)最好使用可視化的資源編輯器,如VC++ResourceWorkshop等。

 

在子窗口控件的ID定義中有兩個(gè)特殊的ID值——IDOKIDCANCEL,在Resource.h中它們的值定義為12IDOK是默認(rèn)的“確定”IDIDCANCEL是默認(rèn)的“取消”ID。如果一個(gè)按鈕的IDIDOK,當(dāng)焦點(diǎn)沒(méi)有停留在其他按鈕上的時(shí)候,在任何地方按下回車鍵就相當(dāng)于按下了這個(gè)按鈕,而按下Esc鍵的時(shí)候,就相當(dāng)于按下了IDIDCANCEL的按鈕。

 

2Tab停留位和組

對(duì)話框中可以定義多個(gè)子窗口控件,有的了窗口控件可以擁有輸入焦點(diǎn)(如按鈕、文本框與組合框等),有些則不能(如圖標(biāo)與文本等),當(dāng)對(duì)話框中有多個(gè)允許擁有輸入焦點(diǎn)的子窗口控件時(shí)(有WS_TABSTOP風(fēng)格),用戶可以用Tab鍵將輸入焦點(diǎn)切換到下一個(gè)有WS_TABSTOP風(fēng)格的子窗口控件上,也可以用Shift+Tab鍵切換到上一個(gè),Tab鍵切換的順序就叫做Tab停留位。

 

Tab停留位并不是系統(tǒng)根據(jù)子窗口控件的坐標(biāo)位置自動(dòng)排列的,而是按照子窗口控件在資源腳本文件中的定義順序來(lái)排列的,所以讀者在定義的時(shí)候最好根據(jù)子窗口控件的位置適當(dāng)排列語(yǔ)句的先后,以免按動(dòng)Tab鍵切換的時(shí)候焦點(diǎn)上下左右無(wú)規(guī)則的地跳來(lái)跳去。如果使用可視化的資源編輯器,那么菜單中一般會(huì)有“Tab停留位”菜單項(xiàng),在編輯完成后也要進(jìn)到這個(gè)菜單項(xiàng)中設(shè)置一下,資源編輯器會(huì)根據(jù)設(shè)置調(diào)整rc文件中定義語(yǔ)句的先后順序。

 

對(duì)話框中往往有一些排列在一起的同類子窗口控件,如幾個(gè)單選鈕,幾個(gè)單選鈕之間的選中標(biāo)記是互斥的,在對(duì)話框的其他地方可能又有一組互斥的單選鈕用來(lái)代表其他功能,在對(duì)話框中規(guī)定所有的單選鈕都是互斥的顯然不現(xiàn)實(shí),解決的方法就是將不同的子窗口控件“分組”,這就是“組”的含義。使用中可以選擇一些子窗口控件定義WS_GROUP屬性,兩個(gè)有WS_GROUP屬性的子窗口控件之間的所有子窗口控件同屬同一組。

 

使用對(duì)話框

使用對(duì)話框的代碼分為創(chuàng)建部分和對(duì)話框過(guò)程兩個(gè)部分,完整代碼如下所示:

                .386

                .model flat, stdcall

                option casemap :none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Include 文件定義

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include         windows.inc

include         user32.inc

includelib      user32.lib

include         kernel32.inc

includelib      kernel32.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Equ 等值定義

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ICO_MAIN        equ         1000h       ;圖標(biāo)

DLG_MAIN        equ         1           ;對(duì)話框

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 數(shù)據(jù)段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                .data?

hInstance       dd      ?

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 代碼段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                .code

_ProcDlgMain    proc    uses ebx edi esi hWnd, wMsg, wParam, lParam

                mov     eax, wMsg

                .if     eax == WM_CLOSE

                        invoke EndDialog, hWnd, NULL

                .elseif eax == WM_INITDIALOG

                        invoke LoadIcon, hInstance, ICO_MAIN

                        invoke SendMessage, hWnd, WM_SETICON, ICON_BIG, eax

                .elseif eax == WM_COMMAND

                        mov     eax, wParam

                        .if     eax == IDOK

                                invoke EndDialog, hWnd, NULL

                        .endif

                .else

                        mov     eax, FALSE

                        ret

                .endif

                mov     eax, TRUE

                ret

               

_ProcDlgMain    endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

start:

                invoke GetModuleHandle, NULL

                mov     hInstance, eax

                invoke DialogBoxParam, hInstance, DLG_MAIN, NULL, offset _ProcDlgMain, NULL

                invoke ExitProcess, NULL

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                end     start

 

讀者可以發(fā)現(xiàn),相對(duì)于普通窗口的使用,對(duì)話框的使用顯得特別簡(jiǎn)單,最明顯的區(qū)別在于主程序中的一大堆代碼不見(jiàn)了,換成了一個(gè)DialogBoxParam語(yǔ)句。

 

1、創(chuàng)建模態(tài)對(duì)話框

創(chuàng)建模態(tài)對(duì)話框的函數(shù)是DialogBoxParam,它的使用方法是:

       invoke     DialogBoxParam, hInstance, lpTemplateName, hWndParent, \

                     lpDialogFunc, dwInitParam

函數(shù)的各參數(shù)說(shuō)明如下:

·hInstancelpTemplateName——函數(shù)從hInstance參數(shù)指定的模塊中裝入lpTemplateName參數(shù)指定的對(duì)話框資源,然后顯示對(duì)話框窗口。例子程序中的lpTemplateName參數(shù)用的就是我們定義的DLG_MAIN

·hWndParent——對(duì)話框的父窗口,對(duì)話框關(guān)閉之前將無(wú)法切換到父窗口所屬的其它窗口中,例子中用對(duì)話框做主窗口,所以父窗口句柄是NULL,在其他程序中使用時(shí),這個(gè)參數(shù)設(shè)置為主窗口的句柄。

·lpDialogFunc——指定了對(duì)話框過(guò)程的地址,例子程序中是_ProcDlgMain

·dwInitParam——當(dāng)做WM_INITDIALOG消息的lParam傳給對(duì)話框過(guò)程,讀者可以用它來(lái)做自定義的用途。

 

要結(jié)束模態(tài)對(duì)話框,必須在對(duì)話框過(guò)程的WM_CLOSE消息中使用EndDialog函數(shù):

       invoke     EndDialog, hDlg, dwResult

不能使用通常的DestroyWindow函數(shù),參數(shù)中的hDlg就是對(duì)話框窗口的句柄,dwResult參數(shù)是退出時(shí)的返回值,這個(gè)值最后由DialogBoxParam函數(shù)返回到主程序中。

 

2、創(chuàng)建非模態(tài)對(duì)話框

創(chuàng)建非模態(tài)對(duì)話框的函數(shù)是CreateDialogParam,它的參數(shù)定義和DialogBoxParam一模一樣:

       invoke     CreateDialogParam, hInstance, lpTemplateName, hWndParent, \

                                                 lpDialogFunc, dwInitParam

       mov        hDlg, eax

 

CreateDialogParamDialogBoxParam在使用中有幾個(gè)不同點(diǎn):

·CreateDialogParam在創(chuàng)建對(duì)話框后,會(huì)根據(jù)對(duì)話框模板的風(fēng)格是否定義了WS_VISIBLE來(lái)決定是否顯示對(duì)話框窗口。如果定義了則顯示,沒(méi)有的話,則程序需要在以后自行調(diào)用ShowWindow來(lái)顯示它;而DialogBoxParam函數(shù)不管是否定義了WS_VISIBLE風(fēng)格都會(huì)顯示對(duì)話框。

·CreateDialogParam在建立對(duì)話框窗口后直接返回,返回值是對(duì)話框窗口的句柄;而DialogBoxParam要在對(duì)話框關(guān)閉后才返回,返回值是EndDialog中的dwResult參數(shù)。

·在CreateDialogParam返回后,應(yīng)用程序在自己的消息循環(huán)中獲取對(duì)話框消息,所以如果要用非模態(tài)對(duì)話框做程序的主窗口,消息循環(huán)的代碼還是要寫的;而DialogBoxParam是使用Windows為它內(nèi)建的消息循環(huán)。

·關(guān)閉非模態(tài)對(duì)話框使用DestroyWindow函數(shù),注意在這里不要用EndDialog函數(shù)。

 

3、對(duì)話框過(guò)程

Windows在“對(duì)話框管理器”——也就是為對(duì)話框內(nèi)建的窗口過(guò)程中處理對(duì)話框消息,在處理前會(huì)首先調(diào)用用戶定義的對(duì)話框過(guò)程,程序可以在這里選擇是否自行處理某些消息。讀者在理解時(shí)可以把“對(duì)話框管理器”看成是對(duì)話框的“DefWindowProc”,凡是自己不想處理的消息都由它來(lái)處理。

 

和窗口過(guò)程一樣,對(duì)話框過(guò)程是一個(gè)“回調(diào)”子程序,它由程序定義,Windows來(lái)調(diào)用,模態(tài)對(duì)話框和非模態(tài)對(duì)話框的對(duì)話框過(guò)程是一樣的。

 

對(duì)話框過(guò)程和窗口過(guò)程的輸入?yún)?shù)是一樣的,也是:

       DialogProc     proc        hwndDlg, uMsg, wParam, lParam

在程序里面一般編寫對(duì)話框過(guò)程的分支結(jié)構(gòu)如下:

_ProcDlgMain        proc        uses ebx edi esi hWnd, wMsg, wParam, lParam

                            mov        eax, wMsg

                            .if           eax == WM_CLOSE

                                          ;模態(tài)對(duì)話框用EndDialog關(guān)閉


                                          ;非模態(tài)對(duì)話框用DestroyWindow關(guān)閉

                            .elseif      eax == WM_INITDIALOG

                                          ;初始化代碼

                            .elseif      eax == WM_COMMAND

                                          ;子窗口控件發(fā)送的消息

                                          ;wParam的低16位為子窗口控件ID

                            .elseif      eax == WM_XXXX

                                          ;處理其他需要處理的消息

                            .else

                                          mov        eax, FALSE

                                          ret

                            .endif

                            mov        eax, TRUE

                            ret

_ProcDlgMain        endp

 

注意對(duì)話框過(guò)程和普通的窗口過(guò)程在使用上有以下區(qū)別:

·窗口過(guò)程對(duì)應(yīng)于不同的消息有各種不同含義的返回值,而對(duì)話框過(guò)程返回BOOL類型的值,返回TRUE表示已經(jīng)處理了某條消息,返回FALSE表示沒(méi)有處理。“對(duì)話框管理器”代碼會(huì)根據(jù)返回值決定是否繼續(xù)處理某一條消息(唯一的例外是WM_INITDIALOG消息)。

·對(duì)于不處理的消息,不需要調(diào)用DefWindowProc來(lái)處理,這事情由“對(duì)話框管理器”來(lái)做。

 

“對(duì)話框管理器”不會(huì)把WM_CREATE消息轉(zhuǎn)發(fā)給對(duì)話框過(guò)程,取而代之,它會(huì)以WM_INITDIALOG消息來(lái)調(diào)用對(duì)話框過(guò)程,程序可以在這里進(jìn)行一些初始化的操作,WM_INITDIALOG消息的返回值有點(diǎn)特殊,如果程序想自行設(shè)置輸入焦點(diǎn),那么可以用SetFocus函數(shù)把輸入焦點(diǎn)設(shè)置到需要的子窗口控件上,然后返回FALSE;如果返回TRUE的話,那么Windows會(huì)自動(dòng)將輸入焦點(diǎn)設(shè)置到第一個(gè)有WS_TABSTOP的子窗口控件上。

 

對(duì)話框過(guò)程在WM_COMMAND消息中處理子窗口控件發(fā)送的命令,當(dāng)用戶在對(duì)話框中按下了按鈕,輸入文字或選擇復(fù)選框等操作時(shí),子窗口控件會(huì)向?qū)υ捒蜻^(guò)程發(fā)送WM_COMMAND消息,wParam是子窗口控件的ID,如例子程序中處理“退出”按鈕的消息,在里面用EndDialog函數(shù)關(guān)閉對(duì)話框。

 

對(duì)話框窗口的標(biāo)題欄上默認(rèn)沒(méi)有定義圖標(biāo),如果要像普通窗口一樣顯示一個(gè)圖標(biāo),那么可以像例子程序中那樣,在WM_INIDIALOG中用WM_SETICON消息來(lái)設(shè)置。

 

posted on 2010-09-01 16:57 luqingfei 閱讀(4505) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Win32匯編程語(yǔ)言序設(shè)計(jì)

導(dǎo)航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(tǒng)計(jì)

留言簿(6)

隨筆分類(109)

隨筆檔案(105)

Blogers

Game

Life

NodeJs

Python

Useful Webs

大牛

搜索

積分與排名

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道久久综合亚洲精品高清 | 久久久久久欧美| 一区二区日韩| 一区二区动漫| 亚洲欧美日韩国产成人| 欧美一区二区福利在线| 久久影音先锋| 欧美日韩一区二区三区视频| 欧美三级视频在线| 国产麻豆精品久久一二三| 国产日韩欧美视频在线| 一区在线播放| 一区二区三区久久网| 午夜在线播放视频欧美| 久久色中文字幕| 日韩一级裸体免费视频| 亚洲图片在线观看| 亚洲精选在线观看| 亚洲性夜色噜噜噜7777| 久久久久久久高潮| 亚洲日本精品国产第一区| 欧美激情视频在线播放| 亚洲麻豆视频| 久久精品国产精品亚洲| 欧美精品一区二区视频| 国产一区二区| 亚洲视频成人| 欧美黄色免费| 欧美亚洲综合在线| 欧美日本一区| 狠狠88综合久久久久综合网| 一区二区三区四区在线| 久久免费视频观看| 99在线精品观看| 欧美电影免费| 伊人激情综合| 欧美一区二区三区免费观看| 亚洲黄色成人久久久| 欧美一区二区三区免费视频| 欧美精品久久久久久久免费观看 | 久久国产婷婷国产香蕉| 国产精品啊v在线| 在线视频观看日韩| 欧美在线视频在线播放完整版免费观看| 欧美黄色成人网| 久久夜色撩人精品| 国产一区二区精品久久| 亚洲欧美美女| 一区二区三区.www| 欧美精品日韩一区| 亚洲精品一区二区三区99| 狼人天天伊人久久| 欧美在线观看日本一区| 国产伦精品免费视频| 亚洲欧美日韩人成在线播放| 亚洲日本一区二区三区| 欧美xxxx在线观看| 亚洲看片一区| 91久久久一线二线三线品牌| 欧美成人福利视频| 亚洲精品一二三| 亚洲精品视频啊美女在线直播| 久久综合99re88久久爱| 一区二区三区亚洲| 欧美风情在线| 欧美久久影院| 亚洲专区一区| 亚洲夜间福利| 国产欧美日韩综合精品二区| 欧美一区二区三区在线观看视频| 一区二区三区偷拍| 国产精品区一区二区三| 午夜精品福利在线观看| 91久久国产综合久久| 欧美亚洲午夜视频在线观看| 国产精品久在线观看| 午夜精品久久久久久99热| 亚洲女ⅴideoshd黑人| 国内精品久久久久影院 日本资源| 久久九九热免费视频| 久久精品99国产精品酒店日本| 狠狠色狠狠色综合人人| 亚洲高清资源| 国产精品福利影院| 久久久国产视频91| 欧美77777| 亚洲欧美日韩高清| 久久国产视频网站| 亚洲精品欧美日韩专区| 一区二区三区 在线观看视| 国产视频在线一区二区| 免费亚洲网站| 欧美日韩午夜精品| 玖玖玖免费嫩草在线影院一区| 牛牛精品成人免费视频| 午夜免费日韩视频| 欧美成人免费一级人片100| 亚洲小视频在线观看| 性欧美xxxx大乳国产app| 亚洲精品永久免费| 午夜视频一区| 一区二区三区欧美在线| 欧美在线黄色| 亚洲一区免费观看| 麻豆精品在线视频| 久久国产福利国产秒拍| 欧美精品电影| 模特精品在线| 国产女主播一区| 亚洲精品乱码久久久久| 黄色国产精品| 欧美在线精品免播放器视频| 亚洲性xxxx| 欧美精品在线观看一区二区| 久久躁日日躁aaaaxxxx| 国产精品美女久久久久久免费| 亚洲国产精品免费| 在线观看一区二区精品视频| 亚洲欧美大片| 午夜国产欧美理论在线播放| 欧美激情视频免费观看| 欧美不卡视频一区发布| 国产美女在线精品免费观看| 亚洲人成免费| 亚洲精美视频| 久久影院午夜片一区| 欧美与黑人午夜性猛交久久久| 欧美日韩国产成人在线91| 欧美黄色大片网站| 亚洲激情第一区| 久热综合在线亚洲精品| 久久综合久久综合久久综合| 国产欧美日韩综合一区在线播放 | 国产小视频国产精品| 国产精品久久久| 夜夜夜久久久| 在线日韩av片| 久久久久久久久久久久久女国产乱 | 亚洲日本成人女熟在线观看| 亚洲国产精品黑人久久久| 久久精品亚洲国产奇米99| 久久久999成人| 韩国成人福利片在线播放| 欧美一级网站| 久久久青草婷婷精品综合日韩| 国产区欧美区日韩区| 亚洲综合清纯丝袜自拍| 性欧美1819性猛交| 国产精品亚洲а∨天堂免在线| 亚洲视频 欧洲视频| 亚洲女同精品视频| 国产毛片久久| 久久久久久久一区| 亚洲国产婷婷香蕉久久久久久| 亚洲欧洲日产国产综合网| 欧美精品一区二区三区蜜桃| 日韩一级成人av| 亚洲在线日韩| 国产一区二区剧情av在线| 久久九九精品| 亚洲国产欧美国产综合一区| 一本一本久久a久久精品综合妖精| 欧美日韩日日骚| 午夜在线视频观看日韩17c| 欧美www视频在线观看| 在线一区视频| 国产亚洲日本欧美韩国| 欧美99在线视频观看| 一本色道久久综合亚洲精品高清| 欧美在线观看一区二区| 亚洲高清在线精品| 欧美性做爰毛片| 久久爱www久久做| 亚洲人成高清| 久久欧美中文字幕| 一区二区三区视频在线看| 国产一区二区三区久久精品| 欧美a级片网| 午夜精品一区二区三区在线播放| 欧美高清视频一区二区| 亚洲宅男天堂在线观看无病毒| 黄色欧美成人| 国产精品免费一区二区三区在线观看 | 日韩特黄影片| 免费看亚洲片| 欧美一区91| 亚洲激情第一区| 国产色产综合色产在线视频| 欧美激情精品久久久六区热门| 亚洲女人天堂av| 亚洲免费成人av| 亚洲第一天堂av| 久久色在线观看| 欧美一进一出视频| 亚洲一区二区少妇| 亚洲免费黄色| 亚洲成人直播| 国产综合自拍| 国产亚洲精品成人av久久ww| 国产精品爱啪在线线免费观看|