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

luqingfei@C++

為中華之崛起而崛起!
兼聽則明,偏聽則暗。

Win32匯編--使用資源--對話框--在對話框中使用子窗口控件(3)

 

使用資源--對話框--在對話框中使用子窗口控件

 

8、使用列表框

列表框提供一個(gè)可供用戶選擇的列表,用戶可以一次選擇一個(gè)項(xiàng)目,也可以同時(shí)選中多個(gè)項(xiàng)目。

//Listbox.rc

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

#include <resource.h>

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

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

#define DLG_MAIN 1

#define IDC_LISTBOX1 101

#define IDC_LISTBOX2 102

#define IDC_SEL1 103

#define IDC_RESET 104

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

ICO_MAIN   ICON    "Main.ico"

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

DLG_MAIN DIALOG 163, 160, 190, 108

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION "列表框控件示例"

FONT 9, "宋體"

{

    LISTBOX IDC_LISTBOX1, 6, 5, 55, 86, LBS_STANDARD

    LISTBOX IDC_LISTBOX2, 68, 5, 115, 86, LBS_STANDARD | LBS_MULTIPLESEL

    LTEXT "", IDC_SEL1, 6, 93, 55, 8

    PUSHBUTTON "復(fù)位(&R)", IDC_RESET, 89, 90, 45, 14

    DEFPUSHBUTTON "查看(&S)", IDOK, 139, 90, 45, 14, WS_DISABLED

}

 

//Listbox.asm

                .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

DLG_MAIN        equ     1

IDC_LISTBOX1    equ     101

IDC_LISTBOX2    equ     102

IDC_SEL1        equ     103

IDC_RESET       equ     104

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

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

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

 

                .data?

hInstance       dd      ?

                .const

szText1         db      '項(xiàng)目1',0

szText2         db      '項(xiàng)目2',0

szText3         db      '項(xiàng)目3',0

szPath          db      '*.*',0

szMessage       db      '選擇結(jié)果:%s',0

szTitle         db      '您的選擇',0

szSelect        db      '您選擇了以下的項(xiàng)目:'

szReturn        db      0dh,0ah,0

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

; 代碼段

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

                .code

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

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

                local   @szBuffer[128]:byte

                local   @szBuffer1[128]:byte

                local   @szTextBuff[2048]:byte

                local   @dwCount

               

                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

;********************************************************************************

; 初始化列表框

;********************************************************************************

                        invoke SendDlgItemMessage, hWnd, IDC_LISTBOX1, LB_ADDSTRING, 0, addr szText1

                        invoke SendDlgItemMessage, hWnd, IDC_LISTBOX1, LB_ADDSTRING, 0, addr szText2

                        invoke SendDlgItemMessage, hWnd, IDC_LISTBOX1, LB_ADDSTRING, 0, addr szText3

                       

                        invoke SendDlgItemMessage, hWnd, IDC_LISTBOX2, LB_DIR, DDL_ARCHIVE or DDL_DRIVES or DDL_DIRECTORY, addr szPath

;********************************************************************************

                .elseif eax == WM_COMMAND

                        mov     eax, wParam

                        .if     ax == IDOK

                                invoke SendDlgItemMessage, hWnd, IDC_LISTBOX2, LB_GETSELCOUNT, 0, 0

                                mov @dwCount, eax

                                invoke SendDlgItemMessage, hWnd, IDC_LISTBOX2, LB_GETSELITEMS, 128/4, addr @szBuffer

                                invoke lstrcpy, addr @szTextBuff, addr szSelect

                                lea     esi, @szBuffer

                                .while @dwCount

                                        lodsd

                                        lea     ecx, @szBuffer1

                                        invoke SendDlgItemMessage, hWnd, IDC_LISTBOX2, LB_GETTEXT, eax, ecx

                                        invoke lstrcat, addr @szTextBuff, addr szReturn

                                        invoke lstrcat, addr @szTextBuff, addr @szBuffer1

                                        dec     @dwCount

                                .endw

                                invoke MessageBox, hWnd, addr @szTextBuff, addr szTitle, MB_OK

                        .elseif ax == IDC_RESET

                                invoke SendDlgItemMessage, hWnd, IDC_LISTBOX2, LB_SETSEL, FALSE, -1

                        .elseif ax == IDC_LISTBOX1

                                shr     eax, 16

                                .if     ax == LBN_SELCHANGE

;********************************************************************************

; 將鼠標(biāo)點(diǎn)擊結(jié)果顯示在文本框中

;********************************************************************************

                                        invoke SendMessage, lParam, LB_GETCURSEL, 0, 0

                                        lea     ecx, @szBuffer

                                        invoke SendMessage, lParam, LB_GETTEXT, eax, ecx

                                        invoke SetDlgItemText, hWnd, IDC_SEL1, addr @szBuffer

;********************************************************************************

; 雙擊項(xiàng)目則彈出對話框

;********************************************************************************

                                .elseif ax == LBN_DBLCLK

                                        invoke SendMessage, lParam, LB_GETCURSEL, 0, 0

                                        lea     ecx, @szBuffer

                                        invoke SendMessage, lParam, LB_GETTEXT, eax, ecx

                                        invoke wsprintf, addr @szBuffer1, addr szMessage, addr @szBuffer

                                        invoke MessageBox, hWnd, addr @szBuffer1, addr szTitle, MB_OK

                                .endif

;********************************************************************************

                        .elseif ax == IDC_LISTBOX2

                                shr     eax, 16

                                .if     ax == LBN_SELCHANGE

                                        invoke SendMessage, lParam, LB_GETSELCOUNT, 0, 0

                                        mov     ebx, eax

                                        invoke GetDlgItem, hWnd, IDOK

                                        invoke EnableWindow, eax, ebx

                                .endif

                        .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

 

程序中總共定義了兩個(gè)列表框。左邊列表框?yàn)?/span>IDC_LISTBOX1,這是一個(gè)單選的列表框,選擇一個(gè)項(xiàng)目的時(shí)候下面的文本會(huì)顯示出選擇的項(xiàng)目,雙擊某個(gè)項(xiàng)目的時(shí)候會(huì)彈出消息框,顯示所選中的項(xiàng)目。右邊的列表框是IDC_LISTBOX2,是一個(gè)多選的列表框,選擇完畢可以用“查看”按鈕彈出消息框,消息框中顯示了所有選中的項(xiàng)目。按下“復(fù)位”按鈕清除列表框的選擇。

列表框可以使用的風(fēng)格

風(fēng)格

說明

LBS_DISABLENOSCROLL

在不需滾動(dòng)的時(shí)候也顯示垂直滾動(dòng)條

LBS_EXTENDEDSEL

在多選列表框中允許按住Shitf鍵同時(shí)選中一個(gè)范圍

LBS_MULTIPLESEL

允許多選,如果不定義的話則是單選列表框

LBS_NOSEL

列表框項(xiàng)目只能查看不能選擇

LBS_NOTIFY

用戶點(diǎn)擊或雙擊項(xiàng)目時(shí)向父窗口發(fā)送WM_COMMAND消息

LBS_SORT

自動(dòng)按字母順序排序插入的項(xiàng)目

LBS_USETABSTOPS

列表框項(xiàng)目的文本中允許將Tab字符的位置展開

LBS_STANDARD

組合LBS_NOTIFY, LBS_SORT, WS_VSCROLLWS_BORDER

 

一般單選列表框只需定義LBS_STANDARD就可以了。

 

列表框使用說明:

當(dāng)列表框有 LBS——NOTIFY風(fēng)格的時(shí)候,用戶有所動(dòng)作時(shí)列表框會(huì)向父窗口發(fā)送WM_COMMAND,同時(shí)在wParam的高16位中指定通知碼,列表框的通知碼種類很少,基本上就是以下幾種:

l         LBN_DBLCLK                     用戶雙擊了一個(gè)項(xiàng)目。

l         LBN_ERRSPACE                 插入項(xiàng)目時(shí)無法申請到足夠的內(nèi)存。

l         LBN_KILLFOCUS        輸入焦點(diǎn)被切換到其他控件中,列表框丟失了焦點(diǎn)。

l         LBN_SELCANCEL        用戶撤銷了一個(gè)選擇。

l         LBN_SELCHANGE              選定狀態(tài)改變。

l         LBN_SETFOCUS                 列表框得到輸入焦點(diǎn)。

 

 

我們最關(guān)心的是LBN_DBLCLKLBN_SELCHANGE通知碼,在單選列表框中,如果程序用雙擊來選擇項(xiàng)目,那么就要處理LBN_DBLCLK通知,例子程序中當(dāng)用戶雙擊IDC_LISTBOX1時(shí)彈出一個(gè)消息框,讀者可以查看其使用方法。在多選列表框中,由于用戶可能選擇了多個(gè)項(xiàng)目,所以一般不用雙擊的方法選定:如果收到LBN_SELCHANGE通知的話,可以得知用戶有一個(gè)選擇動(dòng)作,在這里可以進(jìn)行相應(yīng)的操作。

 

       列表框通知父窗口是通過發(fā)送WM_COMMAND消息,而程序控制列表框的時(shí)候是通過向列表框發(fā)送消息來完成的。

       常用的列表框消息如下表所示:

消息

wParam

lParam

說明

LB_ADDSTRING

0

字符串地址

添加一個(gè)項(xiàng)目,返回加入后的索引。

LB_DELETESTRING

位置索引

0

刪除一個(gè)項(xiàng)目,返回剩余的項(xiàng)數(shù)。

LB_FINDSTRING

開始索引

字符串地址

查找以字符串開頭的項(xiàng)目,找到則返回位置索引,未找到則返回LB_ERR

LB_FINDSTRINGEXACT

開始索引

字符串地址

精確查找一個(gè)項(xiàng)目,返回值同上。

LB_GETANCHORINGEX

0

0

返回多選列表框多選時(shí)的起始位置。

LB_GETCARETINGEX

0

0

多選列表框中的當(dāng)前焦點(diǎn)項(xiàng)目位置。

LB_GETCOUNT

0

0

返回列表框中的項(xiàng)目總數(shù)

LB_GETCURSEL

0

0

返回單選列表框當(dāng)前選中的項(xiàng)目。

LB_GETSEL

位置索引

0

檢測指定項(xiàng)目的選中狀態(tài),返回非0為選中,返回0為未選中。

LB_GETSELCOUNT

0

0

返回多選列表框選中項(xiàng)目的總數(shù)

LB_GETSELITEMS

最大項(xiàng)數(shù)

緩沖區(qū)地址

返回多選列表框的選中項(xiàng)目索引列表到緩沖區(qū)中

LB_GETTEXT

位置索引

緩沖區(qū)地址

返回某個(gè)項(xiàng)目的字符串

LB_GETTEXTLEN

位置索引

0

返回某個(gè)項(xiàng)目的字符串長度

LB_GETTOPINDEX

0

0

返回當(dāng)前可見的第一個(gè)項(xiàng)目位置

LB_INSERTSTRING

插入位置

字符串地址

在指定位置插入一個(gè)項(xiàng)目

LB_RESETCONTENT

0

0

刪除所有項(xiàng)目

LB_SELECTSTRING

開始位置

字符串地址

將以指定字符串開頭的項(xiàng)目選中

LB_SELITEMRANGE

選擇狀態(tài)

范圍

在多選框中將一個(gè)范圍選中或清除

LB_SETCURSEL

位置索引

0

在單選列表框中選中一個(gè)項(xiàng)目

LB_SETSEL

選擇狀態(tài)

位置索引

在多選框中將一個(gè)項(xiàng)目選中或清除

LB_SETTOPINDEX

位置索引

0

滾動(dòng)顯示到指定的項(xiàng)目

LB_DIR

屬性

文件通配符

搜索目錄并將符合文件通配符的文件名加入到列表框中

這些消息中LB_DIR是個(gè)比較有趣的消息,它可以將指定目錄中的文件名自動(dòng)列出來并加入列表框中,如例子中用*.*將當(dāng)前目錄中的全部文件名加到列表框中。LB_DIR消息中wParam參數(shù)可以指定的屬性可以是是以下值的組合:

DDL_ARCHIVE            加入歸檔屬性的文件。

DDL_DIRECTORY       加入目錄。

DDL_DRIVES              加入驅(qū)動(dòng)器名。

DDL_HIDDEN             包含隱含文件。

DDL_READONLY        包含只讀文件。

DDL_READWRITE      包含可讀寫的文件。

DDL_SYSTEM             包含系統(tǒng)文件。

 

       在列表框中初始化時(shí)加入項(xiàng)目可以使用LB_ADDSTRINGLB_INSERTSTRING消息,刪除項(xiàng)目可以用LB_DELETESTRING消息,刪除全部項(xiàng)目用LB_RESETCONTENT消息。

       對于單選列表框,要獲取選中項(xiàng)目可以發(fā)送LB_GETCURSEL消息,要得到這個(gè)項(xiàng)目的字符串需要用索引值通過LB_GETTEXT消息獲取,讀者可以查看例子中處理LBN_DBLCLK通知碼的部分代碼。

 

       對于多選列表框,需要用LB_GETSELITEMS消息獲取全部選中項(xiàng)目,這個(gè)消息返回的是一個(gè)列表,所有選中項(xiàng)目的索引按順序排列返回到緩沖區(qū)中,所以在例子中處理“查看”按鈕消息(IDOK)的時(shí)候,程序先發(fā)送LB_GETSELCOUNT消息得到選中的項(xiàng)目數(shù),以便在下面用一個(gè)循環(huán)獲取所有的項(xiàng)目,得到數(shù)目數(shù)后,再用LB_GETSELITEMS將選中項(xiàng)目的索引取到@szBuffer中,接下來進(jìn)入一個(gè)循環(huán),循環(huán)的次數(shù)就是LB_GETSELCOUNT得到的數(shù)值,在循環(huán)中,程序從@szBuffer中將索引值逐個(gè)取出并用LB_GETTEXT消息獲取每一項(xiàng)的字符串,最后用一個(gè)MessageBox顯示出來。

 

posted on 2010-09-20 09:45 luqingfei 閱讀(919) 評論(0)  編輯 收藏 引用 所屬分類: Win32匯編程語言序設(shè)計(jì)

導(dǎo)航

<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

統(tǒng)計(jì)

留言簿(6)

隨筆分類(109)

隨筆檔案(105)

Blogers

Game

Life

NodeJs

Python

Useful Webs

大牛

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品国产精品国自产在线| 亚洲大片在线观看| 久久精品av麻豆的观看方式| 亚洲视频在线一区观看| 欧美巨乳在线| 日韩亚洲欧美中文三级| 亚洲视频免费| 国产精品免费网站在线观看| 午夜精品久久久久久久久久久久久 | 久久免费视频在线观看| 国产午夜精品全部视频在线播放 | 久久精品国产亚洲精品| 国产一级揄自揄精品视频| 久久综合久久美利坚合众国| 亚洲精品在线观看免费| 久久精品欧美| 亚洲精品一区二区在线观看| 国产精品资源在线观看| 羞羞视频在线观看欧美| 国产欧美日韩免费| 久久亚洲精选| 国产精品99久久久久久久久久久久 | 久久香蕉国产线看观看av| 亚洲精品视频在线观看网站| 国产精品狠色婷| 久久综合99re88久久爱| 亚洲精品免费一区二区三区| 欧美影院精品一区| 亚洲精品一二| 国内精品久久久久影院色| 欧美成人一区二区三区| 亚洲综合精品自拍| 最新69国产成人精品视频免费| 午夜精品一区二区三区在线播放| 在线看欧美日韩| 国产精品免费一区二区三区在线观看 | 亚洲国产欧美一区二区三区丁香婷| 欧美三级日本三级少妇99| 久久精品国产精品亚洲综合| 亚洲一区二区三区影院| 在线观看三级视频欧美| 欧美午夜不卡视频| 免费日韩成人| 久久精品视频99| 午夜精品av| 9人人澡人人爽人人精品| 国产在线不卡精品| 国产伦精品一区二区三区免费迷| 欧美国产先锋| 久久先锋影音av| 欧美一区二区视频97| 亚洲天堂网站在线观看视频| 免费成人小视频| 久久精品国产亚洲5555| 亚洲欧美日韩在线高清直播| 9色精品在线| 999亚洲国产精| 亚洲国产福利在线| 亚洲高清av在线| 在线不卡欧美| 亚洲成色777777女色窝| 在线观看视频一区二区| 在线播放不卡| 亚洲人成毛片在线播放| 一区二区亚洲精品| 亚洲高清不卡av| 亚洲精品美女久久久久| 亚洲美女av网站| 在线视频一区二区| 亚洲欧美一区二区精品久久久| aa级大片欧美三级| 亚洲视频一区二区在线观看| 日韩小视频在线观看| 99视频热这里只有精品免费| 在线亚洲欧美| 性欧美18~19sex高清播放| 欧美亚洲免费在线| 亚洲精品美女91| 亚洲免费久久| 亚洲网站视频| 久久国内精品自在自线400部| 久久精品国产久精国产爱| 开心色5月久久精品| 亚洲黄色天堂| 一区二区电影免费观看| 香蕉成人伊视频在线观看 | 久久精品亚洲精品国产欧美kt∨| 久久精品亚洲一区二区三区浴池| 久久久99久久精品女同性| 欧美成人精品影院| 国产精品福利在线观看| 影音先锋亚洲精品| 一区二区三区日韩欧美| 欧美日韩国产区| 欧美色图五月天| 韩国一区二区三区美女美女秀| 亚洲区一区二| 久久成人资源| 亚洲人人精品| 亚洲自拍偷拍福利| 免费欧美日韩| 国产日韩一区在线| 99亚洲一区二区| 久久综合九色| 一区二区三区免费网站| 久热精品视频| 国产视频一区在线观看| 一本色道久久综合| 免费短视频成人日韩| 午夜国产精品视频免费体验区| 女人色偷偷aa久久天堂| 国产亚洲精品激情久久| 国产精品区一区| 亚洲精品1234| 另类天堂视频在线观看| 一区二区三区国产精华| 久久青草久久| 国产原创一区二区| 午夜精品免费| av不卡在线| 欧美福利视频在线| 在线免费观看成人网| 久久精品国产99| 亚洲视频在线二区| 欧美性一区二区| 一本大道久久a久久精二百| 久热成人在线视频| 欧美主播一区二区三区| 国产精品一区二区在线观看网站| 宅男噜噜噜66一区二区66| 亚洲高清免费视频| 免费成人av在线| 亚洲国产欧美在线人成| 理论片一区二区在线| 久久精品国产69国产精品亚洲| 国产日韩精品视频一区| 久久成人精品电影| 欧美影院成人| 禁久久精品乱码| 久久综合中文色婷婷| 久久九九有精品国产23| 狠狠久久五月精品中文字幕| 欧美在线观看网站| 久久动漫亚洲| 在线看片第一页欧美| 欧美激情在线免费观看| 欧美成人一品| 宅男精品视频| 亚洲一区二区免费视频| 黄色一区二区在线| 国产一区高清视频| 久久久亚洲午夜电影| 亚洲香蕉网站| 国产日韩一区在线| 久久综合综合久久综合| 另类天堂av| 日韩一级大片| 亚洲深夜福利| 狠狠色香婷婷久久亚洲精品| 欧美成人国产va精品日本一级| 欧美成人一区二区三区在线观看| 亚洲免费激情| 午夜视频一区二区| 亚洲国产精品传媒在线观看 | 日韩视频免费| 国产精品自拍网站| 欧美成年人视频| 国产精品v日韩精品v欧美精品网站| 欧美在线亚洲| 免费在线观看精品| 亚洲欧美中文另类| 久久嫩草精品久久久精品| 日韩一级成人av| 久久岛国电影| 亚洲欧美国产三级| 久久中文字幕一区| 欧美一区二区精品在线| 欧美成人精品福利| 久久精品99无色码中文字幕| 欧美人与禽猛交乱配视频| 久久视频在线看| 国产精品天天看| 亚洲精品视频在线播放| 韩国精品主播一区二区在线观看| 亚洲精品美女久久久久| 久久福利资源站| 日韩视频免费| 久久久久亚洲综合| 欧美一区二区三区日韩视频| 欧美欧美天天天天操| 免费一区视频| 国产在线精品一区二区夜色| 亚洲精品一区二区三| 激情欧美日韩| 性欧美xxxx大乳国产app| 中国亚洲黄色| 欧美精品二区| 欧美激情综合| **欧美日韩vr在线| 久久精品国产第一区二区三区最新章节 |