首页
社区
课程
招聘
[旧帖] [求助]一个看似简单却恼人的问题 0.00雪花
发表于: 2009-4-7 20:17 4567

[旧帖] [求助]一个看似简单却恼人的问题 0.00雪花

2009-4-7 20:17
4567
例子看了不少,一直觉得写GUI不难,无非就是消息的处理,今天写了个最简单的测试却发现许多问题(见最后):
---------------------------------dialog.asm---------------------------------------------------------               
                    .386
                    .model flat,stdcall
                    option casemap:none
;*********************************************************************
include             \masm32\include\windows.inc
include             \masm32\include\user32.inc
include             \masm32\include\kernel32.inc
includelib          \masm32\lib\user32.lib
includelib          \masm32\lib\kernel32.lib
;*********************************************************************
IDD_DIALOG1         equ         101
IDC_STATIC1         equ         1004
;*********************************************************************
                    .data
szMsg           db  'Now it changed',0
                    .data?
hInstance     dd  ?                    
;*********************************************************************
                    .code
_ProDlgMain         proc    hWnd,uMsg,wParam,lParam

                    mov     eax,uMsg
                    .if     eax == WM_COMMAND
                            mov     eax,wParam
                            .if     ax == IDOK
                                    invoke     GetDlgItem,hWnd,IDC_STATIC1
                                    invoke     SendMessage,eax,WM_SETTEXT,NULL,offset szMsg
                            .elseif ax == IDCANCEL
                                    invoke      EndDialog,hWnd,NULL
                            .endif
                    .elseif eax == WM_CLOSE
                            invoke  EndDialog,hWnd,NULL
                    .elseif eax == WM_INITDIALOG
                            invoke  GetDlgItem,hWnd,IDOK
                            invoke  SetFocus,eax        
                    .endif
                    mov     eax,TRUE
                    ret
_ProDlgMain         endp                                                
                                       
start:
                    invoke      GetModuleHandle,NULL
                    mov         hInstance,eax                    
                    invoke      DialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset _ProDlgMain,NULL
                    invoke      ExitProcess,NULL

                    end         start
-----------------------------------------------dialog.rc----------------------------------------------
// Dialog
//

IDD_DIALOG1 DIALOGEX 200, 200, 188, 109
STYLE DS_SYSMODAL | DS_SETFOREGROUND | DS_3DLOOK | DS_CONTROL |
    WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE | WS_CLIPSIBLINGS |
    WS_CLIPCHILDREN | WS_CAPTION | WS_VSCROLL | WS_HSCROLL | WS_SYSMENU |
    WS_THICKFRAME
EXSTYLE WS_EX_ACCEPTFILES
CAPTION "Dialog"
FONT 9, "宋体"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,59,72,26,14
    PUSHBUTTON      "Cancel",IDCANCEL,102,72,27,14
    GROUPBOX        "Group",IDC_STATIC,5,7,171,53,BS_CENTER
    LTEXT           "This for test!",IDC_STATIC1,63,31,61,13
END
***************************************************************
上面的代码编译执行后,发现以下问题:
1.CPU占用率奇高(一直50%左右)
2.显示的对话框是透明的,看不到标题栏,最大化最小化等按钮,也不能移动和调整窗体的大小等(只能看到两个BUTTON)
说明:资源文件使用VC++6.0可视化工具编辑的,以上部分是偶将其中的主要部分摘过来的。
*****************望高人指点一二,小弟不胜感激,这个问题困扰小弟太久了******

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 148
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好强的代码.
膜拜一下.
2009-4-7 20:18
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
3
建议看下罗云彬大哥的Windows.环境下32位汇编语言程序设计先
2009-4-7 20:32
0
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
以上代码与罗云彬写的例子代码,格式是一样的,现在查了汇编权威Iczelion的教程,他的结构也和上一样,不知那位仁兄可以指教羊毛出在哪。。。?
2009-4-7 20:36
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
_ProDlgMain         proc    hWnd,uMsg,wParam,lParam

                    mov     eax,uMsg
                    .if     eax == WM_COMMAND
                            mov     eax,wParam
                            .if     ax == IDOK
                                    invoke     GetDlgItem,hWnd,IDC_STATIC1
                                    invoke     SendMessage,eax,WM_SETTEXT,NULL,offset szMsg
                            .elseif ax == IDCANCEL
                                    invoke      EndDialog,hWnd,NULL
                            .endif
                    .elseif eax == WM_CLOSE
                            invoke  EndDialog,hWnd,NULL
                    .elseif eax == WM_INITDIALOG
                            invoke  GetDlgItem,hWnd,IDOK
                            invoke  SetFocus,eax
; 少了下面三句。
                    .else
                            xor eax,eax
                            ret

                    .endif
                    mov     eax,TRUE
                    ret
_ProDlgMain         endp
2009-4-7 20:49
0
雪    币: 350
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
如果是其他消息,没有默认消息处理,返回不了.CPU就半死了.
2009-4-7 21:10
0
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
非常感谢楼上的回答,但又有个问题想知道为什么:在资源编辑其中看到的结果与实际跑出来的图形结果怎出入很大(譬如在编辑器中有最大化最小化等按扭,但跑出来却没有,甚至连标题烂也没有,但就见到一个客户区)????
2009-4-7 21:10
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
8
在VC资源编辑器上双击要编辑的资源等控件,就可以打开控件属性对话框,在这个控件属性对话框中就可以对窗口等控件设置各种样式属性了。
2009-4-7 21:21
0
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我知道可以这样改,但问题是在VC编辑器中看到的结果与实际跑出来的结果有出入,如在VC编辑器中有最大化等按钮,但一跑出来就没有;在编辑器中的STATIC是灰色的,但跑出来却是透明的为桌面图像。。。。
2009-4-7 21:28
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
10
是不是少了 #include "resource.h"  还有#define定义 用vc编辑的时候这些不要删除了
2009-4-7 21:43
0
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
没有哇,我没改动源文件(在VC里面是单独弄个resource.h文件出来的),上面的只是我从原文件中摘出来的主要部分。。。。
2009-4-7 21:51
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
12
我没有出现过你这样的情况,所以不太清楚。
2009-4-7 21:56
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
13
你把完整资源文件贴上来 我看下
2009-4-7 21:57
0
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
***********************.rc************************************
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_DIALOG1 DIALOG DISCARDABLE  200, 200, 188, 119
STYLE DS_ABSALIGN | DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX |
    WS_MAXIMIZEBOX | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
    WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "test"
FONT 9, "宋体"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,59,72,26,14
    PUSHBUTTON      "Cancel",IDCANCEL,102,72,27,14
    GROUPBOX        "Group",IDC_STATIC,5,7,171,53,BS_CENTER | BS_FLAT
    LTEXT           "This for test!",IDC_STATIC1,63,31,61,13
END

/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
    IDD_DIALOG1, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 181
        TOPMARGIN, 7
        BOTTOMMARGIN, 112
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

*********************resource.h**********************************
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by rscrc.rc
//
#define IDD_DIALOG1                     101
#define IDC_STATIC1                     1004

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1006
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif
*************************************************************
以上均为使用VC编辑器自动生成的结果,在VC中有“最大化最小化等按钮”,但跑出来的结果却没有,并且在Static区域是透明的。。。。。
2009-4-7 22:03
0
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
透明的部分搞好了,原来还要加上继承项才能编程不透明,其他的问题应该也是选项没弄好;
但是为什么在VC中预览有?还是不明白。。。。
2009-4-7 22:08
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
16
资源改成这样就好了,请注意变化:
#include "resource.h"

#define IDD_DIALOG1                     101
#define IDC_STATIC1                     1004

IDD_DIALOG1 DIALOG DISCARDABLE  200, 200, 188, 119
STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX
CAPTION "test"
FONT 9, "宋体"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,59,72,26,14
    PUSHBUTTON      "Cancel",IDCANCEL,102,72,27,14
    GROUPBOX        "Group",IDC_STATIC,5,7,171,53,BS_CENTER | BS_FLAT
    LTEXT           "This for test!",IDC_STATIC1,63,31,61,13
END
2009-4-7 22:15
0
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
如果是直接改VC生成的.RC文件,问题依旧,若是把那部分拷出来单独冲做个.RC文件就没问题了。能否解释下这是为什么么。。。?
2009-4-7 22:39
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
18
是你STYLE设置有问题,至于其他的定义win32 asm不需要了
2009-4-7 22:51
0
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
但在VC中预览的结果是符合的。。。跑出来就不一样,不知道为什么存在这样的差别。。。。
2009-4-7 22:57
0
游客
登录 | 注册 方可回帖
返回
//