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

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

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

?? 會變語言實現的一些程序
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
   最后,一個老經驗是:在一些Windows范例程序中,您可能在WinMain中看到以下程序代碼:
   
   if (!hPrevInstance)
         
   {
         
      wndclass.cbStyle = CS_HREDRAW | CS_VREDRAW ;
         
            初始化其它 wndclass
         

      RegisterClass (&wndclass) ;
         
   }
    
   
   這是出于「舊習難改」的原因。在16位的Windows中,如果您啟動正在執行的程序的一個新執行實體,WinMain的hPrevInstance參數將是前一個執行實體的執行實體句柄。為節省內存,兩個或多個執行實體就可能會共享相同的窗口類別。這樣,窗口類別就只在hPrevInstance是NULL的時候才注冊,這表明程序沒有其它執行實體。

   在32位的Windows中,hPrevInstance總是NULL。此程序代碼會正常執行,而實際上也沒必要檢查hPrevInstance。


建立窗口

   窗口類別定義了窗口的一般特征,因此可以使用同一窗口類別建立許多不同的窗口。實際呼叫CreateWindowEx建立窗口時,可能指定有關窗口的更詳細的信息。
   
   Windows程序設計新手有時會混淆窗口類別和窗口之間的區別,以及為什么一個窗口的所有特征不能被一次設定好。實際上,以這種方式分開這些樣式信息是非常方便的。例如,所有的按鈕窗口都可以依據同樣的窗口類別來建立,與這個窗口類別相關的窗口消息處理程序位于Windows內部。由窗口類別來負責處理按鈕的鍵盤和鼠標輸入,并定義按鈕在屏幕上的外觀形象。從這一點看來,所有的按鈕都是以同樣的方式工作的。但是并非所有的按鈕都是一樣的。它們可以有不同的大小,不同的屏幕位置,以及不同的字符串。后面的這樣一些特征是窗口定義的一部分,而不是窗口類別定義的。
   
   [細心的讀者比對原文時會發現CreateWindows API并不存在,這是因為C語言會調用不同的API來"解釋"這個宏]
   
   傳遞給RegisterClass函數的信息會在一個數據結構中設定好,而傳遞給CreateWindowEx函數的信息會在函數單獨的參數中設定好。下面是HELLOWIN.ASM中的CreateWindowEx呼叫,每一個字段都做了完整的說明:
   
    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   
   

   標記為「window class name」的參數是szAppName,它含有字符串「HelloWin」-這是程序注冊的窗口類別名稱。這就是我們建立的窗口聯結窗口類別的方式。
   
   此程序建立的窗口是一個普通的重迭式窗口。它含有一個標題列,標題列左邊有一個系統菜單按鈕,標題列右邊有縮小、放大和關閉圖示,四周還有一個表示窗口大小的邊框。這是標準樣式的窗口,名為WS_OVERLAPPEDWINDOW,出現在CreateWindow的「窗口樣式」參數中。如果看一下Windows.inc,您將會發現此樣式是幾種位旗標的組合:
   
   WS_OVERLAPPEDWINDOW  equ 
        WS_OVERLAPPED OR 
        WS_CAPTION OR 
        WS_SYSMENU OR 
        WS_THICKFRAME OR 
        WS_MINIMIZEBOX OR 
        WS_MAXIMIZEBOX        
   
   「窗口標題」是顯示在標題列中的文字。

   注釋著「initial x position」和「initial y position」的參數指定了窗口左上角相對于屏幕左上角的初始位置。由于這些參數使用CW_USEDEFAULT標識符,指示Windows使用重迭窗口的內定位置。(CW_USEDEFAULT定義為0x80000000。)內定情況下,Windows依次對新建立的窗口定位,使各窗口左上角的垂直和水平距離在屏幕上按一定的大小遞增。與此類似,注釋著「initial x size」和「initial y size」的參數分別指定窗口的寬度和高度。同樣使用了CW_USEDEFAULT標識符,表明希望Windows使用內定尺寸。

   在建立一個「最上層」窗口,如應用程序窗口時,注釋為「父窗口句柄」的參數設定為NULL。通常,如果窗口之間存在有父子關系,則子窗口總是出現在父窗口的上面。應用程序窗口出現在桌面窗口的上面,但不必為呼叫CreateWindow而找出桌面窗口的句柄。

   因為窗口沒有菜單,所以「窗口菜單句柄」也設定為NULL。「程序執行實體句柄」設定為執行實體句柄,它是作為WinMain的參數傳遞給這個程序的。最后,「建立參數」指標設定為NULL,可以用這個參數存取稍后程序中可能引用到的數據。
   
   CreateWindow傳回被建立的窗口的句柄,該句柄存放在變量hwnd中,后者被定義為HWND型態(「窗口句柄型態」)。Windows中的每個窗口都有一個句柄,程序用句柄來使用窗口。許多Windows函數需要使用hwnd作為參數,這樣,Windows才能知道函數是針對哪個窗口的。如果一個程序建立了許多窗口,則每個窗口均有一個句柄。窗口句柄是Windows程序所處理最重要的句柄之一。


顯示窗口

   在CreateWindow呼叫傳回之后,Windows內部已經建立了這個窗口。這就是說,Windows已經配置了一塊內存,用來保存在CreateWindow呼叫中指定窗口的全部信息跟一些其它信息,而Windows稍后就是依據窗口句柄找到這些信息的。
   
   然而,光是這樣子,窗口并不會出現在視訊顯示器上。您還需要兩個函數呼叫,一個是:
   
    invoke ShowWindow,hWnd,SW_SHOWNORMAL
   

   第一個參數是剛剛用CreateWindow建立的窗口句柄。第二個參數是作為參數傳給WinMain的iCmdShow。它確定最初如何在屏幕上顯示窗口,是一般大小、最小化還是最大化。在開始菜單中安裝程序時,使用者可能做出最佳選擇。如果窗口按一般大小顯示,那么WinMain接收到后傳遞給ShowWindow的就是SW_SHOWNORMAL﹔如果窗口是最大化顯示的,則為SW_SHOWMAXIMIZED。而如果窗口只顯示在工作列上,則是SW_SHOWMINNOACTIVE。
   
   ShowWindow函數在顯示器上顯示窗口。如果ShowWindow的第二個參數是SW_SHOWNORMAL,則窗口的顯示區域就會被窗口類別中定義的背景畫刷所覆蓋。函數呼叫
   
    invoke UpdateWindow,hWnd   
   

   會重畫顯示區域。它經由發送給窗口消息處理程序(即HELLOWIN.ASM中的WndProc函數)一個WM_PAINT消息做到這一點。后面,我們將說明WndProc如何處理這個消息。


消息循環

   呼叫UpdateWindow之后,窗口就出現在顯示器上。程序現在必須準備讀入使用者用鍵盤和鼠標輸入的數據。Windows為當前執行的每個Windows程序維護一個「消息隊列」。在發生輸入事件之后,Windows將事件轉換為一個「消息」并將消息放入程序的消息隊列中。
   
   程序通過執行一塊稱之為「消息循環」的程序代碼從消息隊列中取出消息:
   
    StartLoop:
        invoke GetMessage,ADDR msg,NULL,0,0
            cmp eax, 0
            je ExitLoop
                invoke TranslateMessage, ADDR msg
                invoke DispatchMessage,  ADDR msg
            jmp StartLoop
    ExitLoop:        
   

   msg變量是型態為MSG的結構,型態MSG在Windows.inc中定義如下:
   
   MSG STRUCT
     hwnd      DWORD      ?
     message   DWORD      ?
     wParam    DWORD      ?
     lParam    DWORD      ?
     time      DWORD      ?
     pt        POINT      <>
   MSG ENDS        
   

   
   POINT數據型態也是一個結構,它在Windows.inc中定義如下:
   POINT STRUCT
     x  DWORD ?
     y  DWORD ?
   POINT ENDS        
    
   
   消息循環以GetMessage呼叫開始,它從消息隊列中取出一個消息:
   
   invoke GetMessage,ADDR msg,NULL,0,0        
   

   這一呼叫傳給Windows一個指標,指向名為msg的MSG結構。第二、第三和第四個參數設定為NULL或者0,表示程序接收它自己建立的所有窗口的所有消息。Windows用從消息隊列中取出的下一個消息來填充消息結構的各個字段,結構的各個字段包括:
    hwnd 接收消息的窗口句柄。在HELLOWIN程序中,這一參數與CreateWindowEx傳回的hwnd值相同,因為這是該程序擁有的唯一窗口。

   
   message 消息標識符。這是一個數值,用以標識消息。對于每個消息,均有一個對應的標識符,這些標識符定義于Windows表頭文件(其中大多數在Windows.inc中),以前綴WM(「window message」,窗口消息)開頭。例如,使用者將鼠標光標放在HELLOWIN顯示區域之內,并按下鼠標左按鈕,Windows就在消息隊列中放入一個消息,該消息的message字段等于WM_LBUTTONDOWN。這是一個常數,其值為0x0201。

   wParam 一個32位的「message parameter(消息參數)」,其含義和數值根據消息的不同而不同。

   lParam 一個32位的消息參數,其值與消息有關。

   time 消息放入消息隊列中的時間。

   pt 消息放入消息隊列時的鼠標坐標。
   
   
   只要從消息隊列中取出消息的message字段不為WM_QUIT(其值為0x0012),GetMessage就傳回一個非零值。WM_QUIT消息將導致GetMessage傳回0。

敘述
   
    invoke TranslateMessage, ADDR msg        
   

   將msg結構傳給Windows,進行一些鍵盤轉換。(關于這一點,我們將在后面深入討論。)

敘述
   
    invoke DispatchMessage,  ADDR msg
   

   又將msg結構回傳給Windows。然后,Windows將該消息發送給適當的窗口消息處理程序,讓它進行處理。這也就是說,Windows將呼叫窗口消息處理程序。在HELLOWIN中,這個窗口消息處理程序就是WndProe函數。處理完消息之后,WndProc傳回到Windows。此時,Windows還停留在DispatchMessage呼叫中。在結束DispatchMessage呼叫的處理之后,Windows回到HELLOWIN,并且接著從下一個GetMessage呼叫開始消息循環。


窗口消息處理程序

   以上我們所討論的都是必要的負擔:注冊窗口類別,建立窗口,然后在屏幕上顯示窗口,程序進入消息循環,然后不斷從消息隊列中取出消息來處理。
   
   實際的動作發生在窗口消息處理程序中。窗口消息處理程序確定了在窗口的顯示區域中顯示些什么以及窗口怎樣響應使用者輸入。
   
   在HELLOWIN中,窗口消息處理程序是命名為WndProc的函數。窗口消息處理程序可任意命名(只要求不和其它名字發生沖突)。一個Windows程序可以包含多個窗口消息處理程序。一個窗口消息處理程序總是與呼叫RegisterClass注冊的特定窗口類別相關聯。CreateWindowEx函數根據特定窗口類別建立一個窗口。但依據一個窗口類別,可以建立多個窗口。
   
   窗口消息處理程序總是定義為如下形式:
   
   WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜影视日本亚洲欧洲精品| 成人黄色777网| 亚洲线精品一区二区三区| 五月激情六月综合| 国产风韵犹存在线视精品| 99re热这里只有精品免费视频| 精品视频在线免费| 国产日韩v精品一区二区| 国产精品久久三区| 美女www一区二区| 91同城在线观看| 日韩久久久精品| 国产精品人成在线观看免费| 日韩在线观看一区二区| 成人综合在线网站| 欧美一级国产精品| 国产午夜亚洲精品午夜鲁丝片| 亚洲女女做受ⅹxx高潮| 久久不见久久见免费视频1 | 欧美午夜视频网站| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲一区二区三区四区在线| 久久99精品久久久久婷婷| 一本色道a无线码一区v| 亚洲精品在线电影| 午夜精品久久久久久久久久久| 成人黄色在线看| 日韩欧美一区二区久久婷婷| 亚洲一区二区精品3399| 国产传媒欧美日韩成人| 欧美一区二区三区婷婷月色| 亚洲青青青在线视频| 国产精品亚洲专一区二区三区| 欧美精品日韩精品| 一区二区三区中文字幕| 成人黄动漫网站免费app| 精品国产一区二区三区av性色 | 欧美人狂配大交3d怪物一区| 中文字幕日韩一区| 成人午夜激情片| 久久久久久97三级| 国产乱码精品一区二区三区av| 在线免费不卡视频| 夜夜嗨av一区二区三区中文字幕| 不卡的电视剧免费网站有什么| 精品国产乱码久久久久久浪潮 | 欧美日韩成人一区| 亚洲素人一区二区| 成人少妇影院yyyy| 国产精品久久三| 福利一区在线观看| 中文字幕av一区二区三区高| 大陆成人av片| 国产精品你懂的| 99国产精品视频免费观看| 亚洲人妖av一区二区| 欧美三级蜜桃2在线观看| 亚洲综合激情另类小说区| 91精品国产91热久久久做人人| 国产在线看一区| 亚洲另类色综合网站| 制服丝袜亚洲色图| 国产不卡视频在线观看| 亚洲成人中文在线| 久久久国产综合精品女国产盗摄| 99riav久久精品riav| 麻豆精品蜜桃视频网站| 亚洲欧美日韩国产综合在线| 日韩视频在线观看一区二区| jlzzjlzz国产精品久久| 午夜a成v人精品| 国产精品国产三级国产普通话三级| 欧美三级在线看| 成人妖精视频yjsp地址| 日韩国产高清影视| 亚洲欧美国产77777| 精品对白一区国产伦| 色94色欧美sute亚洲线路一ni| 久久国产欧美日韩精品| 亚洲国产视频在线| 国产精品国产馆在线真实露脸| 91麻豆精品国产综合久久久久久| www.亚洲色图| 国产资源精品在线观看| 亚洲国产综合在线| 亚洲欧洲av在线| 久久久久久久久蜜桃| 欧美一区二区三区四区在线观看| 91农村精品一区二区在线| 国产成人亚洲综合色影视| 美女视频一区二区三区| 亚洲福利电影网| 日韩美女精品在线| 国产欧美一区二区精品性色超碰| 日韩写真欧美这视频| 欧美日韩国产免费| 在线精品观看国产| 97se亚洲国产综合自在线不卡 | 一区二区三区国产精品| 国产精品女同互慰在线看 | 日韩精品一区二区三区在线观看| 在线视频欧美精品| 色综合久久久网| 91玉足脚交白嫩脚丫在线播放| 高清成人免费视频| 国产九色sp调教91| 国产成人无遮挡在线视频| 蜜臀久久久久久久| 日本一道高清亚洲日美韩| 香蕉av福利精品导航| 午夜亚洲国产au精品一区二区| 亚洲一区电影777| 一区二区三区精密机械公司| 夜夜嗨av一区二区三区网页| 一区二区三区中文在线观看| 樱花影视一区二区| 亚洲天堂a在线| 一区二区三区四区激情| 亚洲一级二级三级在线免费观看| 亚洲免费观看在线视频| 一区二区三区四区中文字幕| 亚洲国产精品久久艾草纯爱| 天天综合天天综合色| 喷水一区二区三区| 国产麻豆一精品一av一免费 | 免费一区二区视频| 人人狠狠综合久久亚洲| 久久精工是国产品牌吗| 黑人精品欧美一区二区蜜桃| 大桥未久av一区二区三区中文| thepron国产精品| 在线观看日韩毛片| 欧美一级在线观看| 国产三级一区二区| 一区二区三区不卡在线观看| 婷婷夜色潮精品综合在线| 免费成人性网站| 成人丝袜高跟foot| 欧美亚洲综合在线| 亚洲精品一区二区在线观看| 国产精品欧美综合在线| 亚洲成a人v欧美综合天堂下载| 美脚の诱脚舐め脚责91| 成人av第一页| 欧美日韩另类国产亚洲欧美一级| 欧美tickle裸体挠脚心vk| 成人免费一区二区三区在线观看| 亚洲成av人影院| 国产精品性做久久久久久| 在线观看国产一区二区| 精品成人一区二区三区四区| 亚洲人成网站在线| 狠狠色丁香九九婷婷综合五月| 一本大道久久a久久综合| 欧美一区二区在线不卡| 中文字幕在线播放不卡一区| 日韩专区欧美专区| 99在线视频精品| 欧美mv和日韩mv国产网站| 亚洲精品日产精品乱码不卡| 久久激情综合网| 精品视频色一区| 中文字幕精品—区二区四季| 视频精品一区二区| 99精品欧美一区二区蜜桃免费| 日韩一区二区三区四区| 亚洲精品国产精品乱码不99 | 国产精品每日更新| 久久精品国产亚洲a| 欧洲国产伦久久久久久久| 久久精品人人爽人人爽| 日本美女一区二区| 色婷婷狠狠综合| 日本一区二区电影| 狠狠色丁香久久婷婷综合丁香| 欧美喷水一区二区| 亚洲精品国产精品乱码不99| 成人三级伦理片| 欧美精品一区二区在线播放| 香蕉久久夜色精品国产使用方法 | 国产日韩一级二级三级| 青青草精品视频| 欧美影片第一页| 一区二区三区中文在线| 91丨porny丨户外露出| 国产精品视频九色porn| 国产91精品一区二区麻豆网站 | 亚洲国产成人porn| 99精品视频中文字幕| 国产精品午夜在线| 成人午夜视频网站| 国产日韩视频一区二区三区| 另类小说一区二区三区| 欧美精品1区2区| 天天综合色天天| 日韩亚洲欧美一区二区三区| 麻豆一区二区99久久久久| 日韩精品一区二区在线| 蜜桃91丨九色丨蝌蚪91桃色| 日韩午夜在线影院|