用RadASM 开发窗口程序
2016-05-20 19:09
375 查看
用RadASM新建一个项目;选择Win32exe模板;
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
实现在窗体上输出文字;
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
在WM_PAINT消息处理段添加,
invoke circle,hWnd,00E5C27Fh,10,10,50,50
效果;
代码:
windemo1.asm
一 在窗体上输出文字
在.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:none include windows.inc include user32.inc include kernel32.inc include gdi32.inc includelib user32.lib includelib kernel32.lib includelib gdi32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD .data ClassName db "MainWinClass",0 AppName db "Main Window",0 szText db '小狗狗,小兔兔,小猫猫 !',0 hCap 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:DWORD LOCAL hDC :DWORD LOCAL hPen :DWORD LOCAL hPenOld :DWORD invoke GetDC,hndl mov hDC, eax invoke CreatePen,0,3,colr mov hPen, eax invoke SelectObject,hDC,hPen mov hPenOld, eax invoke Arc,hDC,tx,ty,lx,ly,0,0,0,0 invoke SelectObject,hDC,hPenOld invoke DeleteObject,hPen ret circle endp start: invoke GetModuleHandle, NULL mov hInstance,eax invoke GetCommandLine mov CommandLine,eax 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 WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInstance pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ CW_USEDEFAULT,300,200,NULL,NULL,\ hInst,NULL mov hwnd,eax invoke ShowWindow, hwnd,SW_SHOWNORMAL invoke UpdateWindow, hwnd .WHILE TRUE invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM local @stPs:PAINTSTRUCT local @stRect:RECT local @hDc .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg==WM_CREATE invoke GetWindowsDirectory, addr bufferw, sizeof bufferw ; 置Windows目录于缓冲区中 invoke GetSystemDirectory, addr buffers, sizeof buffers ;置系统目录于缓冲区中 .ELSEIF uMsg == 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 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 invoke circle,hWnd,00E5C27Fh,10,10,50,50 invoke EndPaint,hWnd,addr @stPs .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start
相关文章推荐
- RADASM中使用DOSBOX来运行DOS/BIOS程序(16位)
- 图解RadASM使用初步
- 图解用RadASM开发一个同时编辑多个文档的编辑器
- RadASM with Masm32
- RadASM资源链接错误RC2104及找不到resource.h解决方案
- Win32 汇编子过程总结
- Win32 汇编语句模板
- 用RadASM开发窗口程序(2)
- Win10 + MASM32 + EditPlus 汇编语言编程环境设置
- 初学Win32汇编的参考书籍及开发环境
- Win32汇编下Hello World程序
- win32汇编语言实现冒泡排序
- 让 RadAsm + masm32 环境支持 Irvine32.lib
- 鼠标钩子WH_MOUSE_LL
- MyBatis逆向工程自动生成实体类和映射文件
- 流量统计
- 顺序表应用1:多余元素删除之移位算法
- Hibernate常见问题
- 对象
- 比较两个字符串【不可以使用strcmp】