📄 clipboard.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 + -