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

📄 clipboard.cpp

📁 类似 windows explorer的工具
💻 CPP
字号:
// Clipboard.cpp: implementation of the CClipboard class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Clipboard.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CClipboard::CClipboard()
{

}

CClipboard::~CClipboard()
{

}

// 注意在Win9x下不能用宽字符
// Fixed by zq. 2004-01-07
void CClipboard::CutOrCopyFiles(char *lpBuffer,UINT uBufLen,BOOL bCopy)
{
    DWORD dwVersion = GetVersion();
	BOOL bWin9x = FALSE;

    if (dwVersion & 0x80000000) // win9x
	{
		bWin9x = TRUE;
	}

	UINT uDropEffect; // a clipboard format
	HGLOBAL hGblFiles;
    HGLOBAL hGblEffect; // 分配 DWORD 大小的空间
	
	DWORD *dwDropEffect;

	uDropEffect = RegisterClipboardFormat(CLIPBOARD_FORMAT);
	hGblEffect = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,sizeof(DWORD));
	dwDropEffect = (DWORD*)GlobalLock(hGblEffect);

	if (bCopy)
	{
		*dwDropEffect = DROPEFFECT_COPY;
	}
	else 
	{
		*dwDropEffect = DROPEFFECT_MOVE;
	}
	
	GlobalUnlock(hGblEffect);

	UINT uDropFilesLen; // 结构体 DROPFILES 的大小
	DROPFILES dropFiles;

	uDropFilesLen = sizeof(DROPFILES);
	dropFiles.pFiles =uDropFilesLen;
	dropFiles.pt.x = 0;
	dropFiles.pt.y = 0;
	dropFiles.fNC = FALSE;
	dropFiles.fWide = !bWin9x;

	UINT uGblLen;
    char *pszData;
    char *pszFileList;

    //uGblLen = uDropFilesLen + uBufLen * 2 + 8; // 加8 what's mean?
	
	if (bWin9x)
	{
		uGblLen = uDropFilesLen + uBufLen + 8;
	}
	else
	{
		uGblLen = uDropFilesLen + uBufLen * 2 + 8;
	}


	// 分配一段内存 
    hGblFiles = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, uGblLen);
    
    pszData = (char*)GlobalLock(hGblFiles); // 锁定申请到的内存
	memcpy(pszData,(LPVOID)(&dropFiles),uDropFilesLen);
	pszFileList = pszData + uDropFilesLen;

	if (bWin9x)
	{
		memcpy(pszFileList, lpBuffer, uBufLen);
	}
	else
	{
		MultiByteToWideChar(CP_ACP,MB_COMPOSITE,
			lpBuffer,uBufLen,(WCHAR *)pszFileList,uBufLen);
	}
	
	GlobalUnlock(hGblFiles); // 解锁内存

	if( OpenClipboard(NULL) )
	{
		EmptyClipboard();
		SetClipboardData(CF_HDROP, hGblFiles); // 设定剪贴板的内容
		SetClipboardData(uDropEffect,hGblEffect);
		CloseClipboard(); // 关闭剪贴板 
	}

    ::GlobalFree(hGblFiles);
    ::GlobalFree(hGblEffect);
}

⌨️ 快捷键说明

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