Требуется организовать ввод в программу некоторого числа, я думаю сделать это с помошью АПИ или с++ функции, раз можно сделать так INVOKE MessageBox,0,ADDR ourmessage,ADDR ourtitle,MB_OK, то и должно быть что-то для inputbox, пишу для МАСМ32
не ну желательно, чтобы там была строка для ввода (Edit или TextBox в разных языках по разному) и кнопочка для подтверждения ответа
http://msdn.microsoft.com/library/rus/defa...fctinputbox.asp ищу что-то в этом роде, но для того чтобы можно было подключить вот так INVOKE MessageBox,0,ADDR ourmessage,ADDR ourtitle,MB_OK
... .code start: MyDlgProc proc hWinWORD,uMsgWORD,wParamWORD,lParamWORD .if uMsg == WM_INITDIALOG .elseif uMsg == WM_CLOSE quit_dialog: invoke EndDialog,hWin,0 .endif xor eax, eax ret MyDlgProc endp ... достал из справки вот это, компилит, но при запуске ничего не происходит, даже массаги потом не появляются
Это что, твоя программа стартует прямо с DlgProc? Круто! В файле .rc должен быть диалог типа такого: Код (Text): #define IDD_MAIN 101 #define IDC_EDT1 1001 #define IDC_STC1 1002 IDD_MAIN DIALOGEX 5,5,218,39 CAPTION "DialogApp" FONT 8,"Tahoma",0,0 STYLE 0x10CE0800 EXSTYLE 0x00000000 BEGIN CONTROL "OK",1,"Button",0x50010000,162,17,52,14,0x00000000 CONTROL "Cancel",2,"Button",0x50010000,78,84,41,12,0x00000000 CONTROL "",IDC_EDT1,"Edit",0x50010000,3,17,136,14,0x00000200 CONTROL "Input you data:",IDC_STC1,"Static",0x50000000,5,3,132,10,0x00000000 END Это код: Код (Text): .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke InitCommonControls invoke DialogBoxParam,hInstance,IDD_MAIN,NULL,addr DlgProc,NULL invoke ExitProcess,0 ;##################################################################### ### DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM mov eax,uMsg .if eax==WM_INITDIALOG ;initialization here .elseif eax==WM_COMMAND mov edx,wParam movzx eax,dx shr edx,16 .if edx==BN_CLICKED .if eax==IDOK invoke SendMessage,hWin,WM_CLOSE,NULL,NULL .endif .endif .elseif eax==WM_CLOSE invoke EndDialog,hWin,0 .else mov eax,FALSE ret .endif mov eax,TRUE ret DlgProc endp end start
.ELSEIF ax==IDM_GETTEXT invoke GetWindowText,hwndEdit,ADDR buffer,512 ; ... invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK .ELSE Я так понимаю вот в это место мне и нужно встраивать код, подскажите как ADDR buffer перевести в число и записать в переменную N например
Прочухал про такие функции atodw и dwtoa, какую библиотеку нужно подключить и как их использовать, например может быть что-то в этом роде?: mov eax,dwtoa(ADDR buffer) а может?: dwtoa eax,ADDR buffer
Когда нужно получить данные от юзера, вызываешь invoke DialogBoxParam,hInstance,IDD_MAIN,NULL,addr DlgProc,NULL появится диалог из ресурса, в котором юзер заполнит текстовое поле, и нажмёт ОК. При этом в диалоговой процедуре по сообщению WM_CLOSE вставь код получения текста из едита, и сохранение его в глобальный буфер. Диалог выгрузится, а текст останется. После этого можешь взять любую ф-цию, преобразующую строку в число, и получить при её помощи из сохраненного текста нужное тебе значение. Фсё! Если не получится - вперед, читать Iczelion.
Открой справку по масму, там есть как вызывать dwtoa. Также можешь посмотреть в \masm32\include\ файл dwtoa.asm, в нем можно сориентироваться, что и как вызвать. P.S. Если не видел пост перед этим, вернись на предыдущую страницу
... buffer db 512 dup(?) ... ... ... invoke GetWindowText,hwndEdit,ADDR buffer,512 invoke atodw,ADDR buffer ; ... invoke dwtoa,ADDR buffer invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK он говорит что не знает таких функции, какие файлы нужно подключить? кстате dwtoa.asm лежит в M32LIB
кто говорит? компилятор, линкер ? dwtoa находится в masm32.lib GetWindowText MessageBox посмотри в msdn описание, там есть, в какой библиотеке они находятся.
Подключил, не помогло, я пользуюсь QEditor-ом, по этому не знаю на какой стадии, просто говорит undefined simbol dwtoa. В МСДН не нашел
Все разобрался сам, всем спасибо! Помогите теперь с циклом FOR так и не понял по справке что к чему, лучше пример с описанием, и сразу спрашу: надеюсь для него ничего подключать не надо?