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

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

?? 見招拆招《windows程序設計》(二) .txt

?? 會變語言實現的一些程序
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
見招拆招《Windows程序設計》(二) 
    作者:Zoologist 于2007-10-15上傳   

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

窗口和消息

    在前一章,程序使用函數MessageBox來向使用者輸出文字。MessageBox函數會建立一個「窗口」。在Windows中,「窗口」一詞有確切的含義。一個窗口就是屏幕上的一個矩形區域,它接收使用者的輸入并以文字或圖形的格式顯示輸出內容。
    MessageBox函數建立一個窗口,但這只是一個功能有限的特殊窗口。消息窗口有一個帶關閉按鈕的標題列、一個選項圖標、一行或多行文字,以及最多四個按鈕。當然,必須選擇Windows提供給您的圖標與按鈕。
    MessageBox函數非常有用,但下面不會過多地使用它。我們不能在消息框中顯示圖形,而且也不能在消息框中添加菜單。要添加這些對象,就需要建立自己的窗口,現在就開始。


自己的窗口
    
    建立窗口很簡單,只需調用CreateWindow函數即可。我們在MSDN上可以找到這個函數的原形:
    
    HWND CreateWindow(      
        LPCTSTR lpClassName,
        LPCTSTR lpWindowName,
        DWORD dwStyle,
        int x,
        int y,
        int nWidth,
        int nHeight,
        HWND hWndParent,
        HMENU hMenu,
        HINSTANCE hInstance,
        LPVOID lpParam
    );
    
    CreateWindow的第一個參數就是所謂的「窗口類別名稱」,并且該窗口類別連接所謂的「窗口消息處理程序」。在我們使用CreateWindow之前,有一點背景知識會對您大有幫助。


總體結構

    進行Windows程序設計,實際上是在進行一種對象導向的程序設計(OOP)。這點在Windows中使用得最多的對象上表現最為明顯。這種對象正是Windows之所以命名為「Windows」的原因,它具有人格化的特征,甚至可能會在您的夢中出現,這就是那個叫做「窗口」的東西。

    桌面上最明顯的窗口就是應用程序窗口。這些窗口含有顯示程序名稱的標題列、菜單甚至可能還有工具列和滾動條。另一類窗口是對話框,它可以有標題列也可以沒有標題列。

    裝飾對話框表面的還有各式各樣的按鍵、單選按鈕、復選框、清單方塊、滾動條和文字輸入區域。其中每一個小的視覺對象都是一個窗口。更確切地說,這些都稱為「子窗口」或「控件窗口」或「子窗口控件」。

    作為對象,使用者會在屏幕上看到這些窗口,并通過鍵盤和鼠標直接與它們進行交互操作。更有趣的是,程序寫作者的觀點與使用者的觀點極其類似。窗口以「消息」的形式接收窗口的輸入,窗口也用消息與其它窗口通訊。對消息的理解將是學習如何寫作Windows程序所必須越過的障礙之一。
    
    這有一個Windows的消息范例:我們知道,大多數的Windows程序都有大小合適的應用程序窗口。也就是說,您能夠通過鼠標拖動窗口的邊框來改變窗口的大小。通常,程序將通過改變窗口中的內容來響應這種大小的變化。您可能會猜測(并且您也是正確的),是Windows本身而不是應用程序在處理與使用者重新調整窗口大小相關的全部雜亂程序。由于應用程序能改變其顯示的樣子,所以它也「知道」窗口大小改變了。
    
    應用程序是如何知道使用者改變了窗口的大小的呢?由于程序寫作者習慣了往常的文字模式程序,操作系統沒有設置將此類消息通知給使用者的機制。問題的

    關鍵在于理解Windows所使用的架構。當使用者改變窗口的大小時,Window給程序發送一個消息指出新窗口的大小。然后程序就可以調整窗口中的內容,以響應大小的變化。
    
    「Windows給程序發送消息。」我們希望讀者不要對這句話視而不見。它到底表達了什么意思呢?我們在這里討論的是程序代碼,而不是一個電子郵件系統。操作系統怎么給程序發送消息呢?
    
    其實,所謂「Windows給程序發送消息」,是指Windows呼叫程序中的一個函數,該函數的參數描述了這個特定消息。這種位于Windows程序中的函數稱為「窗口消息處理程序」。
    
    無疑,讀者對程序呼叫操作系統的做法是很熟悉的。例如,程序在打開磁盤文件時就要使用有關的系統呼叫。讀者所不習慣的,可能是操作系統呼叫程序,而這正是Windows對象導向架構的基礎。
    
    程序建立的每一個窗口都有相關的窗口消息處理程序。這個窗口消息處理程序是一個函數,既可以在程序中,也可以在動態鏈接庫中。Windows通過呼叫窗口消息處理程序來給窗口發送消息。窗口消息處理程序根據此消息進行處理,然后將控制傳回給Windows。
    
    更確切地說,窗口通常是在「窗口類別」的基礎上建立的。窗口類別標識了處理窗口消息的窗口消息處理程序。使用窗口類別使多個窗口能夠屬于同一個窗口類別,并使用同一個窗口消息處理程序。例如,所有Windows程序中的所有按鈕均依據同一個窗口類別。這個窗口類別與一個處理所有按鈕消息的窗口消息處理程序(位于Windows的動態鏈接庫中)聯結。
    
    在對象導向的程序設計中,對象是程序與數據的組合。窗口是一種對象,其程序是窗口消息處理程序。數據是窗口消息處理程序保存的信息和Windows為每個窗口以及系統中那個窗口類別保存的信息。
    
    窗口消息處理程序處理給窗口發送消息。這些消息經常是告知窗口,使用者正使用鍵盤或者鼠標進行輸入。這正是按鍵窗口知道它被「按下」的奧妙所在。在窗口大小改變,或者窗口表面需要重畫時,由其它消息通知窗口。
    
    Windows程序開始執行后,Windows為該程序建立一個「消息隊列」。這個消息隊列用來存放該程序可能建立的各種不同窗口的消息。程序中有一小段程序代碼,叫做「消息循環」,用來從隊列中取出消息,并且將它們發送給相應的窗口消息處理程序。有些消息直接發送給窗口消息處理程序,不用放入消息隊列中。
    
    如果您對這段Windows架構過于簡略的描述將信將疑,就讓我們去看看在實際的程序中,窗口、窗口類別、窗口消息處理程序、消息隊列、消息循環和窗口消息是如何相互配合的。這或許會對您有些幫助。

    HELLOWIN程序
    
    建立一個窗口首先需要注冊一個窗口類別,那需要一個窗口消息處理程序來處理窗口消息。處理窗口消息對每個Windows程序都帶來了些負擔。程序3-1所示的HELLOWIN程序中整個做的事情差不多就是料理這些事情。
    
    程序3-1 HELLOWIN.ASM 
            
    ;MASMPlus 代碼模板 - 普通的 Windows 程序代碼
    .386
    .Model Flat, StdCall
    Option Casemap :None

    Include windows.inc
    Include user32.inc
    Include kernel32.inc
    Include gdi32.inc
    Include winmm.inc

    includelib gdi32.lib
    IncludeLib user32.lib
    IncludeLib kernel32.lib
    IncludeLib winmm.lib
    include macro.asm
        
        WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
        WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
        
    .DATA
        szAppName   db "HelloWin",0
        
    .DATA?
        hInstance   dd ?
        
    .CODE
    START:   ;從這里開始執行

        invoke GetModuleHandle,NULL
        mov hInstance,eax
        invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
        invoke ExitProcess,0

    WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
        LOCAL wndclass :WNDCLASSEX
        LOCAL msg       :MSG
        local hWnd      :HWND
        mov wndclass.cbSize,sizeof WNDCLASSEX   
        mov wndclass.style,CS_HREDRAW or CS_VREDRAW 
        mov wndclass.lpfnWndProc,offset WndProc

        mov wndclass.cbClsExtra,0
        mov wndclass.cbWndExtra,0
        
        push hInst
        pop wndclass.hInstance
        
        invoke LoadIcon,NULL,IDI_APPLICATION
        mov wndclass.hIcon,eax  
        
        invoke LoadCursor,NULL,IDC_ARROW
        mov wndclass.hCursor,eax    
        
        invoke GetStockObject,WHITE_BRUSH
        mov wndclass.hbrBackground,EAX
        
        mov wndclass.lpszMenuName,NULL
        mov wndclass.lpszClassName,offset szAppName

        mov wndclass.hIconSm,0
        
        invoke RegisterClassEx, ADDR wndclass
        .if (EAX==0)
             invoke MessageBox,NULL,CTXT("This program requires Windows NT!"),addr szAppName,MB_ICONERROR       
             ret
        .endif
            
        invoke CreateWindowEx,
                        NULL,
                ADDR szAppName,                         ;window class name
                CTXT("http://www.aogosoft.com"), ;window caption
                WS_OVERLAPPEDWINDOW,                    ;window style
                200,                                        ;initial x position
                200,                                        ;initial y position
                400,                                        ;initial x size
                200,                                        ;initial y size
                NULL,                                   ;parent window handle
                NULL,                                       ;window menu handle
                hInst,                              ;program instance handle
                NULL                                ;creation parameters
        mov hWnd,eax
        
        invoke ShowWindow,hWnd,SW_SHOWNORMAL
        invoke UpdateWindow,hWnd
        
        StartLoop:
            invoke GetMessage,ADDR msg,NULL,0,0
                cmp eax, 0
                je ExitLoop
                    invoke TranslateMessage, ADDR msg
                    invoke DispatchMessage,  ADDR msg
                jmp StartLoop
        ExitLoop:
        
    mov eax,msg.wParam
    ret
    WinMain endp

    WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清不卡在线| 综合亚洲深深色噜噜狠狠网站| 一本久久精品一区二区| 国产suv精品一区二区6| 免费成人你懂的| 激情五月播播久久久精品| 久久99精品一区二区三区| 美国三级日本三级久久99| 黄色小说综合网站| 国产成人99久久亚洲综合精品| 国产成人自拍网| 成人av网址在线| 91丨porny丨在线| 91久久久免费一区二区| 欧美剧在线免费观看网站 | 成人性视频免费网站| 国产成a人亚洲精品| 色综合久久天天| 日韩欧美国产一区在线观看| 久久久久久麻豆| 亚洲欧洲制服丝袜| 日韩精品视频网| 国产精品996| 欧美色图免费看| 精品久久国产字幕高潮| 国产精品欧美综合在线| 性做久久久久久久免费看| 狂野欧美性猛交blacked| 成人av在线资源网站| 精品视频一区三区九区| 精品国产一区二区三区不卡| 日韩一区中文字幕| 久久91精品国产91久久小草 | 色综合天天综合狠狠| 91精品国产一区二区三区蜜臀 | 日韩欧美电影在线| 国产精品理伦片| 蜜臀av在线播放一区二区三区| 国产成人精品亚洲午夜麻豆| 欧美视频在线不卡| 国产日产亚洲精品系列| 奇米色777欧美一区二区| 成年人午夜久久久| 精品国产乱码久久久久久牛牛 | 精品久久久三级丝袜| 亚洲在线成人精品| 丰满少妇久久久久久久| 欧美人xxxx| 亚洲欧洲综合另类| 成人综合在线网站| 精品久久久久久久久久久久久久久 | 亚洲国产成人在线| 久久精品国产亚洲aⅴ| 日本久久电影网| 欧美国产精品专区| 久久99久国产精品黄毛片色诱| 欧美性生活大片视频| 综合久久给合久久狠狠狠97色| 国产精品中文字幕一区二区三区| 欧美美女一区二区在线观看| 亚洲人成网站影音先锋播放| 成人激情小说网站| 国产日韩高清在线| 国产成人精品一区二区三区四区| 日韩精品影音先锋| 久久国内精品自在自线400部| 欧美日韩高清在线播放| 午夜久久福利影院| 欧美人与z0zoxxxx视频| 亚洲va在线va天堂| 欧美日本国产一区| 日韩黄色在线观看| 在线不卡一区二区| 日本va欧美va瓶| 精品久久久久久亚洲综合网 | 久久精品人人做人人爽人人| 麻豆成人久久精品二区三区红| 欧美三级视频在线播放| 亚洲国产另类av| 3atv一区二区三区| 久久99日本精品| 久久久久久99精品| 99久久婷婷国产综合精品| 中文字幕的久久| 91麻豆精品在线观看| 亚洲午夜激情av| 日韩一区二区三区在线视频| 免费观看30秒视频久久| 精品国产一区二区三区av性色| 久久99国产精品久久99| 国产色产综合色产在线视频| 99精品欧美一区二区三区小说| 一区二区三区中文免费| 欧美福利一区二区| 韩国v欧美v亚洲v日本v| 国产精品日韩成人| 欧美午夜一区二区三区免费大片| 亚洲一区二区欧美日韩| 欧美成人高清电影在线| 成人91在线观看| 日韩黄色免费网站| 国产欧美一区视频| 在线免费观看视频一区| 久久精品国产一区二区三| 亚洲欧洲日产国产综合网| 欧美久久久一区| 国产福利一区二区| 视频一区中文字幕| 综合激情成人伊人| 日韩欧美色综合| 在线观看网站黄不卡| 韩国欧美国产1区| 一区二区三区美女| 久久久精品黄色| 欧美日韩成人一区二区| 成人黄色一级视频| 精品亚洲国内自在自线福利| 亚洲欧美日韩电影| 久久夜色精品国产噜噜av| 欧美视频中文字幕| 成人av电影免费观看| 男人操女人的视频在线观看欧美| 国产精品女同互慰在线看| 91精品久久久久久久久99蜜臂| 不卡一区二区中文字幕| 老司机午夜精品| 日精品一区二区| 一区二区三区在线看| 欧美国产日韩亚洲一区| 欧美sm美女调教| 在线不卡中文字幕| 色噜噜狠狠色综合中国| 高清不卡在线观看av| 美国十次了思思久久精品导航| 亚洲亚洲人成综合网络| 国产精品国产自产拍高清av王其 | 欧美日韩一卡二卡三卡| 不卡的av网站| 成人免费看的视频| 国产高清在线精品| 国产一区二区三区免费| 激情亚洲综合在线| 久草热8精品视频在线观看| 免费看黄色91| 亚洲综合视频在线| 国产精品色哟哟| 国产精品理伦片| 一区在线中文字幕| 亚洲图片欧美激情| 亚洲免费视频成人| 一区二区三区高清| 亚洲综合男人的天堂| 亚洲精品欧美二区三区中文字幕| 国产欧美va欧美不卡在线| 国产欧美日韩精品一区| 久久久不卡网国产精品一区| 欧美精品一区二区在线观看| ww久久中文字幕| 国产精品影视在线观看| 欧美日韩精品专区| 99热精品国产| 99久久精品久久久久久清纯| 91麻豆国产福利在线观看| 欧美日本一区二区三区四区| 成人爱爱电影网址| 欧美在线制服丝袜| 在线成人免费视频| 成人国产精品免费观看视频| 91精品欧美综合在线观看最新| 国产精品久久久久久久久免费相片| 免费美女久久99| 欧美日韩亚州综合| 中文字幕亚洲一区二区av在线| 久久超碰97人人做人人爱| 欧美亚洲国产一区在线观看网站| 日本一区二区在线不卡| 久久疯狂做爰流白浆xx| 欧美精品乱码久久久久久按摩| 国产精品久久久久久福利一牛影视| 麻豆精品国产91久久久久久| 欧美疯狂性受xxxxx喷水图片| 中文字幕在线观看不卡| 国产东北露脸精品视频| 日韩精品一区在线观看| 男女男精品网站| 欧美一区二区女人| 奇米影视一区二区三区| 欧美浪妇xxxx高跟鞋交| 亚洲国产精品一区二区www| 99久久久国产精品| 一区视频在线播放| 成人动漫精品一区二区| 中文字幕不卡在线观看| 国产精品一区二区三区乱码| 久久综合九色综合欧美就去吻| 麻豆精品在线播放| 日韩欧美一区二区久久婷婷| 久久精品国产精品亚洲精品 | 成人av综合一区| 亚洲国产成人一区二区三区|