⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 见招拆招《windows程序设计》(十一) .txt

📁 会变语言实现的一些程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
	IDM_EDIT_COPY          equ	40002
	IDM_EDIT_PASTE         equ	40003
	IDM_EDIT_CLEAR         equ	40004
	IDM_EDIT_RESET         equ	40005
	CF_TCHAR 	       equ	CF_TEXT



.DATA
	szAppName	TCHAR	"ClipText",0
	szDefaultText 	TCHAR 	"Default Text - ANSI Version",0
	szCaption	TCHAR	"Clipboard Text Transfers - ANSI Version",0
.DATA?
	hInstance	HINSTANCE	?
	pText 		PTSTR		?
.CODE
START:
	invoke GetModuleHandle,NULL
	invoke WinMain,eax,NULL,NULL,SW_SHOWDEFAULT
	invoke ExitProcess,0
WinMain proc hInst:DWORD,hPrevInst:DWORD,szCmdLine:DWORD,iCmdShow:DWORD
	LOCAL wndclass   :WNDCLASSEX
	LOCAL msg  :MSG
	LOCAL hWnd :HWND
	LOCAL hAccel:HACCEL

	mov wndclass.cbSize,sizeof WNDCLASSEX	
	mov wndclass.style,CS_HREDRAW or CS_VREDRAW	
	mov wndclass.lpfnWndProc,offset WndProc

	mov wndclass.cbClsExtra,0
	mov wndclass.cbWndExtra,0
	
	push hInst
	pop wndclass.hInstance
	
	invoke LoadIcon,hInst,addr szAppName
	mov wndclass.hIcon,eax	
	
	invoke LoadCursor,NULL,IDC_ARROW
	mov wndclass.hCursor,eax	
	
	invoke GetStockObject,WHITE_BRUSH
	mov wndclass.hbrBackground,EAX
	
	lea eax,szAppName
	mov wndclass.lpszMenuName,eax
	mov wndclass.lpszClassName,eax

	mov wndclass.hIconSm,0
	
	invoke RegisterClassEx, ADDR wndclass
	.if (eax==0)
	   invoke MessageBox,NULL,CTXT("This program requires Windows NT!"),szAppName, MB_ICONERROR
           ret
	.endif
        
   
	invoke CreateWindowEx,NULL,
			ADDR szAppName, 					;window class name
			CTXT("No-Popup Nested Menu Demonstration"), 
			WS_OVERLAPPEDWINDOW,					;window style
			CW_USEDEFAULT,						;initial x position
			CW_USEDEFAULT,						;initial y position
			CW_USEDEFAULT, 						;initial x size
			CW_USEDEFAULT,						;initial y size
			NULL,							;parent window handle
			NULL,							;window menu handle
			hInst,							;program instance handle
			NULL										;creation parameters
	mov hWnd,eax


  	invoke ShowWindow,hWnd,iCmdShow
	invoke UpdateWindow,hWnd
	
	invoke	LoadAccelerators,hInstance,addr szAppName
	mov	hAccel,eax

	StartLoop:
		invoke GetMessage,ADDR msg,NULL,0,0
			cmp eax, 0
			je ExitLoop
				invoke TranslateMessage, ADDR msg
				invoke DispatchMessage,  ADDR msg
			jmp StartLoop
	ExitLoop:
	
	mov eax,msg.wParam
	ret
WinMain endp


WndProc proc hwnd:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
       LOCAL	bEnable:BOOL
       LOCAL	hGlobal:HGLOBAL
       LOCAL	hdc:HDC
       LOCAL	pGlobal:PTSTR
       LOCAL    ps:PAINTSTRUCT
       LOCAL    rect:RECT

	.if	uMsg == WM_CREATE
		invoke	SendMessage,hwnd, WM_COMMAND, IDM_EDIT_RESET, 0

		xor	eax,eax
		ret	
	.elseif	uMsg == WM_INITMENUPOPUP
		invoke	IsClipboardFormatAvailable,CF_TCHAR
        	.if	eax != 0  
        		mov	eax,MF_ENABLED
        	.else	
        		mov	eax,MF_GRAYED
        	.endif
                invoke	EnableMenuItem,wParam,IDM_EDIT_PASTE,eax
        	.if	pText != 0  
        		mov	bEnable,MF_ENABLED
        	.else	
        		mov	bEnable,MF_GRAYED
        	.endif		

                invoke	EnableMenuItem,wParam,IDM_EDIT_CUT,	bEnable
        	invoke	EnableMenuItem,wParam,IDM_EDIT_COPY,    bEnable
        	invoke	EnableMenuItem,wParam,IDM_EDIT_CLEAR,	bEnable
        	
	.elseif uMsg == WM_COMMAND
		mov	eax,wParam
		and	eax,0FFFFh
		.if	eax == IDM_EDIT_PASTE
        						
                        invoke	OpenClipboard,hwnd
                        invoke	GetClipboardData,CF_TCHAR
                        .if     (eax!=0)
                        	mov	hGlobal,eax
                        	invoke	GlobalLock,hGlobal
                                mov	pGlobal,eax 
				.if 	(pText!=0)
                                        invoke	LocalFree,pText
					mov	pText,NULL
				.endif
				invoke	GlobalSize,hGlobal
				invoke	LocalAlloc,LMEM_FIXED or LMEM_ZEROINIT,eax
        			mov	pText,eax
             	;invoke	MessageBox,hwnd,pGlobal,NULL,MB_APPLMODAL	        			
				invoke	lstrcpy,pText, pGlobal
        			invoke	InvalidateRect,hwnd, NULL, TRUE
			.endif
        
                        invoke	CloseClipboard
	        	xor	eax,eax
	        	ret
		.elseif	(eax == IDM_EDIT_CUT)||(eax == IDM_EDIT_COPY)
			.if 	(pText==0)
                                xor	eax,eax
                                ret
                        .endif                         
                        invoke	lstrlen,pText
                        inc	eax
                        mov	ecx,sizeof (TCHAR)
                        mul	ecx
                        invoke	GlobalAlloc,GHND or GMEM_SHARE,eax
 			mov	hGlobal,eax
 			invoke	GlobalLock,hGlobal
 			mov	pGlobal,eax
        		invoke	lstrcpy,pGlobal, pText
        		invoke	GlobalUnlock,hGlobal
        		invoke	OpenClipboard,hwnd
        		invoke	EmptyClipboard
        		invoke	SetClipboardData,CF_TCHAR, hGlobal
        		invoke	CloseClipboard
        		mov	eax,wParam
        		add	eax,0FFFFh
                        .if 	(eax == IDM_EDIT_COPY)
        			xor	eax,eax
                                ret
        		.endif
        		jmp	@f
                        ; fall through for IDM_EDIT_CUT
             .elseif	eax==IDM_EDIT_CLEAR
             	@@:

                        .if 	(pText!=0)
                                invoke	LocalFree,pText
        			mov	pText,NULL
        
			.endif
        		invoke	InvalidateRect,hwnd, NULL, TRUE
        		xor	eax,eax
        		ret
             .elseif	eax==IDM_EDIT_RESET
                        .if	(pText!=0)
                                invoke	LocalFree,pText
        			mov	pText,NULL
			.endif     
			invoke	lstrlen,addr szDefaultText
			inc	eax
			mov	ecx,sizeof (TCHAR)
			mul	ecx
			invoke	LocalAlloc,LMEM_FIXED or LMEM_ZEROINIT,eax
                        mov	pText,eax
        		invoke	lstrcpy,pText,addr szDefaultText
	        	invoke	InvalidateRect,hwnd, NULL, TRUE
        		xor	eax,eax
        		ret
             .endif
	.elseif uMsg == WM_PAINT
              invoke	BeginPaint,hwnd,addr ps
              mov	hdc,eax 
              invoke	GetClientRect,hwnd,addr rect
              .if 	(pText != NULL)
        		invoke	DrawText,hdc, pText, -1, addr rect, DT_EXPANDTABS or DT_WORDBREAK
	      .endif        		
       	      invoke	EndPaint,hwnd,addr ps
        
	      xor	eax,eax
	      ret
	.elseif uMsg == WM_DESTROY
		
	        invoke 	PostQuitMessage,NULL
	        xor	eax,eax
	        ret
	.endif

	invoke DefWindowProc,hwnd,uMsg,wParam,lParam
	ret
WndProc endp
END START



CLIPTEXT.RC
 

       
#include "resource.h"

#define IDM_EDIT_CUT           40001
        
#define IDM_EDIT_COPY          40002
        
#define IDM_EDIT_PASTE         40003
        
#define IDM_EDIT_CLEAR         40004
        
#define IDM_EDIT_RESET         40005

        
/////////////////////////////////////////////////////////////////////////////
        
// Menu
        
CLIPTEXT MENU DISCARDABLE
        
BEGIN
        
    POPUP "&Edit"
        
   BEGIN
        
            MENUITEM "Cu&t\tCtrl+X",                     IDM_EDIT_CUT
        
       MENUITEM "&Copy\tCtrl+C",                 IDM_EDIT_COPY
        
       MENUITEM "&Paste\tCtrl+V",                IDM_EDIT_PASTE
        
MENUITEM "De&lete\tDel",                  IDM_EDIT_CLEAR
        
       MENUITEM SEPARATOR               
        
       MENUITEM "&Reset",                    IDM_EDIT_RESET
        
   END
        
END
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -