функция DialogBoxParam не отображает диалоговое окно описанное в файле ресурсов вопрос -почему и что с этим делать?
главное окно(скрыто) Код (Text): WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD LOCAL var :DWORD LOCAL caW :DWORD LOCAL caH :DWORD LOCAL Rct :RECT LOCAL buffer1[260]:BYTE ; these are two spare buffers LOCAL buffer2[260]:BYTE ; for text manipulation etc.. invoke DialogBoxParam,hInstance,offset szDisplayName,NULL,offset dlgproc,WM_INITDIALOG Switch uMsg Case WM_COMMAND Case WM_CREATE invoke DialogBoxParamA,hInstance,offset szDisplayName,NULL,offset dlgproc,WM_INITDIALOG Case WM_SYSCOLORCHANGE Case WM_SIZE Case WM_CLOSE Case WM_DESTROY invoke PostQuitMessage,NULL return 0 Endsw invoke DefWindowProc,hWin,uMsg,wParam,lParam ret WndProc endp Код (Text): dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD Switch uMsg Case WM_INITDIALOG invoke MessageBox,NULL,NULL,NULL,NULL Endsw ret dlgproc endp
Код (Text): dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD Switch uMsg Case WM_INITDIALOG invoke MessageBox,NULL,NULL,NULL,NULL Case WM_CLOSE invoke EndDialog,hWin,0 Endsw ret dlgproc endp
arrrg Что возвращает DialogBoxParam? Покажи как определена szDisplayName. Покажи кусок файла ресурсов, содержащий шаблон диалога.
диалог в ресурсе Код (Text): IDD_DLG1 DIALOGEX 6,6,528,353 STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX CAPTION "IDD_DLG" FONT 8,"MS Sans Serif",0,0,0 MENU connection EXSTYLE WS_EX_TOOLWINDOW BEGIN CONTROL "",IDC_LST1,"ListBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|LBS_NOINTEGRALHEIGHT|LBS_USETABSTOPS|LBS_HASSTRINGS|LBS_SORT|LBS_NOTIFY,0,0,529,353,WS_EX_CLIENTEDGE END переменная Код (Text): szDisplayName db "IDD_DLG1",0
arrrg Понятно. Забудь про szDisplayName , делай так Код (Text): IDD_DLG1 equ ... ... invoke DialogBoxParamA,hInstance,IDD_DLG1,NULL,offset dlgproc,WM_INITDIALOG
Если #define IDD_DLG1 для файла ресурсов такой же, то в DialogBoxParamA надо передавать число, а не адрес строки. Что возвращает DialogBoxParamA? ps пример в аттаче
IP_LISTER.asm Код (Text): ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« .486 ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include IP_LISTER.inc ; local includes for this file .code start: ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« ; ------------------ ; set global values ; ------------------ mov hInstance, rv(GetModuleHandle, NULL) mov CommandLine, rv(GetCommandLine) mov hIcon, rv(LoadIcon,hInstance,500) mov hCursor, rv(LoadCursor,NULL,IDC_ARROW) mov sWid, rv(GetSystemMetrics,SM_CXSCREEN) mov sHgt, rv(GetSystemMetrics,SM_CYSCREEN) call Main invoke ExitProcess,eax ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« Main proc LOCAL Wwd:DWORD,Wht:DWORD,Wtx:DWORD,Wty:DWORD STRING szClassName,"ProStart_Class" ; -------------------------------------------- ; register class name for CreateWindowEx call ; -------------------------------------------- invoke RegisterWinClass,ADDR WndProc,ADDR szClassName, hIcon,hCursor,COLOR_BTNFACE+1 mov Wwd, 300 mov Wht, 250 invoke TopXY,Wwd,sWid mov Wtx, eax invoke TopXY,Wht,sHgt mov Wty, eax invoke CreateWindowEx,WS_EX_LEFT, ADDR szClassName, ADDR szDisplayName, WS_OVERLAPPED or WS_SYSMENU, Wtx,Wty,Wwd,Wht, NULL,NULL, hInstance,NULL mov hWnd,eax ; --------------------------- ; macros for unchanging code ; --------------------------- DisplayWindow hWnd,SW_SHOWNORMAL call MsgLoop ret Main endp ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« RegisterWinClass proc lpWndProc:DWORD, lpClassName:DWORD, Icon:DWORD, Cursor:DWORD, bColor:DWORD LOCAL wc:WNDCLASSEX mov wc.cbSize, sizeof WNDCLASSEX mov wc.style, CS_BYTEALIGNCLIENT or \ CS_BYTEALIGNWINDOW m2m wc.lpfnWndProc, lpWndProc mov wc.cbClsExtra, NULL mov wc.cbWndExtra, NULL m2m wc.hInstance, hInstance m2m wc.hbrBackground, bColor mov wc.lpszMenuName, NULL m2m wc.lpszClassName, lpClassName m2m wc.hIcon, Icon m2m wc.hCursor, Cursor m2m wc.hIconSm, Icon invoke RegisterClassEx, ADDR wc ret RegisterWinClass endp ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« MsgLoop proc LOCAL msg:MSG push esi push edi xor edi, edi ; clear EDI lea esi, msg ; Structure address in ESI jmp jumpin StartLoop: invoke TranslateMessage, esi ; -------------------------------------- ; perform any required key processing here ; -------------------------------------- invoke DispatchMessage, esi jumpin: invoke GetMessage,esi,edi,edi,edi test eax, eax jnz StartLoop mov eax, msg.wParam pop edi pop esi ret MsgLoop endp ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD LOCAL var :DWORD LOCAL caW :DWORD LOCAL caH :DWORD LOCAL Rct :RECT LOCAL buffer1[260]:BYTE ; these are two spare buffers LOCAL buffer2[260]:BYTE ; for text manipulation etc.. invoke DialogBoxParam,hInstance,offset szDisplayName,NULL,offset dlgproc,WM_INITDIALOG Switch uMsg Case WM_COMMAND Case WM_CREATE invoke MessageBox,NULL,NULL,NULL,NULL invoke DialogBoxParamA,hInstance,IDD_DLG1,NULL,offset dlgproc,WM_INITDIALOG Case WM_SYSCOLORCHANGE Case WM_SIZE Case WM_CLOSE Case WM_DESTROY invoke PostQuitMessage,NULL return 0 Endsw invoke DefWindowProc,hWin,uMsg,wParam,lParam ret WndProc endp dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD Switch uMsg invoke MessageBox,NULL,NULL,NULL,NULL Case WM_INITDIALOG invoke MessageBox,NULL,NULL,NULL,NULL Case WM_CLOSE invoke EndDialog,hWin,0 Endsw ret dlgproc endp ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« OPTION PROLOGUE:NONE OPTION EPILOGUE:NONE TopXY proc wDim:DWORD, sDim:DWORD mov eax, [esp+8] sub eax, [esp+4] shr eax, 1 ret 8 TopXY endp OPTION PROLOGUE:PrologueDef OPTION EPILOGUE:EpilogueDef ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« end start IP_LISTER.inc Код (Text): ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ; include files ; ~~~~~~~~~~~~~ include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\Comctl32.inc include \masm32\include\comdlg32.inc include \masm32\include\shell32.inc include \masm32\include\oleaut32.inc include \masm32\include\msvcrt.inc include \masm32\macros\macros.asm ; libraries ; ~~~~~~~~~ includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\Comctl32.lib includelib \masm32\lib\comdlg32.lib includelib \masm32\lib\shell32.lib includelib \masm32\lib\oleaut32.lib includelib \masm32\lib\msvcrt.lib ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ;================= ; Local prototypes ;================= WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD TopXY PROTO :DWORD,:DWORD Paint_Proc PROTO :DWORD RegisterWinClass PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD MsgLoop PROTO Main PROTO dlgproc PROTO :DWORD,:DWORD,:DWORD,:DWORD AutoScale MACRO swidth, sheight invoke GetPercent,sWid,swidth mov Wwd, eax invoke GetPercent,sHgt,sheight mov Wht, eax invoke TopXY,Wwd,sWid mov Wtx, eax invoke TopXY,Wht,sHgt mov Wty, eax ENDM DisplayMenu MACRO handl, IDnum invoke LoadMenu,hInstance,IDnum invoke SetMenu,handl,eax ENDM DisplayWindow MACRO handl, ShowStyle invoke ShowWindow,handl, ShowStyle invoke UpdateWindow,handl ENDM .data szDisplayName db "IDD_DLG1",0 title db "IP LISTER",0 IDD_DLG1 equ 1000 .data? hInstance dd ? CommandLine dd ? hIcon dd ? hCursor dd ? sWid dd ? sHgt dd ? hWnd dd ? ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ Inserted modules ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ rsrc.rc Код (Text): #include "resource.h" #define IDD_DLG1 1000 #define IDC_LST1 1001 #define connection 10000 #define IDM_1 10001 #define IDM_2 10002 #define IDM_3 10003 IDD_DLG1 DIALOGEX 6,6,528,353 STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX CAPTION "IDD_DLG" FONT 8,"MS Sans Serif",0,0,0 MENU connection EXSTYLE WS_EX_TOOLWINDOW BEGIN CONTROL "",IDC_LST1,"ListBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|LBS_NOINTEGRALHEIGHT|LBS_USETABSTOPS|LBS_HASSTRINGS|LBS_SORT|LBS_NOTIFY,0,0,529,353,WS_EX_CLIENTEDGE END подключение MENU BEGIN MENUITEM "выход",IDM_1,HELP MENUITEM "подключится",IDM_2 MENUITEM "отключится",IDM_3,GRAYED END
arrrg 1) в диалоговую процедуру перд ret добавь xor eax,eax; 2) убери из кода _все_ invoke MessageBox,NULL,NULL,NULL,NULL (для отладки используй OutputDebugString & DbgView by Sysinternal); 3) в файле ресурсов имя меню измени с подключение на connection.
спасибо за твоё терпение к моим глупым ошибкам) получилось!наконецто диалог отображается, большое спасибо
вот только осталась ещё одна беда - попробовал добавить в LISTVIEW 3 колонки: Код (Text): Case WM_INITDIALOG mov column2.imask,LVCF_FMT+LVCF_TEXT+LVCF_WIDTH mov column2.fmt,LVCFMT_LEFT mov column2.pszText,offset Heading2 mov column2.lx,150 invoke SendMessage,ListBoxhwnd,LVM_INSERTCOLUMN,0,addr column2 mov column3.imask,LVCF_FMT+LVCF_TEXT+LVCF_WIDTH mov column3.fmt,LVCFMT_LEFT mov column3.pszText,offset Heading3 mov column3.lx,149 invoke SendMessage,ListBoxhwnd,LVM_INSERTCOLUMN,0,addr column3 mov column1.imask,LVCF_FMT+LVCF_TEXT+LVCF_WIDTH mov column1.fmt,LVCFMT_LEFT mov column1.pszText,offset Heading1 mov column1.lx,249 invoke SendMessage,ListBoxhwnd,LVM_INSERTCOLUMN,0,addr column1 Код (Text): column1 LV_COLUMN <> column2 LV_COLUMN <> column3 LV_COLUMN <> ListBoxhwnd equ 1001 Heading1 db "имя",0 Heading2 db "тип",0 Heading3 db "размер",0