无星之夜 发表于 2012-8-31 17:00:08

WIN32的一个问题

在学资源这一章的时候在程序我我取得了系统的窗口句柄,并添加了两个菜单项,这两个 菜单项我把他们呢的性质定义为:MF_CHECKED,出现了小钩,我想通过窗口过程对这两个菜单项进行操作(就是打钩和取消打钩),但是始终不能成功啊~
1L是添加窗口项的代码,2L是实现操作的代码:
.if eax == WM_CREATE
                invoke GetSubMenu,hMenu,1
        mov hSubMenu,eax
        invoke        GetSystemMenu,hWnd,FALSE
        mov @hSysMenu,eax
        invoke AppendMenu,@hSysMenu,MF_SEPARATOR,0,NULL                                        ;函数功能是添加一个系统菜单定义
        invoke AppendMenu,@hSysMenu,MF_CHECKED,IDM_HELP,offset szMenuHelp
        invoke AppendMenu,@hSysMenu,MF_CHECKED,IDM_ABOUT,offset szMenuAbout


无星之夜 发表于 2012-8-31 17:01:55

.elseif eax == WM_SYSCOMMAND       
        mov         eax,wParam
        movzx         eax,ax
        .if eax == IDM_HELP || eax == IDM_ABOUT
                mov ebx,eax
                invoke GetMenuState,@hSysMenu,ebx,MF_BYCOMMAND
                .if eax ==MF_CHECKED
                        mov eax,MF_UNCHECKED
                .else
                        mov eax,MF_CHECKED
                .endif
                invoke CheckMenuItem,@hSysMenu,ebx,eax
;                invoke _DisplayMenuItem,wParam
        .else
                invokeDefWindowProc,hWnd,uMsg,wParam,lParam
                ret

无星之夜 发表于 2012-8-31 17:02:50

其中参数sysmenu就是取得的系统窗口句柄

无星之夜 发表于 2012-9-1 21:04:21

!!!!怎么没人啊

肥马时代 发表于 2012-9-3 10:52:48

还没学到,呵呵

小王子之歌 发表于 2012-9-3 17:28:20

把局部变量@hSysMenu换成全局变量hSysMenu试试看吧...如果你觉得其他没啥问题,这个可能就是唯一的问题了...

无星之夜 发表于 2012-9-3 18:00:19

小王子之歌 发表于 2012-9-3 17:28 static/image/common/back.gif
把局部变量@hSysMenu换成全局变量hSysMenu试试看吧...如果你觉得其他没啥问题,这个可能就是唯一的问题了...

这有什么问题啊~?

小王子之歌 发表于 2012-9-3 18:26:11

无星之夜 发表于 2012-9-3 18:00 static/image/common/back.gif
这有什么问题啊~?

很简单,因为窗口过程的局部变量每时每刻都被初始化为随机值,每时每刻都在变化着,别试图通过一个窗口消息保存一个临时变量,然后用到另外一个窗口消息中...当然仅在一个窗口消息使用的话,建议用局部变量...

无星之夜 发表于 2012-9-3 19:53:10

小王子之歌 发表于 2012-9-3 18:26 static/image/common/back.gif
很简单,因为窗口过程的局部变量每时每刻都被初始化为随机值,每时每刻都在变化着,别试图通过一个窗口消息保 ...

可这玩意儿我只在窗口过程中调用过啊`~

无星之夜 发表于 2012-9-5 09:21:33

!!!!!!!!!!!!!!!!!!!!!人呢??????????、
页: [1]
查看完整版本: WIN32的一个问题