返回列表 发帖

[原创]调用计算器并使它居中显示

[watermark]文件压缩后只有613个字节。解压后2K。
下载地址:

[原创]调用计算器并使它居中显示

居中是最主要的,不弄就没有意思了。主要是看居中的算法。公布源码:
.386
.Model Flat, StdCall
Option Casemap :None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
.CODE
Main proc
    local t:RECT,hInstance:DWORD,hCalc:DWORD,w:DWORD,h:DWORD
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke WinExec,CTXT("calc"),SW_MINIMIZE
    invoke FindWindow,NULL,CTXT("计算器")
    mov hCalc,eax
    .if eax!=0
        invoke GetWindowRect,hCalc,addr t
        invoke GetSystemMetrics,SM_CXSCREEN
        add eax,t.left
        sub eax,t.right
        shr eax,1
        mov w,eax
        invoke GetSystemMetrics,SM_CYSCREEN
        add eax,t.top
        sub eax,t.bottom
        shr eax,1
        mov h,eax
        invoke SetWindowPos,hCalc,HWND_TOPMOST,w,h,0,0,SWP_NOSIZE
    .endif
    invoke ExitProcess,0
Main endp
END Main
居中是其一,还有设置窗口模态为总在最前端。

TOP

[原创]调用计算器并使它居中显示

简单处理一下,还可减少,手工进行处理,可减少更多,不过意义不大。
初次练笔,源码已经公布,谁都可以去处理,没什么了。。。

TOP

[原创]调用计算器并使它居中显示

     用C++实现代码很短。我在C++源码中用的是GetSystemMetrics(0)获取桌面,其实还可以用到EnumDisplaySettings来获取,不过后者稍麻烦。
     居中的算法应该不唯一,希望你能写出与我不同的算法。

     回X86的问题:那里确实没有什么意思,省略即可。

TOP

[原创]调用计算器并使它居中显示

例如还有一种算法:
   由屏幕长和宽两条直角边,利用勾股定理求出斜边长度,然后同理可获取计算器窗口的斜边(对角线长度),然后让这两条斜边对齐,做直线运动,当计算器斜边到达屏幕斜边中点的时候,停止运动。换话话来说:就是让计算器窗口从屏幕左上角向屏幕右下角滑动,当滑到中间的时候停止。实现起来应该比上述方面麻烦的多,但乐趣不同!
   由于计算机CPU指定非常快,所以可能看不到滑动效果就直接居中了,这时如果想看到滑动轨迹,在每次改变窗口位置的地方加Sleep(100)即可。
   因为意义不大,我也赖得再写出源码,编程思想就这样,大家理解就行。

TOP

返回列表 回复 发帖