| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 803 人关注过本帖
标题:请高手看下我这个程序
只看楼主 加入收藏
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
结帖率:50%
收藏
 问题点数:0 回复次数:2 
请高手看下我这个程序
看这个程序  :这个是 asm文件    .386
        .model flat,stdcall
        option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ID_TIMER1    equ    1
ID_TIMER2    equ    2
ICO_1        equ    1
ICO_2        equ    2
DLG_MAIN    equ    1
IDC_SETICON    equ    100
IDC_COUNT    equ    101
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .data?
hInstance    dd        ?
hWinMain    dd        ?
dwCount        dd        ?
idTimer        dd        ?
                .data
szFormat    db    '程序测试数据%x',0
caption     db    '程序测试',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 定时器过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcTimer    proc    _hWnd,_uMsg,_idEvent,_dwTime

        pushad
        invoke    GetDlgItemInt,hWinMain,IDC_COUNT,NULL,FALSE
        inc    eax
        invoke    SetDlgItemInt,hWinMain,IDC_COUNT,eax,FALSE
        popad
        ret

_ProcTimer    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain    proc    uses ebx edi esi,hWnd,uMsg,wParam,lParam
                local    @szBuffer[256]:byte
        mov    eax,uMsg
;********************************************************************
        .if    eax ==    WM_TIMER
            mov    eax,wParam
            .if    eax ==    ID_TIMER1
                inc    dwCount
                
                
                
                
                .if dwCount==2
                invoke    wsprintf,addr @szBuffer,addr szFormat,hWnd
                        invoke    MessageBox,hWnd,addr @szBuffer,offset caption,MB_OK
                        invoke    wsprintf,addr @szBuffer,addr szFormat,hInstance
                        invoke    MessageBox,hWnd,addr @szBuffer,offset caption,MB_OK
                        .endif
                
                
                
                
                
                
                mov    eax,dwCount
                and    eax,1
                inc    eax
                invoke    LoadIcon,hInstance,eax
                invoke    SendDlgItemMessage,hWnd,IDC_SETICON,STM_SETIMAGE,IMAGE_ICON,eax
            .elseif    eax ==    ID_TIMER2
                invoke    MessageBeep,-1
            .endif
;********************************************************************
        .elseif    eax ==    WM_INITDIALOG
            push    hWnd
            pop    hWinMain
            invoke    SetTimer,hWnd,ID_TIMER1,250,NULL
            invoke    SetTimer,hWnd,ID_TIMER2,2000,NULL
            invoke    SetTimer,NULL,NULL,1000,addr _ProcTimer
            mov    idTimer,eax
;********************************************************************
        .elseif    eax ==    WM_CLOSE
            invoke    KillTimer,hWnd,ID_TIMER1
            invoke    KillTimer,hWnd,ID_TIMER2
            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,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
        invoke    ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        end    start
这个是资源文件//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include        <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define    DLG_MAIN        1
#define    ICO_1            1
#define    ICO_2            2
#define    IDC_SETICON        100
#define    IDC_COUNT        101
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_1    ICON        "1.ico"
ICO_2    ICON        "2.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 50, 50, 113, 40
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "定时器例子"
FONT 9, "宋体"
{
 ICON ICO_1, IDC_SETICON, 8, 9, 18, 21
 LTEXT "计数:", -1, 35, 16, 25, 10
 LTEXT "", IDC_COUNT, 62, 16, 40, 10
}这是一个对话框程序  ,主要看这就行了                .data
szFormat    db    '程序测试数据%x',0
caption     db    '程序测试',0                                                                                                                                         .if dwCount==2
                invoke    wsprintf,addr @szBuffer,addr szFormat,hWnd
                        invoke    MessageBox,hWnd,addr @szBuffer,offset caption,MB_OK
                        invoke    wsprintf,addr @szBuffer,addr szFormat,hInstance
                        invoke    MessageBox,hWnd,addr @szBuffer,offset caption,MB_OK
                        .endif这段代码只是一个测试,我想把 hwnd和hinstance的输出来  ,一个窗口过程传进来的参数,一个是创建对话框得到的实例句柄 ,结果发现他们不一样 ,但是  我拿同样的代码 ,建一个普通的窗口 这两只是一样的 ,问什么呢?                                                                                                                                          还有第二个问题     把 invoke    MessageBox,hWnd,addr @szBuffer,offset caption,MB_OK
中的hWnd换成hInstance程序编译连接是不报错 ,但是不能弹出 窗口了 ,这个测试如果是一个普通窗口,是可以弹出的,这又是为什么 ,我QQ是494000816,题目不懂 可以找我 ,我在线等答案 ,还有 ,我现在正在学win32有大哥大姐可以加我不   ,指导一下  ,欢迎加我

[[it] 本帖最后由 toyix 于 2008-7-31 15:43 编辑 [/it]]
搜索更多相关主题的帖子: win32 
2008-07-31 15:26
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
第一个问题  我兄弟已经帮我解决了   原来是 窗口句柄(hWinMain)与实例句柄(hInstance)是不一样的!我弄乱了   ,push    hWnd
            pop    hWinMain这里才是窗口的句柄 啊
2008-07-31 18:57
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
MessageBox应该属于子窗口之类的吧?
这里的hWnd如果是NULL,则它没有父窗口;如果是普通的窗口,有父窗口,就弹出来了。
但hInstance是本程序句柄,它好像不是个窗口吧?
2008-08-01 09:57
快速回复:请高手看下我这个程序
数据加载中...
 
   



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

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