| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5352 人关注过本帖, 1 人收藏
标题:用Win32汇编写的"奥运会开幕倒计时牌",请大家指正
只看楼主 加入收藏
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
结帖率:100%
收藏(1)
 问题点数:0 回复次数:13 
用Win32汇编写的"奥运会开幕倒计时牌",请大家指正
今天我用Win32汇编写了一个小小的程序,目的:
1、我是小菜鸟,大程序还不会写;
2、坚持每天写一个小程序,培养自己的动手动脚能力;
3、2008北京奥运会快要开幕了,不能整天都埋头写代码,也要关心国家大事,所以写了个东西,这是最主要的目的;
4、既然是小菜鸟,自己做出来的东西,就要拿出来让大家批评指正。

牛哥牛弟们呀,在计算两次时间间隔的方法上,我实在没有好办法啊,知道的给讲讲吧。还有,对于“年”我没法算,好像太复杂了,对于“月份”我是按31天/月计的(呵呵~~幸亏7月、8月都是31天哈),可见这是一个偷工减料的程序。
===============================================================================
OlympicTime.ASM文件
=========================================================
;这个小程序的功能是:把北京奥运会的开幕时间换算成秒数,
;然后获取本地时间,也换算成秒数,将前者减去后者,(如果相
;减后,数值小于或等于0,则提醒,点OK退出)把得到
;的时间再换算成天数时数分数秒数,并显示出来.
;呵呵~~方法很笨,但超简单的啦.希望牛哥牛弟批评指正
;=================================================
;作者:ONEPROBLEM  2008年7月24日
;=================================================
        .386
        .model flat,stdcall
        option casemap:none

include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib

ID_DIALOG    equ    1
ICO_MAIN    equ    1
IDB_MAIN    equ    1
IDC_DAY        equ    100
IDC_HOUR    equ    101
IDC_MINUTE    equ    102
IDC_SECOND    equ    103
IDC_BMP        equ    104

        .data?
        
hInstance    dd    ?
hWinMain    dd    ?
hBmp        dd    ?
idTimer        dd    ?
OlymTimeCount    dd    ?
NowTimeCount    dd    ?

        .const
szCaption    db    '友情提醒',0
szText        db    '2008北京奥运会开幕了! Welcome to BeiJing!',0
;================================================================
        .code
        
_Getlocaltime    proc    _hWnd
        local    @stTime:SYSTEMTIME

        pushad
        invoke    GetLocalTime,addr @stTime
        movzx    eax,@stTime.wMonth
        mov    ebx,2678400        ;把月份换算成秒数
        mul    ebx
        mov    NowTimeCount,eax
        
        movzx    eax,@stTime.wDay
        mov    ebx,86400        ;把天数换算成秒数
        mul    ebx
        add    NowTimeCount,eax
        
        movzx    eax,@stTime.wHour
        mov    ebx,3600        ;把时数换算成秒数
        mul    ebx
        add    NowTimeCount,eax
        
        movzx    eax,@stTime.wMinute    ;把分数换算成秒数
        mov    ebx,60
        mul    ebx
        add    NowTimeCount,eax
        
        movzx    eax,@stTime.wSecond
        add    NowTimeCount,eax
        
        mov    eax,22190888         ;开幕时间在8月8日20时8分8秒,这是换算成的秒数
        sub    eax,NowTimeCount
        .if    eax <= 0
            invoke    MessageBox,hWinMain,offset szText,offset szCaption,MB_OK
            invoke SendMessage,hWinMain,WM_CLOSE,0,0
        .endif
        mov    OlymTimeCount,eax    ;以下将这个数换算成倒计时"天时分秒"
        
        mov    edx,0             ;在此eax不用重新赋值
        mov    ebx,86400
        div    ebx
        mov    OlymTimeCount,edx    ;重新保存余数
        invoke    SetDlgItemInt,hWinMain,IDC_DAY,eax,FALSE
        
        mov    eax,OlymTimeCount
        mov    edx,0
        mov    ebx,3600
        div    ebx
        mov    OlymTimeCount,edx
        invoke    SetDlgItemInt,hWinMain,IDC_HOUR,eax,FALSE
        
        mov    eax,OlymTimeCount
        mov    edx,0
        mov    ebx,60
        div    ebx
        mov    OlymTimeCount,edx
        invoke    SetDlgItemInt,hWinMain,IDC_MINUTE,eax,FALSE
        
        mov    eax,OlymTimeCount
        invoke    SetDlgItemInt,hWinMain,IDC_SECOND,eax,FALSE
        popad
        ret
        
_Getlocaltime    endp
;======================================================================
_ProcDlgMain    proc    uses ebx edi esi,hWnd,uMsg,wParam,IParam
        mov    eax,uMsg
        
        .if    eax == WM_INITDIALOG
            push    hWnd
            pop    hWinMain
            invoke    LoadIcon,hInstance,ICO_MAIN
            invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
            invoke    LoadBitmap,hInstance,IDB_MAIN
            mov    hBmp,eax
            invoke    SendDlgItemMessage,hWnd,IDC_BMP,STM_SETIMAGE,IMAGE_BITMAP,hBmp
            invoke    SetTimer,NULL,NULL,1000,addr _Getlocaltime
            mov    idTimer,eax
            
        .elseif    eax == WM_COMMAND
            mov    eax,wParam
            .if    ax == IDCANCEL
                invoke    KillTimer,NULL,idTimer
                invoke    EndDialog,hWnd,NULL
            .endif
                
        .elseif    eax == WM_CLOSE
            invoke    KillTimer,NULL,idTimer
            invoke    EndDialog,hWnd,NULL
            
        .else
            mov    eax,FALSE
            ret
        .endif
        mov    eax,TRUE
        ret
            
_ProcDlgMain    endp
;========================================================================
start:
        invoke    GetModuleHandle,NULL
        mov    hInstance,eax
        invoke    DialogBoxParam,hInstance,ID_DIALOG,NULL,offset _ProcDlgMain,NULL
        invoke    ExitProcess,NULL
        
        end    start

======================================================================================================

//OLYMPICTIME.RC文件
//===============================================
#include        <resource.h>

#define    ICO_MAIN    1
#define    ID_DIALOG    1
#define    IDB_MAIN    1
#define    IDC_DAY        100
#define    IDC_HOUR    101
#define    IDC_MINUTE    102
#define    IDC_SECOND    103
#define    IDC_BMP        104

ICO_MAIN    ICON    "1.ico"
IDB_MAIN    BITMAP    "1.bmp"

//==============================================

ID_DIALOG DIALOG DISCARDABLE  50, 50, 180, 88
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "2008北京奥运开幕倒计时"
FONT 14, "宋体"
BEGIN
    PUSHBUTTON      "退   出",IDCANCEL,116,66,50,14
    CONTROL         " ",IDC_BMP,"Static",SS_BITMAP | WS_CHILD | WS_VISIBLE,7,7,40,
                    60
    LTEXT           "距第29届奥运会开幕还有:",IDC_STATIC,51,7,129,18,
                    SS_CENTERIMAGE
    CTEXT           " ",IDC_DAY,52,39,16,10,SS_SUNKEN
    LTEXT           "天",IDC_STATIC,71,39,8,10
    CTEXT           " ",IDC_HOUR,85,39,16,10,SS_SUNKEN
    LTEXT           "时",IDC_STATIC,106,39,8,10
    CTEXT           " ",IDC_MINUTE,115,39,16,10,SS_SUNKEN
    LTEXT           "分",IDC_STATIC,134,39,8,10
    CTEXT           " ",IDC_SECOND,143,39,16,10,SS_SUNKEN
    LTEXT           "秒",IDC_STATIC,164,39,8,10
END
//=============================================================================================


OlympicTime.rar (20.92 KB)
搜索更多相关主题的帖子: 奥运会 倒计时牌 开幕 
2008-07-24 22:41
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
这个程序发得急了些。其实还存在几个问题:
1、如果不是2008年了,怎么办?所以,应该在定时器过程里有这样的语句:
movzx    eax,@stTime.wYear
    .if    eax != 2008
        invoke     SendMessage,hWinMain,WM_CLOSE,0,0
    .endif
2、位图没有释放!在处理WM_COMMAND 和 WM_CLOSE消息时,应该增加这条语句:
invoke        DeleteObject,hBmp
3、要修改系统时间,才能调试倒计时为0的时候;虽然倒计时为0了,如果不处理弹出的消息框的话,“新”的倒计时又开始了。

总之,问题还多,希望大家指正。


[[it] 本帖最后由 ONEPROBLEM 于 2008-7-26 19:08 编辑 [/it]]

001.png (328.46 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-07-26 18:19
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
牛哥啊,俺还天天抄书上代码呢. 牛哥都天天写小程序了.   我哭.
2008-07-26 19:29
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
不错 lz真是强
2008-07-27 15:11
阳小子
Rank: 1
等 级:新手上路
帖 子:26
专家分:6
注 册:2008-8-19
收藏
得分:0 
谢谢分享!收藏了,以前也想写过,但是由于时间计算方面比较麻烦后来放弃了,没想到今天又在这里看到了。
2008-08-19 21:53
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
不错,学习了
不过好像有问题,现在奥运会都开完了,怎么还是正的时间
图片附件: 游客没有浏览图片的权限,请 登录注册


[[it] 本帖最后由 随心 于 2008-9-11 15:45 编辑 [/it]]

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-09-11 15:43
高阁逆风
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:508
专家分:321
注 册:2006-4-29
收藏
得分:0 

      上天安排我做了个多情的人,却又安排我遭遇了无数绝情的人,所以我最终把自己磨练成了一个滥情的人。别人是人见人爱,我是见人爱人.......
2008-09-11 16:02
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
哎 太厉害了  一点也没看懂 啊
太惭愧了
2008-09-11 20:24
谁与争疯
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:海南省
等 级:版主
威 望:191
帖 子:15071
专家分:17513
注 册:2007-4-22
收藏
得分:0 
终有一天,我也会用win32汇编写一个“死亡倒计时程序”

论坛是我家灌水靠大家
2008-09-11 20:52
小勇12
Rank: 1
等 级:新手上路
帖 子:36
专家分:1
注 册:2008-10-21
收藏
得分:0 
支持
2008-10-24 00:52
快速回复:用Win32汇编写的"奥运会开幕倒计时牌",请大家指正
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033517 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved