📄 用masmplus学习汇编语言(8) .txt
字号:
mov wndclass.lpszMenuName,NULL
mov wndclass.lpszClassName,offset szAppName
mov wndclass.hIconSm,0
invoke RegisterClassEx, ADDR wndclass
.if (EAX==0)
invoke MessageBox,NULL,CTXT("This program requires Windows NT!"),addr szAppName,MB_ICONERROR
ret
.endif
invoke CreateWindowEx,
NULL,
ADDR szAppName, ;window class name
CTXT("halo effect"), ;window caption
WS_OVERLAPPEDWINDOW, ;window style
CW_USEDEFAULT, ;initial x position
CW_USEDEFAULT, ;initial y position
CW_USEDEFAULT, ;initial x size
CW_USEDEFAULT, ;initial y size
NULL, ;parent window handle
NULL, ;window menu handle
hInstance, ;program instance handle
NULL ;creation parameters
mov hWnd,eax
invoke ShowWindow,hWnd,iCmdShow
invoke UpdateWindow,hWnd
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hwnd:DWORD,message:DWORD,wParam :DWORD,lParam :DWORD
LOCAL hdc :HDC
LOCAL tmpx,tmpy :DWORD
LOCAL ps :PAINTSTRUCT
LOCAL szBuffer[256] :BYTE
.if message == WM_SIZE
mov eax,lParam ;cxClient = LOWORD (lParam)
and eax,0FFFFh
mov cxClient,eax
mov rectwhole.right,eax
mov eax,lParam
shr eax,16
mov cyClient,eax ;cyClient = HIWORD (lParam)
mov rectwhole.bottom,eax
ret
.elseif message == WM_KEYDOWN
.if wParam == VK_UP
add grRight,5
.elseif wParam == VK_DOWN
sub grRight,5
.elseif wParam == VK_LEFT
add grLeft,5
.elseif wParam == VK_RIGHT
sub grLeft,5
.endif
invoke InvalidateRect,hwnd,addr rectwhole,FALSE
.elseif message == WM_PAINT
invoke BeginPaint,hwnd,addr ps
mov hdc,eax
xor edx,edx
mov eax,cxClient
mov ecx,9
div ecx
mov tmpx,eax ;tmpx = cxClient / 9
xor edx,edx
mov eax,cyClient
mov ecx,5
div ecx
mov tmpy,eax ;tmpy = cyClient / 5
mov eax,tmpy
mov ecx,4
mul ecx
push eax ;eax = 4 * cyClient / 5
mov rectleft.bottom,eax
mov eax,tmpx
mov ecx,4
mul ecx
push eax ;eax = 4 * cxClient / 9
mov rectleft.right,eax
mov eax,tmpy
push eax
mov rectleft.top,eax
mov eax,tmpx
push eax
mov rectleft.left,eax
push hdc
call Rectangle ;绘制左边大长方形
xor eax,eax
mov al,grLeft
shl eax,8
mov al,grLeft
shl eax,8
mov al,grLeft
mov ebx,eax
invoke CreateSolidBrush,eax
mov ebx,eax
invoke FillRect,hdc,addr rectleft,ebx
mov eax,tmpy
mov ecx,3
mul ecx
push eax ;eax = 3 * cyClient / 9
mov eax,tmpx
mov ecx,3
mul ecx
push eax ;eax = 3 * cxClient / 5
mov eax,tmpy
add eax,eax
push eax
mov eax,tmpx
add eax,eax
push eax
push hdc
call Rectangle ;绘制左边小长方形
push tmpy
mov eax,tmpx
mov ecx,5
mul ecx
push eax ;eax = 5 * cxClient / 9
mov eax,tmpy
mov ecx,4
mul ecx
push eax
mov eax,tmpx
mov ecx,8
mul ecx
push eax
push hdc
call Rectangle ;绘制右边大长方形
mov eax,tmpy
mov ecx,3
mul ecx
push eax
mov rectright.bottom,eax
mov eax,tmpx
mov ecx,7
mul ecx
push eax ;eax = 8 * cxClient / 9
mov rectright.right,eax
mov eax,tmpy
mov ecx,2
mul ecx
push eax
mov rectright.top,eax
mov eax,tmpx
mov ecx,6
mul ecx
push eax
mov rectright.left,eax
push hdc
call Rectangle ;绘制右边小长方形
xor eax,eax
mov al,grRight
shl eax,8
mov al,grRight
shl eax,8
mov al,grRight
invoke CreateSolidBrush,eax
mov ebx,eax
invoke FillRect,hdc,addr rectright,ebx
invoke EndPaint,hwnd,addr ps
ret
.elseif message == WM_DESTROY
invoke PostQuitMessage,NULL
ret
.endif
invoke DefWindowProc,hwnd, message, wParam, lParam
ret
WndProc endp
END START
运行结果:
你可以使用光标上下左右调整明暗。试试看什么时候感觉差别最大。
江湖传闻:据说美国码头搬运军火的装运工曾经因为箱子太沉太重而罢工。后来心理学家给军方一个建议,
就是使用绿色的箱子装军火,而原来的箱子都是黑色的。改变颜色之后,装运工普遍觉得箱子“轻了”。
个人观点:在目前所有的科学研究中,人类在心理学方面成就不大,思维是非线性不容易量化的,并且
出于道德伦理上面的限制,科学家也无法做过多的试验,而实验是科学的基础。很多时候,心理学的实验凭借
受试者的“感觉”,也是非常不精确的。
参考:
1. http://www.bioon.com/popular/math/305225.shtml
2. http://zhidao.baidu.com/question/2311680.html
色彩的膨胀与收缩感
据说法兰西国旗一开始是由面积完全相等的红、白、蓝三色制成的,但是旗帜升到空中后在感觉是三色的面积并不相等,
于是召集了有关色彩专家进行专门研究,最后把三色的比例调整到红35%、白33%、蓝37%的比例时才感觉到面积相等。
这究竟是什么原因呢?
因为当各种不同波长的光同时通过水晶体时,聚集点并不完全在视网膜的一个平面上,因此在视网膜上的影像的清晰度
就有一定差别。长波长的暖色影像似焦距不准 确,因此在视网膜上所形成的影像模糊不清,似乎具有一种扩散性;短波长
的冷色影像就比较清晰,似乎具有某种收缩性。所以,我们平时在凝视红色的时候,时间 长了会产生眩晕现象,景物形象
模糊不清似有扩张运动的感觉。如果我们改看青色,就没有这种现象了。如果我们将红色与蓝色对照着看,由于色彩同时
对比的作 用,其面积错视现象就会更加明显。
色彩的膨胀、收缩感不仅与波长有关,而且还与明度有关。由于“球面像差”物理原理,光亮的物体在视网膜上所成影像
的轮廓外似乎有一圈光圈围绕着,使物体在 视网膜上的影像轮廓扩大了,看起来就觉得比实物大一些,如通电发亮的电灯
钨丝比通电前的钨丝似乎要粗得多,生理物理学上称这种现象为“光渗”现象。歌德在 《论颜色的科学》一文中指出:
“两个圆点同样面积大小,在白色背景上的黑圆点比黑色背景上的白圆点要小1/5。”同一个人。日出和日落时,地平线上
仿佛出现一个凹陷似的,这也是光渗作 用而引起的视觉现象。
宽度相同的印花黑白条纹布,感觉上白条子总比黑条子宽;同样大小的黑白方格子布,白方格子要比黑方格略大一些。超市中,
小商品、小包装若要使它显眼一些, 宜采用鲜艳的浅色;如果要它显得高贵精致,宜采用沉着的深色或黑色。为了扩大建筑
或交通工具的室内空间感,色彩设计宜采用乳白、浅米、象牙等淡雅明快的色 调,像卫生间等特别狭小的空间还可以利用
镜子作墙面,利用镜子的反射来增加面积的宽畅度和明亮度。
--------------------------------------------------------------------------------
<<<上一篇 欢迎访问AoGo汇编小站:http://www.aogosoft.com/ 下一篇>>>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -