萬盛學電腦網

 萬盛學電腦網 >> 電腦入門 >> win32匯編之窗口程序

win32匯編之窗口程序

窗口的創建過程:

1)。使用GetModulHandle獲取窗口句柄

GetModuleHandle,lpModuleName

獲取一個應用程序或動態鏈接庫的模塊句柄

lpModuleName參數是一個指向含有模塊名字字符串的指針

如果返回成功,則返回模塊句柄,存放在eax中。如果lpModuleName為NULL,則返回調用者本模塊的句柄

2)。注冊窗口類

定義一個WNDCLAS***結構類型的變量,對其進行賦值,在調用RegisterClas***函數在系統中注冊。

WNDCLAS***的結構定義如下:

WNDCLAS*** STRUCT

cbSize DWORD ? ;結構體的字節數我們可以用sizeof(WNDCLAS***)來獲得准確的值

style DWORD ? ;窗口風格

lpfnWndProc DWORD ? ;窗口過程的地址

cbCl***tra DWORD ? ;緊跟在窗口類結構後邊的字節數

cbWndExtra DWORD ? ;緊跟在窗口事例後的附加字節數

hInstance DWORD ? ;本模塊的事例句柄

hIcon DWORD ? ;圖標的句柄

hCursor DWORD ? ;光標的句柄

hbrBackground DWORD ? ;背景色

lpszMenuName DWORD ? ;指向類名稱的指針

hIconSm DWORD ? ;小圖標

WNDCLAS*** ENDS

RegisterClas*** lpClassName

lpClassName參數是窗口類的地址

3)。建立窗口

CreateWindowEx, dwExstyle, lpClassName, lpWindowName, dwStyle,\

x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam

dwExstyle和dwStyle決定了窗口的外形和行為,dwStyle是win16開始就有點的屬性,dwExstyle是win32中擴展的。

lpClassName:建立窗口使用的類名字符串指針。

lpWindowName:指向窗口名稱的字符串。會顯示在標題欄中。

x,y:指向窗口左上角位置,單位是像素

nWidth, nHeight:窗口的寬度和高度,單位是像素。

hWndParent:父窗口的句柄,若無父窗口,則為NULL

hMenu:窗口上要出現菜單的句柄。

hInstance:模塊句柄,指定了窗口所屬的程序模塊。

lpParam:指針,指向一個欲傳給窗口的參數

4)。消息循環

;>>>>>>>>>消息循環

.while TRUE

invoke GetMessage, addr @stMsg,NULL, 0, 0

.break .if eax == 0

invoke TranslateMessage, addr @stMsg

invoke DispatchMessage, addr @stMsg

.endw

GetMessage:從消息隊列中取出一條消息,准備處理

TranslateMessage:遇到鍵盤消息則將掃描碼轉換成ASCII碼,否則不處理

DispatchMessage:將消息發送到窗口對應的窗口過程去處理。

窗口過程

WindowProc proc uses ebx edi esi, hWnd, uMsg, wParam, lParam

mov eax, uMsg

.if eax == WM_XXX

<處理WM_XXX消息>

.elseif eax == WM_YYY

copyright © 萬盛學電腦網 all rights reserved