win32汇编环境,对话框程序里对画弧线的理解

;运行效果

;win32汇编环境,对话框程序里对画弧线的理解
;调用Arc函数,主要对坐标的理解。画一个弧线,首先要理解它在一个矩形里面,四边一样长则是正方形里面。
;假设先在一个正方形里面,则需要左上角的坐标与右下角的坐标,然后是弧的起始点坐标与终点坐标。
;下面示例先把正方形画出来,然后把弧画出来,通过比较坐标值就理解了。
;直接抄进RadAsm可编译运行。重要部分加备注。
;下面为asm文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    windows.inc 
include    user32.inc 
include    kernel32.inc 
include    gdi32.inc

includelib user32.lib 
includelib kernel32.lib 
includelib gdi32.lib

; 自定义函数声明
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD   ;对话框窗口函数

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data 
DlgName    db "MyDialog",0 

.data? 
hInstance HINSTANCE             ? 

.const 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    equ 1000    ;图标
  
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code 
start: 
         invoke GetModuleHandle, NULL 
         mov    hInstance,eax 
         invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL 
         invoke ExitProcess,eax 

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 
        LOCAL   @stPs:PAINTSTRUCT
        LOCAL   @stRect:RECT
        LOCAL   @hDc
        
        .if     uMsg == WM_INITDIALOG 
                invoke    LoadIcon,hInstance,ICO_MAIN    ;加载图标
            invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
        .elseif uMsg == WM_PAINT
                invoke  BeginPaint,hWnd,addr @stPs          ;得到设备,就是屏幕,才能显示出来
                mov     @hDc,eax
                
                invoke  RoundRect,@hDc,10,10,110,110,0,0    ;先画方形,X与Y距离一样就是正方形,否则是矩形
                
                invoke  MoveToEx,@hDc,5,60,0                ;画直线,作为中线
                invoke  LineTo,@hDc,15,60
                
                invoke  MoveToEx,@hDc,105,60,0               ;画直线,作为中线
                invoke  LineTo,@hDc,115,60
                ;把上面画的方形与直线删除,就可以得到想要的弧
                invoke  Arc,@hDc,10, 10, 110, 110, 10, 60, 110, 60     ;画弧,这个弧等于半圆形,其它类型的弧以此类推
                invoke  Arc,@hDc,120, 10, 220, 110, 120, 60, 220, 60   ;第二个弧,用来与第一个弧比较
                
                invoke  EndPaint,hWnd,addr @stPs
        .elseif uMsg == WM_CLOSE 
                invoke EndDialog, hWnd,NULL 
        .else 
                mov eax,FALSE 
                ret 
        .endif 
                mov eax,TRUE 
        ret 
DlgProc endp 

end start 

;下面为rc文件内容
#include "resource.h"                   //提示缺少该文件,可以在资源里下载
#define    ICO_MAIN        1000    //图标
  
ICO_MAIN    ICON        "Main.ico"

//定义对话框
MyDialog DIALOG 10, 10, 120, 60 
STYLE  DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | 
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK 
CAPTION "对话框程序模版" 

BEGIN 

END 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一品人家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值