鱼C论坛

 找回密码
 立即注册
查看: 1908|回复: 7

[已解决]按钮的判断和建立一可以编辑的文本框

[复制链接]
发表于 2014-1-13 11:43:21 | 显示全部楼层 |阅读模式
10鱼币
                .386
                .model flat,stdcall
                option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                gdi32.inc
includelib                gdi32.lib
include                user32.inc
includelib                user32.lib
include                kernel32.inc
includelib                kernel32.lib
include                shell32.inc
includelib                shell32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
button1     equ     1
button2     equ     2
edit2       equ     3
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data?
hInstance        dd                ?
hWinMain        dd                ?
zWindow     dd      ?
        .data
jledit      db      '555555',0               

                .const
szClassName                db        'MyClass',0
szCaptionMain        db        'My first Window !',0
szButton                db        'button', 0
szButtonText        db        '退   出', 0
szOpen                        db        'open', 0
szButtonText2        db        '打开CMD', 0
szURL           db  'cmd.exe',0
szedit          db  'EDIT',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain        proc        uses ebx edi esi hWnd,uMsg,wParam,lParam
                local        @stPs:PAINTSTRUCT               
                local        @stRect:RECT                     
                local        @hDc

                mov        eax,uMsg
;********************************************************************
                .if        eax ==        WM_PAINT                                    
                        invoke        BeginPaint,hWnd,addr @stPs                  
                        mov        @hDc,eax

                        invoke        GetClientRect,hWnd,addr @stRect              
                        invoke        DrawText,@hDc,NULL,-1,\              
                                addr @stRect,\
                                DT_SINGLELINE or DT_CENTER or DT_VCENTER        

                        invoke        EndPaint,hWnd,addr @stPs
                .elseif eax == WM_COMMAND                                           ;当按下按钮的时候
                        mov        eax, wParam
                       
                        .if        ax == IDOK
                        invoke        ShellExecute, NULL, offset szOpen,\
                                        offset szURL, NULL, NULL, SW_SHOWNORMAL                       
                        .else
                        invoke        DestroyWindow,hWinMain
                        invoke        PostQuitMessage,NULL                                       
                        .endif                       
;********************************************************************
; 建立一个按钮
;********************************************************************
                .elseif        eax ==        WM_CREATE                              
                        invoke        CreateWindowEx,NULL,\                     
                                offset szButton,offset szButtonText2,\                  
                                WS_CHILD or WS_VISIBLE,\                       
                                920,700,88,22,\
                                hWnd,button1,hInstance,NULL                           
                    invoke        CreateWindowEx,WS_EX_CLIENTEDGE,\                           ;这里建立一个文本框
                                offset szedit,offset jledit,\                  
                                WS_CHILD or WS_VISIBLE,\                        
                                100,100,800,500,\
                                hWnd,edit2,hInstance,NULL
                                mov zWindow,eax                               
                    invoke        CreateWindowEx,NULL,\                                                    ;这是第二个按钮  
                                offset szButton,offset szButtonText,\                  
                                WS_CHILD or WS_VISIBLE,\                        
                                920,730,88,22,\
                                hWnd,button2,hInstance,NULL                       
;********************************************************************
                .elseif        eax ==        WM_CLOSE
                        invoke        DestroyWindow,hWinMain
                        invoke        PostQuitMessage,NULL
;********************************************************************
                .else
                        invoke        DefWindowProc,hWnd,uMsg,wParam,lParam      
                        ret
                .endif
;********************************************************************
                xor        eax,eax
                ret

_ProcWinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain        proc
                local        @stWndClass:WNDCLASSEX
                local        @stMsg:MSG

                invoke        GetModuleHandle,NULL                           
                mov        hInstance,eax
                invoke        RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
                invoke        LoadCursor,0,IDC_ARROW                        
                mov        @stWndClass.hCursor,eax
                push        hInstance                          
                pop        @stWndClass.hInstance                                  
                mov        @stWndClass.cbSize,sizeof WNDCLASSEX
                mov        @stWndClass.style,CS_HREDRAW or CS_VREDRAW
                mov        @stWndClass.lpfnWndProc,offset _ProcWinMain      
                mov        @stWndClass.hbrBackground,COLOR_WINDOW + 1        
                mov        @stWndClass.lpszClassName,offset szClassName
                invoke        RegisterClassEx,addr @stWndClass              
;********************************************************************
; 建立并显示窗口
;********************************************************************
                invoke        CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
                        WS_POPUPWINDOW,\                              
                        100,100,600,400,\
                        NULL,NULL,hInstance,NULL
                mov        hWinMain,eax
                invoke        ShowWindow,hWinMain,SW_MAXIMIZE
                invoke        UpdateWindow,hWinMain                           
;********************************************************************
; 消息循环
;********************************************************************
                .while        TRUE
                        invoke        GetMessage,addr @stMsg,NULL,0,0
                        .break        .if eax        == 0
                        invoke        TranslateMessage,addr @stMsg               ;Translate翻译
                        invoke        DispatchMessage,addr @stMsg                ;Dispatch派遣   
                .endw
                ret

_WinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                call        _WinMain
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start

这个程序里建立了按钮 我不明白按钮建立到按下按钮我都没有看到发送消息的函数代码sendmessage
.if        ax == IDOK    这个IDOK是怎么来的  发送按钮消息会发送一个ID 假如我要建立3个,4个按钮或者更多
那ax == ?  怎么判断那个按钮发出来的消息?
建立edit类 为什么程序一闪就没有了?





最佳答案
2014-1-13 11:43:22

如果是单纯的EDIT编辑框,我发表过一个记事本的源码,也是win32写的,你可以去我空间看看

最佳答案

查看完整内容

如果是单纯的EDIT编辑框,我发表过一个记事本的源码,也是win32写的,你可以去我空间看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-13 11:43:22 | 显示全部楼层    本楼为最佳答案   

如果是单纯的EDIT编辑框,我发表过一个记事本的源码,也是win32写的,你可以去我空间看看

评分

参与人数 1鱼币 +5 贡献 +5 收起 理由
sd53852728 + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-13 22:00:53 | 显示全部楼层
IDOK是你资源中自己定义的啊,IDOK你还要#define定义一下呢
如果多定义几个完全可以:
#define IDOK1   0X1001
#define IDOK2   0X1002
#define IDOK3   0X1003
#define IDOK4   0X1004
wParam的低16位就是控件的ID  比如你按下了IDOK4  那么wParam的低16位就是0x1004  这样就可以判断按下哪个按钮了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-13 22:13:52 | 显示全部楼层
F:\78523.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-13 22:19:19 | 显示全部楼层

能说的详细一点吗 谢谢

能说的详细一点吗 谢谢
能说的详细一点吗 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-13 23:03:13 | 显示全部楼层
按钮的问题我找到答案了 谢谢  我还有一个建立打字的文本框没成功还有待解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-16 13:01:05 | 显示全部楼层
好的 谢谢{:7_156:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-14 15:55:27 | 显示全部楼层
学习了。高手多多啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-24 14:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表