| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 457 人关注过本帖
标题:窗口间消息互发__________ 成功 还是 失败 看不出来
只看楼主 加入收藏
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
结帖率:96.55%
收藏
已结贴  问题点数:0 回复次数:8 
窗口间消息互发__________ 成功 还是 失败 看不出来
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include        windows.inc
include        gdi32.inc
includelib    gdi32.lib
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szButton db 'button', 0
szButtonText db '&OK', 0

szEdit    db 'edit', 0
szEditText db 'know jj yy jiu shi li', 0

        .data?
hInstance    dd        ?
hWinMain    dd        ?
szBuffer db 512 dup (?)
szReceive    db    'Receive WM_SETTEXT message',0dh,0ah
        db    'param: %08x',0dh,0ah
        db    'text: "%s"',0dh,0ah,0

        .const
szClassName    db    'MyClass',0
szCaptionMain    db    'Receive Message',0
szText        db    'Win32 Assembly, Simple and powerful !',0

szMessageText db '是否确定关闭窗口?', 0
szMessageTitle db '对话框...', 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 CreateWindowEx, NULL, offset szButton,\
                offset szButtonText, WS_CHILD or WS_VISIBLE or WS_BORDER,\
                10, 10, 62, 22,\
                hWnd, 1, hInstance, NULL
            
            invoke CreateWindowEx, NULL, offset szEdit, \
                NULL, WS_CHILD or WS_VISIBLE or WS_BORDER,\
                80, 10, 300, 22,\
                hWnd, 2, hInstance, NULL
               
            invoke    BeginPaint,hWnd,addr @stPs
            mov    @hDc,eax

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

            invoke    EndPaint,hWnd,addr @stPs
;********************************************************************
        .elseif    eax ==    WM_CLOSE
            ;设置一个选项 是否确定关闭
            invoke MessageBox, hWnd, offset szMessageText, offset szMessageTitle, MB_YESNO
            
            .if eax == IDYES
                invoke    DestroyWindow,hWinMain
                invoke    PostQuitMessage,NULL
            .endif
;********************************************************************
        .elseif eax == WM_SETTEXT
            invoke wsprintf, addr szBuffer, addr szReceive, lParam, lParam
            invoke MessageBox, hWnd, offset szBuffer, addr  szCaptionMain, MB_OK
        .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_OVERLAPPEDWINDOW,\
            100,100,600,400,\
            NULL,NULL,hInstance,NULL
        mov    hWinMain,eax
        invoke    ShowWindow,hWinMain,SW_SHOWNORMAL
        invoke    UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
        .while    TRUE
COMMENT #            
            invoke    GetMessage,addr @stMsg,NULL,0,0
            .break    .if eax    == 0
            invoke    TranslateMessage,addr @stMsg
            invoke    DispatchMessage,addr @stMsg
#   
            invoke PeekMessage, addr @stMsg, NULL, 0, 0, PM_REMOVE
            
            .if eax
                .break .if @stMsg.message == WM_QUIT
                invoke TranslateMessage, addr @stMsg
                invoke DispatchMessage, addr @stMsg
            .elseif
                ;invoke MessageBox, @stMsg.hwnd, offset szButton, offset szButtonText, MB_OK
            .endif        

        .endw
        ret

_WinMain    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
        call    _WinMain
        invoke    ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        end    start
搜索更多相关主题的帖子: include 
2011-08-10 22:15
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:0 
____发送方

;MASMPlus 代码模板 - 控制台程序

.386
.model flat, stdcall
option casemap:none

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


.data?
hWnd dd ?
szBuffer db 256 dup(?)

.const
szCaption db 'SendMessage', 0
szStart db 'Press ok to start SendMdssage, param:%08x!', 0
szDestClass db 'MyClass', 0
szReturn db 'SendMessage returned!', 0
szText db 'Text send to other windows', 0
szNotFound db 'Receive M<essage Window not found!', 0

.code
Begine:

    invoke FindWindow , addr szDestClass, NULL
   
    .if eax
        mov hWnd, eax
        invoke wsprintf, addr szBuffer, addr szStart, addr szText
        invoke MessageBox, NULL, offset szBuffer, \
            offset szCaption, MB_OK
        invoke SendMessage, hWnd, WM_SETTEXT, 0, addr szText
        invoke MessageBox, NULL, offset szReturn, offset szCaption, \
            MB_OK
    .else
        invoke MessageBox, NULL, offset szNotFound, offset szCaption, \
            MB_OK
    .endif
        invoke ExitProcess, NULL
   
    end Begine
2011-08-10 22:18
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:0 
win32汇编     那本
2011-08-10 22:18
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
没明白啥意思 罗大的例子程序有提示的。。
2011-08-10 22:49
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:0 
运行他 的 肯定是没有问题

但是 除掉通信的那块 这个程序也是可以

只是加上通信的后             invoke wsprintf, addr szBuffer, addr szReceive, lParam, lParam
 
没有起到写szBuffer
 
2011-08-10 23:10
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用诸葛修勤在2011-8-10 23:10:56的发言:

运行他 的 肯定是没有问题

但是 除掉通信的那块 这个程序也是可以

只是加上通信的后             invoke wsprintf, addr szBuffer, addr szReceive, lParam, lParam
 
没有起到写szBuffer
 
还是没明白。。
2011-08-11 12:05
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:0 
invoke wsprintf, addr szBuffer, addr szReceive, lParam, lParam

就是在接受的时候  处理消息WM_SETTEXT  上面那句没有写成功



szBuffer没有内容
2011-08-11 13:03
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
1 感冒头疼 理解能力低下。。

2 问这种问题 尽量描述详细 程序可以发附件嘛 可以上图嘛 总之 让人明白 甚至是让一个不懂的人都明白

3 看了你的问题还是没明白 后来把程序自己编译一下明白了。。

要是按你写的 没有提示。。 我挂调试器一看 压栈后 wsprintf 的format参数是个空字符串 那找这个format的定义 呵呵

        .data?
hInstance    dd        ?
hWinMain    dd        ?
szBuffer db 512 dup (?)
szReceive    db    'Receive WM_SETTEXT message',0dh,0ah
        db    'param: %08x',0dh,0ah
        db    'text: "%s"',0dh,0ah,0

这样。。 顺便说一句 不知道是我复制过来就变样了还是你程序就这样 对齐很差劲。。

诶 这里是写在.data?段里面的 但.data?里面的东西都是未初始化的 不知道为什么这里编译器不报错 但编译器更狠的让这个字符串为"" 当然是空的了

改法

.data?
hInstance       dd            ?
hWinMain        dd            ?
szBuffer        db            512 dup (?)
.data
szReceive       db 'Receive WM_SETTEXT message',0dh,0ah
                db 'param: %08x',0dh,0ah
                db 'text: "%s"',0dh,0ah,0

我知道为嘛乱了 我们论坛的替换是把Tab换位空格 而这样肯定没法对齐 和编辑器里的不一样 以后还是发文件的好
收到的鲜花
  • 诸葛修勤2011-08-11 18:07 送鲜花  10朵   附言:精彩~~~
2011-08-11 15:31
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:0 
这个  想给你加分  呵呵...   
2011-08-11 18:07
快速回复:窗口间消息互发__________ 成功 还是 失败 看不出来
数据加载中...
 
   



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

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