用RadASM 开发窗口程序
生活随笔
收集整理的這篇文章主要介紹了
用RadASM 开发窗口程序
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
用RadASM新建一個(gè)項(xiàng)目;選擇Win32exe模板;
一 在窗體上輸出文字
在.data區(qū)添加
szText db '小狗狗,小兔兔,小貓貓 !',0
在WM_PAINT消息處理段中添加
invoke BeginPaint,hWnd,addr @stPs
mov @hDc,eax
invoke GetClientRect,hWnd,addr @stRect
invoke DrawText,@hDc,addr szText,-1,\
addr @stRect,\
DT_SINGLELINE or DT_CENTER or DT_VCENTER
invoke EndPaint,hWnd,addr @stPs
實(shí)現(xiàn)在窗體上輸出文字;
二 獲取Windows目錄和系統(tǒng)目錄并在窗體上輸出
在.data?段添加bufferw db 50 dup(?)
? ?buffers db 50 dup(?)
在WM_CREATE消息處理段添加,
invoke GetWindowsDirectory, addr bufferw, sizeof bufferw ; 置Windows目錄于緩沖區(qū)中
invoke GetSystemDirectory, addr buffers, sizeof buffers ;置系統(tǒng)目錄于緩沖區(qū)中
在WM_PAINT消息處理段添加,
invoke DrawText,@hDc,addr bufferw,-1,\
addr @stRect,\
DT_SINGLELINE or DT_VCENTER or DT_LEFT
invoke DrawText,@hDc,addr buffers,-1,\
addr @stRect,\
DT_SINGLELINE or DT_VCENTER or DT_RIGHT
三 在窗體上畫圓
添加一個(gè)畫圓過程circle,代碼見后; 在WM_PAINT消息處理段添加, invoke ?circle,hWnd,00E5C27Fh,10,10,50,50效果;
代碼: windemo1.asm
.586 .model flat,stdcall option casemap:noneinclude windows.incinclude user32.incinclude kernel32.incinclude gdi32.incincludelib user32.libincludelib kernel32.libincludelib gdi32.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORD.dataClassName db "MainWinClass",0AppName db "Main Window",0szText db '小狗狗,小兔兔,小貓貓 !',0hCap db "WindowsDirectory",0.data?hInstance HINSTANCE ?CommandLine LPSTR ?bufferw db 50 dup(?)buffers db 50 dup(?).code; ---------------------------------------------------------------------------circle proc hndl:DWORD,colr:DWORD,tx:DWORD,ty:DWORD,lx:DWORD,ly:DWORDLOCAL hDC :DWORDLOCAL hPen :DWORDLOCAL hPenOld :DWORDinvoke GetDC,hndlmov hDC, eaxinvoke CreatePen,0,3,colrmov hPen, eaxinvoke SelectObject,hDC,hPenmov hPenOld, eaxinvoke Arc,hDC,tx,ty,lx,ly,0,0,0,0invoke SelectObject,hDC,hPenOldinvoke DeleteObject,hPenretcircle endpstart:invoke GetModuleHandle, NULLmov hInstance,eaxinvoke GetCommandLinemov CommandLine,eaxinvoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULTinvoke ExitProcess,eaxWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov wc.cbSize,SIZEOF WNDCLASSEXmov wc.style, CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc, OFFSET WndProcmov wc.cbClsExtra,NULLmov wc.cbWndExtra,NULLpush hInstancepop wc.hInstancemov wc.hbrBackground,COLOR_BTNFACE+1mov wc.lpszMenuName,NULLmov wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov wc.hIcon,eaxmov wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,300,200,NULL,NULL,\hInst,NULLmov hwnd,eaxinvoke ShowWindow, hwnd,SW_SHOWNORMALinvoke UpdateWindow, hwnd.WHILE TRUEinvoke GetMessage, ADDR msg,NULL,0,0.BREAK .IF (!eax)invoke TranslateMessage, ADDR msginvoke DispatchMessage, ADDR msg.ENDWmov eax,msg.wParamret WinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAMlocal @stPs:PAINTSTRUCTlocal @stRect:RECTlocal @hDc.IF uMsg==WM_DESTROYinvoke PostQuitMessage,NULL.ELSEIF uMsg==WM_CREATEinvoke GetWindowsDirectory, addr bufferw, sizeof bufferw ; 置Windows目錄于緩沖區(qū)中invoke GetSystemDirectory, addr buffers, sizeof buffers ;置系統(tǒng)目錄于緩沖區(qū)中.ELSEIF uMsg == WM_PAINTinvoke BeginPaint,hWnd,addr @stPsmov @hDc,eaxinvoke GetClientRect,hWnd,addr @stRectinvoke DrawText,@hDc,addr szText,-1,\addr @stRect,\DT_SINGLELINE or DT_CENTER or DT_VCENTERinvoke DrawText,@hDc,addr bufferw,-1,\addr @stRect,\DT_SINGLELINE or DT_VCENTER or DT_LEFTinvoke DrawText,@hDc,addr buffers,-1,\addr @stRect,\DT_SINGLELINE or DT_VCENTER or DT_RIGHTinvoke circle,hWnd,00E5C27Fh,10,10,50,50invoke EndPaint,hWnd,addr @stPs.ELSEinvoke DefWindowProc,hWnd,uMsg,wParam,lParam ret.ENDIFxor eax,eaxret WndProc endpend start
總結(jié)
以上是生活随笔為你收集整理的用RadASM 开发窗口程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解Oracle 12c 触发器实例
- 下一篇: 图解win7下ping命令使用