当前位置: 代码迷 >> 汇编语言 >> 初学者有关问题,Win32对话框中使用菜单后无法显示窗口
  详细解决方案

初学者有关问题,Win32对话框中使用菜单后无法显示窗口

热度:924   发布时间:2013-02-26 00:00:00.0
菜鸟问题,Win32对话框中使用菜单后无法显示窗口
00401125 E8 0E000000 call <jmp.&user32.DialogBoxParamA> ; \DialogBoxParamA
 0040112A 6A 00 push 0 ;下断点处
 0040112C E8 25000000 call <jmp.&kernel32.ExitProcess> ; \ExitProcess
 00401131 C3 retn
 


;DialogBoxParam调用后马上返回,不知道怎么回事(也就是说对话框还没有创建就结束了),如果在对话框资源定义中去掉MENU IDM_MAIN  
 就可以显示,但是没有菜单啊,平时其他的对话框程序我就是用这种方法来创建菜单的,现在这个程序不知道怎么  
回事,我用了2个小时去调试也找不到错误原因。
 
源码: 直接可以编译连接
 

.386
 .model flat,stdcall
 option casemap:none
 
include windows.inc
 include user32.inc
 include kernel32.inc
 include comdlg32.inc
 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DLL导入库
 includelib user32.lib
 includelib kernel32.lib
 includelib comdlg32.lib
 
include comctl32.inc
 includelib comctl32.lib
 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>资源文件等值定义
 IDD_DLG_MAIN equ 0001h
 IDM_MAIN equ 2000h
 IDC_STATUS equ 0002h
 IDC_EDT1 equ 0003h
 IDM_OPEN equ 1101h
 IDM_SAVEAS equ 1102h
 IDM_PAGESETUP equ 1103h
 IDM_EXIT equ 1104h
 IDM_FIND equ 1201h
 IDM_REPLACE equ 1202h
 IDM_SELFONT equ 1203h
 IDM_SELCOLOR equ 1204h
 IDM_MENUHELP equ 1300h
 


.data
 hInstance dword ?
 hWinMain dword ?
 hWinStatus dword ?
 hWinEdit dword ?
 dwStatusWidth dword 60,140,172,-1
 szFormat1 byte "%02d:%02d:%02d",0 ;时间格式化输出
 szFormat2 byte "字节数: %d",0  
 szStr1 byte "插入",0
 szStr2 byte "改写",0
 dwMenuHelp dword 0,IDM_MENUHELP,0,0
 
.code
 

;**********************************************************************
 ;对话框窗口过程
 ;**********************************************************************
 ProcDlgMain proc uses ebx esi edi hWnd,uMsg,wParam,lParam
  LOCAL @szBuffer[256]:byte 
  LOCAL @stPos:POINT
  LOCAL @stST:SYSTEMTIME
   
  mov eax,uMsg
  .if eax == WM_CLOSE
  invoke EndDialog,hWnd,NULL
 
  .elseif eax == WM_INITDIALOG
  mov eax,hWnd
  mov hWinMain,eax
   
  invoke GetDlgItem,hWnd,IDC_STATUS
  mov hWinStatus,eax
  invoke GetDlgItem,hWnd,IDC_EDT1
  mov hWinEdit,eax
  invoke SendMessage,hWinStatus,SB_SETPARTS,4,offset dwStatusWidth
  invoke SendMessage,hWinStatus,SB_SETTEXT,2,offset szStr1
 ; invoke ShowWindow,hWinMain,SW_SHOW
 ; call _Resize 
  invoke SetTimer,hWnd,1,300,NULL
  相关解决方案