欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

用RadASM 开发窗口程序

发布时间:2025/4/14 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 用RadASM 开发窗口程序 小编觉得挺不错的,现在分享给大家,帮大家做个参考.


用RadASM新建一个项目;选择Win32exe模板;


一 在窗体上输出文字

在.data区添加

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


实现在窗体上输出文字;


二 获取Windows目录和系统目录并在窗体上输出

在.data?段添加
bufferw db 50 dup(?)
   buffers db 50 dup(?)
在WM_CREATE消息处理段添加,
invoke GetWindowsDirectory, addr bufferw, sizeof bufferw ; 置Windows目录于缓冲区中
invoke GetSystemDirectory, addr buffers, sizeof buffers ;置系统目录于缓冲区中

在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


三 在窗体上画圆

添加一个画圆过程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目录于缓冲区中invoke GetSystemDirectory, addr buffers, sizeof buffers ;置系统目录于缓冲区中.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







《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的用RadASM 开发窗口程序的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。