首先用RadASM新建一個Win32exe程序,該程序僅是一個窗口。
.data段添加
? ?slEdit db "EDIT",0
? ?adrpoem db "七月七日長生殿,夜半無人私語時。",0
? ?adrnxz db "C:\南鄉(xiāng)子.txt",0
.data?段添加
? ?hEdit1 dd ?
? ?hEdit2 dd ??
把RadASM附帶的三個proc加入項目;
EditSl
Read_File_In
ofCallBack
看這三個過程的代碼,其作用應該大體是:創(chuàng)建編輯框;讀文件到編輯框;
在WM_CREATE消息處理中調(diào)用,
invoke EditSl,ADDR adrpoem,50,10,350,25,hWnd,700
invoke EditSl,NULL,50,50,350,175,hWnd,700
mov hEdit2,eax
invoke Read_File_In,hEdit2,addr adrnxz
創(chuàng)建文本框,再創(chuàng)建一個文本框,然后讀入C盤一個文本文件到第二個編輯框;
構建,運行;
讀入文件到編輯框沒有成功;
在RadASM菜單中選擇 在調(diào)試器中運行,看下情況;
也看不出啥,給的文件名是正確的;
那么這兩個過程是干嘛的;Read_File_In和ofCallBack;前者調(diào)用的后者;下次再搞;
全部代碼如下;
.586
.model flat,stdcall
option casemap:noneinclude windows.incinclude user32.incinclude kernel32.incincludelib user32.libincludelib kernel32.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORD.dataClassName db "MainWinClass",0AppName db "Main Window",0slEdit db "EDIT",0adrpoem db "七月七日長生殿,夜半無人私語時。",0adrnxz db "C:\南鄉(xiāng)子.txt",0.data?hInstance HINSTANCE ?hEdit1 dd ?hEdit2 dd ? CommandLine LPSTR ?.code; ---------------------------------------------------------------------------EditSl proc szMsg:DWORD,a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,hParent:DWORD,ID:DWORD; EditSl PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
; invoke EditSl,ADDR adrTxt,200,10,150,25,hWnd,700invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR slEdit,szMsg,WS_VISIBLE or WS_CHILDWINDOW or \ES_AUTOHSCROLL or ES_NOHIDESEL,a,b,wd,ht,hParent,ID,hInstance,NULLretEditSl endpRead_File_In proc hEdit:DWORD,lpszFileName:DWORDLOCAL hFile :DWORDLOCAL ofs :OFSTRUCTLOCAL est :EDITSTREAMinvoke OpenFile,lpszFileName,ADDR ofs,OF_READmov hFile, eaxmov est.dwCookie, eaxmov est.dwError, 0mov eax, offset ofCallBackmov est.pfnCallback, eaxinvoke SendMessage,hEdit,EM_STREAMIN,SF_TEXT,ADDR estinvoke CloseHandle,hFileinvoke SendMessage,hEdit,EM_SETMODIFY,0,0mov eax, 0retRead_File_In endpofCallBack proc dwCookie:DWORD,pbBuff:DWORD,cb:DWORD,pcb:DWORDinvoke ReadFile,dwCookie,pbBuff,cb,pcb,NULLmov eax, 0retofCallBack endpstart:invoke GetModuleHandle, NULLmov hInstance,eaxinvoke GetCommandLinemov CommandLine,eaxinvoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULTinvoke ExitProcess,eaxWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov wc.cbSize,SIZEOF WNDCLASSEXmov wc.style, CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc, OFFSET WndProcmov wc.cbClsExtra,NULLmov wc.cbWndExtra,NULLpush hInstancepop wc.hInstancemov wc.hbrBackground,COLOR_BTNFACE+1mov wc.lpszMenuName,NULLmov wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov wc.hIcon,eaxmov wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmov hwnd,eaxinvoke ShowWindow, hwnd,SW_SHOWNORMALinvoke UpdateWindow, hwnd.WHILE TRUEinvoke GetMessage, ADDR msg,NULL,0,0.BREAK .IF (!eax)invoke TranslateMessage, ADDR msginvoke DispatchMessage, ADDR msg.ENDWmov eax,msg.wParamret
WinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM.IF uMsg==WM_DESTROYinvoke PostQuitMessage,NULL.ELSEIF uMsg==WM_CREATEinvoke EditSl,ADDR adrpoem,50,10,350,25,hWnd,700invoke EditSl,NULL,50,50,350,175,hWnd,700mov hEdit2,eaxinvoke Read_File_In,hEdit2,addr adrnxz;.ELSEinvoke DefWindowProc,hWnd,uMsg,wParam,lParam ret.ENDIFxor eax,eaxret
WndProc endpend start
總結
以上是生活随笔為你收集整理的用RadASM开发窗口程序(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。