Весь день сегодня пытался написать простейшую программу использующую диалоговое окно как основное... ничего не получилось, окно упорно не хочет появлятся, делал в RadASMe с использованием его редактора ресурсов, вроде все как у Icseliona, а не работает, подскажите что ни так и как это запустить? Код (Text): .386 .model flat,stdcall option casemap:none DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD 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 .data DlgName db "IDD_DLG1",0 DlgExit db "Выход!",0 .data? hInstance HINSTANCE ? CommandLine LPSTR ? buffer db 512 dup(?) .const IDD_DLG1 equ 1000 IDC_STC1 equ 1001 IDC_STC2 equ 1002 IDC_EDT1 equ 1003 IDC_EDT2 equ 1004 IDC_STC3 equ 1005 IDC_EDT3 equ 1006 IDC_STC4 equ 1007 IDC_EDT4 equ 1008 IDM_GETTEXT equ 32000 IDM_CLEAR equ 32001 IDM_EXIT equ 32002 .code start: invoke GetModuleHandle, NULL mov hInstance,eax invoke DialogBoxParam, hInstance, addr DlgName,NULL,addr DlgProc,NULL invoke MessageBox, NULL, addr DlgExit, addr DlgExit, MB_OK invoke ExitProcess,eax DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM invoke MessageBox, NULL, addr DlgName, addr DlgName, MB_OK .IF uMsg==WM_INITDIALOG invoke MessageBox, NULL, addr DlgName, addr DlgName, MB_OK .ENDIF mov eax,TRUE ret DlgProc endp end start ////////////////////////////////////////////////////////////////////////////////////// #define IDD_DLG1 1000 #define IDC_STC1 1001 #define IDC_STC2 1002 #define IDC_EDT1 1003 #define IDC_EDT2 1004 #define IDC_STC3 1005 #define IDC_EDT3 1006 #define IDC_STC4 1007 #define IDC_EDT4 1008 IDD_DLG1 DIALOGEX 6,6,243,176 CAPTION "Стенд контроля" FONT 8,"MS Sans Serif",400,0 STYLE 0x10CF0000 EXSTYLE 0x00000000 BEGIN CONTROL "заданное значение кода угда",IDC_STC1,"Static",0x50000000,10,11,104,9,0x00000000 CONTROL "полученное значение кода угда",IDC_STC2,"Static",0x50000000,8,46,110,9,0x00000000 CONTROL "",IDC_EDT1,"Edit",0x50010000,8,22,178,13,0x00000200 CONTROL "",IDC_EDT2,"Edit",0x50010000,8,57,178,13,0x00000200 CONTROL "ошибка",IDC_STC3,"Static",0x50000000,8,81,30,9,0x00000000 CONTROL "",IDC_EDT3,"Edit",0x50010000,8,90,176,13,0x00000200 CONTROL "состояние стенда",IDC_STC4,"Static",0x50000000,8,114,64,13,0x00000000 CONTROL "",IDC_EDT4,"Edit",0x50010000,8,125,112,37,0x00000200 END Да, еще, пошарился в RadASMe, там в меню Проект есть пункты Ресурсы и Таблица строк, помнится в С++ я как то писал и там похожую табичку использовал, а здесь она зачем? вопрос дибильный, но вдруг это ключ ко всему?
invoke InitCommonControls invoke DialogBoxParam, hInstance, IDD_DLG1,NULL,addr DlgProc,NULL в принципе все
Если в процедуре диалога сообщение не обрабатывается надо вернуть FALSE. В твоём случае не производится никаких действий по умолчанию, например показывание диалога и установление фокуса и т.п. Код (Text): DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM invoke MessageBox, NULL, addr DlgName, addr DlgName, MB_OK .IF uMsg==WM_INITDIALOG invoke MessageBox, NULL, addr DlgName, addr DlgName, MB_OK jmp ret_true .ENDIF mov eax,FALSE ret ret_true: mov eax,TRUE ret DlgProc endp
Попробовал и первое и второе и третье, в первых двух случаях пишет ошибки, в третьем окно не выводится... подскажите что за функции такие: invoke InitCommonControls и invoke DlgProc? и с какими аргументами их вызывать? Э...извеняюсь, был не внимателен, мало мальски заработало, теперь окно отображается, вернее прямоугольник в котором оно должно быть и прога виснет, но с этим я разберусь, так вот, что же такое invoke InitCommonControls и invoke DlgProc? и с какими параметрами их передавать, сам RadASM ничего о параметрах не знает, а компилятор выдает ошибки, так что запускал без них...???
Запусти RadAsm, выбери "новый проект", выбери МАСМ (в сомбобохе), отметь рдиобуттон Win32 App, затем DlgAsMain.tpl (в листбохе), и сравни. З.Ы. Если нет масм в сомбобохе поменяй строки [Assembler] Assembler=html на строки [Assembler] Assembler=masm,fasm,tasm,nasm,hla,GoAsm,html
Алексей >подскажите что за функции такие: invoke InitCommonControls и >invoke DlgProc? и с какими аргументами их вызывать? Да не invoke DlgProc, а ваша же DlgProc, посмотрите же свой код. Говорите - читали Iczelion-а, так перечитайте еще раз. Хотя ведь AsmGuru62 уже все это вам показал...
Почитаю еще раз... Ура! kero, ты прав! Все получилось, что то у меня совсем ум за разум заезжать стал... Всем БОЛЬШОЕ пасибо!