標籤:
再進一步、
.386.model flat,stdcalloption casemap:noneinclude Windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.libWinMain proto :DWORD ,:DWORD,:DWORD,:DWORD ;WinMain 函數原型定義.DATAClassName db "SimpleWinClass",0AppName db "My First Window",0.DATA? ;沒有初始化的資料hInstance HINSTANCE ?CommandLine LPSTR ? ;字串指標變數.CODEstart:;-----------------------------------------------------------------------------------------------------------;得到應用程式的控制代碼invoke GetModuleHandle,NULLmov hInstance,eax;-----------------------------------------------------------------------------------------------------------;得到命令列參數invoke GetCommandLinemov CommandLine,eax;調用WinMain函數invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT;-----------------------------------------------------------------------------------------------------------;退出該應用程式invoke ExitProcess,eax;-----------------------------------------------------------------------------------------------------------WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND;-----------------------------------------------------------------------------------------------------------;註冊視窗類別mov wc.cbSize,SIZEOF WNDCLASSEXmov wc.style,CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc,OFFSET WndProc ;指定視窗的回呼函數mov wc.cbClsExtra,NULLmov wc.cbWndExtra,NULLpush hInstancepop wc.hInstance ;儲存視窗的執行個體控制代碼mov wc.hbrBackground,COLOR_WINDOW+1 ;視窗的背景顏色mov wc.lpszMenuName,NULLmov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATIONmov wc.hIcon,eaxmov wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov wc.hCursor,eaxinvoke RegisterClassEx,addr wc;-----------------------------------------------------------------------------------------------------------;建立視窗對象invoke CreateWindowEx,NULL, ADDR ClassName, ADDR AppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULLmov hwnd,eax;-----------------------------------------------------------------------------------------------------------;顯示視窗invoke ShowWindow,hwnd,CmdShow;-----------------------------------------------------------------------------------------------------------;重新整理視窗客戶區invoke UpdateWindow,hwnd;-----------------------------------------------------------------------------------------------------------;進入擷取視窗訊息的迴圈 .WHILE TRUE invoke GetMessage,ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage,ADDR msg invoke DispatchMessage,ADDR msg .endwmov eax,msg.wParamretWinMain endp;-----------------------------------------------------------------------------------------------------------;視窗回呼函數WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM;關閉訊息--退出處理.IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL.ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret.endifxor eax,eaxret WndProc endp end start
Windows下的視窗程序