当前位置: 代码迷 >> 汇编语言 >> WIN32汇编,不知道哪里出了有关问题了
  详细解决方案

WIN32汇编,不知道哪里出了有关问题了

热度:223   发布时间:2016-05-02 04:44:42.0
WIN32汇编,不知道哪里出了问题了
自己动手写个简单的对话框,RC和ASM都是自己写的,主要是根据书中的例子,自己看过之后,尝试动手加深记忆!
但是生成的exe文件:1.无法关闭 2.显示出来的对话框奇形怪状。
自己看了半天了,改了好几处地方,也不知道怎么回事!索性恢复到原来的样子,期盼大家给我点指导!
RC
#include				<resource.h>

#define ICO_MAIN 0x0001
#define DLG_MAIN 1
#define IDB_1 2
#define IDB_2 3
#define IDC_PIC 100
#define IDC_PERINFO 101
#define IDC_PERNAME 102
#define IDC_PERSEXL 103
#define IDC_PERADDR 104
#define IDC_PERCOMINFO 201
#define IDC_OWN 202
#define IDC_NOTOWN 203
#define IDC_CHANBIT 301
#define IDC_CANCEL 300

ICO_MAIN ICON "Main.ico"
IDB_1 BITMAP "1.bmp"
IDB_2 BITMAP "2.bmp"

DLG_MAIN DIALOG 55,55,400,300
STYLE DS_MODALFRAME|WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME
CAPTION "个人信息"
FONT 9,"宋体"
{
GROUPBOX "照片",-1,5,20,100,60
GROUPBOX "个人资料",IDC_PERINFO,125,20,200,60
//LTEXT "姓名:",-1,135,22,15,20
//EDITTEXT IDC_PERNAME,155,22,100,20
//LTEXT "性别:",-1,135,45,15,20
//EDITTEXT IDC_PERSEXL,155,45,100,20
//LTEXT "住址:",-1,135,68,15,20
//EDITTEXT IDC_PERADDR,155,68,100,20
//LTEXT "是否有万达的VIP卡",-1,135,95,100,20,WS_BORDER
AUTORADIOBUTTON "是",IDC_OWN,215,100,15,15,
AUTORADIOBUTTON "否",IDC_NOTOWN,225,100,15,15
}

ASM
				.386
.model flat,stdcall
option casemap:none

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

ICO_MAIN equ 0001h
DLG_MAIN equ 1
IDB_1 equ 2
IDB_2 equ 3
IDC_PIC equ 100
IDC_PERINFO equ 101
IDC_PERNAME equ 102
IDC_PERSEXL equ 103
IDC_PERADDR equ 104
IDC_PERCOMINFO equ 201
IDC_OWN equ 202
IDC_NOTOWN equ 203
IDC_CHANBIT equ 301
IDC_CANCEL equ 300

.data?
hInstance dd ?

.code
_DlgProcMain proc uses ebx esi edi hWnd,uMsg,wParam,lParam
mov eax,uMsg
.if eax==WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax==WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.else
mov eax,TRUE
.endif
ret
_DlgProcMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _DlgProcMain,NULL
invoke ExitProcess,NULL
end start

------解决方案--------------------
你好像是把 DlgProc() 里的返回值给搞反了。按照 DialogBoxParam() 的说明,自己处理了的要返回 1,没处理的返回 0;WM_INITDIALOG 另外说。
  相关解决方案