win32汇编处理字符消息和给常量区标号赋值
生活随笔
收集整理的這篇文章主要介紹了
win32汇编处理字符消息和给常量区标号赋值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
程序運行如下;當(dāng)按下一個按鍵,在窗口上顯示該字符;
程序;masm32;Build All;
當(dāng)消息為wm_char,即 uMsg==WM_CHAR;
所按下的鍵在wParam中,將此值轉(zhuǎn)到char中;然后調(diào)用InvalidateRect,調(diào)用此函數(shù)后,窗口無效,將執(zhí)行消息處理的WM_PAINT分支;
處理WM_PAINT消息時,調(diào)用TextOut,在窗口上輸出了char的內(nèi)容;
看代碼,
? ??char WPARAM 20h
char 標(biāo)號定義在常量區(qū),類型是WPARAM;
假設(shè)現(xiàn)在我想在按下 o 鍵時,在窗口上輸出 9 ;修改代碼如下圖;
構(gòu)建,如下圖;錯誤,提示 標(biāo)號重定義:char;
看來還得使用push pop對,改為如下;
好了,當(dāng)按下 o ,輸出 9;其他鍵不變;
.386 .model flat,stdcall option casemap:noneWinMain proto :DWORD,:DWORD,:DWORD,:DWORDinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib.data ClassName db "SimpleWinClass",0 AppName db "wm_char Demo Window",0 char WPARAM 20h.data? hInstance HINSTANCE ? CommandLine LPSTR ?.code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke GetCommandLine mov CommandLine,eax invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT invoke 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 hInstpop wc.hInstancemov wc.hbrBackground,COLOR_WINDOW+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,100,100,\100,100,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.wParamretWinMain endp WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAMLOCAL hdc:HDCLOCAL ps:PAINTSTRUCT.if uMsg==WM_DESTROYinvoke PostQuitMessage,NULL.elseif uMsg==WM_CHARpush wParampop char.if char=='o'push '9'pop char.endifinvoke InvalidateRect,hWnd,NULL,TRUE.elseif uMsg==WM_PAINTinvoke BeginPaint,hWnd,ADDR psmov hdc,eaxinvoke TextOut,hdc,0,0,ADDR char,1invoke EndPaint,hWnd,ADDR ps.elseinvoke DefWindowProc,hWnd,uMsg,wParam,lParamret.endifxor eax,eaxretWndProc endp end start?
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的win32汇编处理字符消息和给常量区标号赋值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 傅里叶变换在图像处理中的应用初步学习
- 下一篇: SQL having 子句示例 - 使用