首页
社区
课程
招聘
小虾和大侠们,帮偶看看,为什么出现乱码!!贴源码
发表于: 2006-10-6 15:49 5100

小虾和大侠们,帮偶看看,为什么出现乱码!!贴源码

2006-10-6 15:49
5100
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Windowproc  proto :HWND,:UINT,:WPARAM,:LPARAM
GetRegistKey proto

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
String db 'Keygen For flhxt [DFCG] [BCG] ',0dh,0ah
       db '            Designed by flhxt ',0dh,0ah
       db '  Web:    www.chinadfcg.com    ',0dh,0ah
       db '我很笨,他妈的,不知怎出出中文',0dh,0ah
       db ' ========================== ',0dh,0ah,0   

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   

;滚动字幕
hDc    DWORD    ?
hMemoryDc1  DWORD    ?
hMemoryDc2  DWORD    ?
hBrush    DWORD    ?
TextOutX  DWORD    ?
TextOutY  DWORD    ?
TextOutCY  DWORD    ?
LogFont    LOGFONT    <?>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Windowproc PROC hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL  hBitMapMDc:HDC
LOCAL  ps:PAINTSTRUCT
LOCAL  rect:RECT
LOCAL  TextSizeCX:dword
LOCAL  TextSizeCY:dword
  mov eax,uMsg
.if  eax == WM_PAINT
  invoke BeginPaint,hWin,addr ps
  mov  hDc,eax
  Color 0,0,0
  invoke BitBlt,hDc,0h,0h,100h,40h,hMemoryDc1,0,0,eax  ;将全黑位图从设备场景hMemoryDc1复制到hDc
  invoke EndPaint,hWin,addr ps
.elseif  eax == WM_INITDIALOG
;----------------------------------------------------------- ;==实现滚动字幕==
  invoke  SetTimer,hWin,200h,45h,NULL
  invoke  GetDC,hWin
  mov  hDc,eax
  invoke  CreateCompatibleDC,hDc                       ;创建作为大背景的内存设备环境
  mov  hMemoryDc1,eax
  invoke  CreateCompatibleBitmap,hDc,100h,40h          ;创建位图,以供内存设备环境调用作大背景
  mov  hBitMapMDc,eax
  invoke  SelectObject,hMemoryDc1,hBitMapMDc           ;选入刚创建的位图到内存设备环境
  Color   0,0,0                                        ;设置画刷的颜色
  invoke  CreateSolidBrush,eax
  mov  hBrush,eax
  mov  rect.top,0h                                  ;设置矩形大小
  mov  rect.left,0h
  mov  rect.right,100h
  mov  rect.bottom,100h
  invoke  FillRect,hMemoryDc1,addr rect,hBrush         ;用画刷以矩形大小填充内大背景
  invoke  DeleteObject,hBrush
  invoke  CreateCompatibleDC,hDc                       ;创建一个带文字的内存设备
  mov  hMemoryDc2,eax
  Color   0,255,255                                      ;设置字体颜色
  invoke  SetTextColor,hMemoryDc2,eax
  invoke  SetBkMode,hMemoryDc2,TRANSPARENT             ;指定空隙的填充方式-TRANSPARENT-透明处理
  invoke  CreateFontIndirect,addr LogFont              ;创建可以被选入的文字
  invoke  SelectObject,hMemoryDc2,eax
  invoke  CreateCompatibleBitmap,hDc,100h,80h          ;可显示的文字范围
  invoke  SelectObject,hMemoryDc2,eax
  Color   0,0,0                                        ;@1--设置画刷的颜色
  invoke  CreateSolidBrush,eax
  mov  hBrush,eax
  mov  rect.top,0h                                  ;设置矩形大小
  mov  rect.left,0h
  mov  rect.right,100h
  mov  rect.bottom,100h
  invoke  FillRect,hMemoryDc2,addr rect,hBrush         ;填充文字背景,单色时,从@1到这里的代码可以不用
  invoke  DeleteObject,hBrush
  mov  TextOutX,22h
  mov  TextOutY,30h
  lea  esi,String
  mov  al,byte ptr [esi]
  .while  al
    .if  al == 0dh
      add  TextOutY,10h                  ;设置行间距
      mov  TextOutX,22h                  ;换行
      add  esi,2h
    .else
      invoke  GetTextExtentPoint32,hMemoryDc2,esi,1,addr TextSizeCX
      invoke  TextOut,hMemoryDc2,TextOutX,TextOutY,esi,1h
      mov  eax,TextSizeCX
      add  TextOutX,eax
      inc  esi
    .endif
    mov  al,byte ptr [esi]
  .endw
  invoke  ReleaseDC,hWin,hDc
  
.elseif  eax == WM_TIMER
  invoke  GetDC,hWin
  mov  hDc,eax
  invoke  BitBlt,hMemoryDc1,0h,8h,100h,40h,hMemoryDc2,0,TextOutCY,0cc0020h
  inc  TextOutCY
  .if  TextOutCY == 70h
    mov  TextOutCY,0
  .endif
  invoke  BitBlt,hDc,0h,0h,100h,38h,hMemoryDc1,0,0,0cc0020h   
  invoke  ReleaseDC,hWin,hDc

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
其中,al改成ax和eax
byte改成word都试过,不是不行,
2006-10-6 15:54
0
雪    币: 1241
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
看了下代码,没看见设置字体的,这样程序会使用系统缺省的字体显示文字,如果有中文就可能会出现乱码了。
2006-10-6 19:12
0
雪    币: 248
活跃值: (1121)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
滚字,最好用带字的图形。
http://bbs.pediy.com/showthread.php?s=&threadid=23389
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\Comctl32.inc
include \masm32\include\gdi32.inc
include \masm32\include\masm32.inc

includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\Comctl32.lib
includelib \masm32\lib\masm32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include \masm32\macros\macros.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
	ClassName	db "MainWinClass",0
	AppName		db "Test_TextOut",0
	szTimesNR	db "Times New Roman",0
	
	String		db '²ÊÐäÒóÇÚÅõÓñÖÓ¡£µ±ÄêÞÕÈ´×íÑպ졣'
			db 'ÎèµÍÑîÁøÂ¥ÐÄÔ£¬¸è¾¡ÌÒ»¨ÉÈÓ°・ç¡£'
			db '´Ó±ðºó£¬ÒäÏà・ê¡£¼¸»Ø»êÃÎÓë¾ýͬ¡£'
			db '½ñÏüÊ£°ÑÒøâGÕÕ£¬ÓÌ¿ÖÏà・êÊÇÃÎÖС£',0,0,0,0   
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
	StrAddr		DWORD	?
	hInstance	HINSTANCE ?
	TextOutX	DWORD    ?
	TextOutY	DWORD    ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndProc proc uses edi hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	LOCAL Rct	:RECT
	LOCAL hDC	:DWORD
	LOCAL memDC	:DWORD
	LOCAL hBrush	:DWORD
	LOCAL hBmp	:DWORD
	LOCAL hNFont	:DWORD
	LOCAL hOFont	:DWORD

	.if uMsg==WM_DESTROY
		invoke	KillTimer,hWin,200h
		invoke	ReleaseDC,hWin,hDC
		invoke	PostQuitMessage,NULL
		
	.elseif uMsg==WM_CREATE
		invoke	SetWindowText,hWin,SADD("Test_TextOut")
		invoke  SetTimer,hWin,200h,1000d,NULL
		
		m2m StrAddr,offset String
	
	.elseif uMsg==WM_TIMER
	
		invoke GetClientRect,hWin,ADDR Rct
		
		RGB   0,255,0                                        
		invoke CreateSolidBrush,eax
		mov  hBrush,eax
		
		mov eax, Rct.right
		shr eax, 1
		sub eax,230
		mov TextOutX,eax
		
		mov eax, Rct.bottom
		shr eax, 1
		sub eax,20
		mov TextOutY,eax
		
		invoke GetDC,hWin
		mov hDC,eax
		
		invoke CreateCompatibleDC,hDC
		mov memDC,eax 
		
		invoke SelectObject,memDC,hNFont
		mov    hOFont, eax
		
		invoke CreateCompatibleBitmap,hDC,Rct.right,Rct.bottom
		mov hBmp,eax
		
		invoke SelectObject,memDC,hBmp
		
		invoke FillRect,memDC,ADDR Rct,hBrush         
		invoke DeleteObject,hBrush
		
		invoke SetBkMode,memDC,TRANSPARENT
		invoke SetTextColor,memDC,0ffh ; font red

		m2m edi,offset String
		invoke StrLen,offset String
		add edi,eax			;end str addr
		
		.if edi <= StrAddr
			m2m StrAddr,offset String
		.endif
		
		invoke CreateFont,34,0,0,0, FW_NORMAL, FALSE,FALSE,FALSE, \
			ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, \
			DEFAULT_QUALITY, 34, OFFSET szTimesNR
		
		invoke SelectObject, memDC, eax
		mov    hOFont, eax
		
		invoke TextOut,memDC,TextOutX,TextOutY,StrAddr,32
		add StrAddr,32			
	
		invoke BitBlt,hDC,0,0,Rct.right,Rct.bottom,memDC,0,0,SRCCOPY
		invoke DeleteObject, hOFont
		invoke DeleteObject,hBmp
		invoke DeleteDC,memDC
		invoke ReleaseDC,hWin,hDC

	.else
		invoke DefWindowProc,hWin,uMsg,wParam,lParam		
		ret
	.endif
	
	xor eax,eax
	ret
WndProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
	LOCAL wc:WNDCLASSEX
	LOCAL msg:MSG
	LOCAL hwnd:HWND
	
	mov   wc.cbSize,SIZEOF WNDCLASSEX
	mov   wc.style, CS_HREDRAW or CS_VREDRAW
	mov   wc.lpfnWndProc, OFFSET WndProc
	mov   wc.cbClsExtra,NULL
	mov   wc.cbWndExtra,NULL
	push  hInstance
	pop   wc.hInstance
	mov   wc.hbrBackground,COLOR_BTNFACE+1
	mov   wc.lpszMenuName,NULL
	mov   wc.lpszClassName,OFFSET ClassName
	
	invoke LoadIcon,NULL,IDI_APPLICATION
	mov   wc.hIcon,eax
	mov   wc.hIconSm,eax
	
	invoke LoadCursor,NULL,IDC_ARROW
	mov   wc.hCursor,eax
	
	invoke RegisterClassEx, addr wc
	INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
		WS_OVERLAPPEDWINDOW,250,100,500,300,NULL,NULL,hInst,NULL
	mov   hwnd,eax
	
	invoke ShowWindow, hwnd,SW_SHOWNORMAL
	invoke UpdateWindow, hwnd
	
	.WHILE TRUE
		invoke GetMessage, ADDR msg,NULL,0,0
		.BREAK .IF (!eax)
		invoke TranslateMessage, ADDR msg
		invoke DispatchMessage, ADDR msg
	.ENDW
	
	mov     eax,msg.wParam
	ret
WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
	invoke GetModuleHandle, NULL
	mov    hInstance,eax
	
	invoke GetCommandLine
	invoke WinMain, hInstance,NULL,eax, SW_SHOWDEFAULT
	invoke ExitProcess,eax
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

end start
上传的附件:
2006-10-6 21:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 ljtt 发布
看了下代码,没看见设置字体的,这样程序会使用系统缺省的字体显示文字,如果有中文就可能会出现乱码了。


字体,好像试了,还是不行,

不过,我楼上,也就是你楼下的那个代码行, ,偶学习先,
多谢两位帮偶摆平
2006-10-7 11:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 sixL 发布
滚字,最好用带字的图形。
http://bbs.pediy.com/showthread.php?s=&threadid=23389

代码:


感谢兄弟,提供代码啊,哈哈,太好了,偶学习先
2006-10-7 11:34
0
游客
登录 | 注册 方可回帖
返回
//