从剪贴板粘贴信息

【勇芳软件工作室】汉化HomePreviousNext

在Label应用程序中,应用程序定义的EditPaste函数粘贴剪贴板的内容。此函数执行以下操作:

通过调用OpenClipboard函数打开剪贴板。

2.确定要检索哪些可用的剪贴板格式。

3.通过调用GetClipboardData功能检索所选格式的数据句柄。

4.将数据的副本插入到文档中。

GetClipboardData返回的句柄仍然由剪贴板所有,因此应用程序不得将其释放或将其锁定。

5.通过调用CloseClipboard函数关闭剪贴板。

如果选择了标签并包含插入点,则EditPaste函数会在插入点插入剪贴板中的文本。如果没有选择或选择标签,该函数将使用剪贴板上的应用程序定义的LABELBOX结构创建一个新标签。LABELBOX结构通过使用注册的剪贴板格式放置在剪贴板上。

以下是EditPaste函数。

VOID WINAPI EditPaste(VOID)

{

PLABELBOX pbox;

HGLOBAL hglb;

LPTSTR lptstr;

PLABELBOX pboxCopy;

int cx, cy;

HWND hwnd;

pbox = hwndSelected == NULL ? NULL :

(PLABELBOX) GetWindowLong(hwndSelected, 0);

//如果应用程序处于编辑模式,

//获取剪贴板文本。

if (pbox != NULL && pbox->fEdit)

{

if(!IsClipboardFormatAvailable(CF_TEXT))

return;

if(!OpenClipboard(hwndMain))

return;

hglb = GetClipboardData(CF_TEXT);

if (hglb != NULL)

{

lptstr = GlobalLock(hglb);

if (lptstr != NULL)

{

//调用应用程序定义的ReplaceSelection

//函数插入文本并重绘

//窗口。

ReplaceSelection(hwndSelected, pbox, lptstr);

GlobalUnlock(hglb);

}

}

CloseClipboard();

return;

}

//如果应用程序不处于编辑模式,

//创建标签窗口。

if(!IsClipboardFormatAvailable(uLabelFormat))

return;

if(!OpenClipboard(hwndMain))

return;

hglb = GetClipboardData(uLabelFormat);

if (hglb != NULL)

{

pboxCopy = GlobalLock(hglb);

if (pboxCopy != NULL)

{

cx = pboxCopy->rcText.right + CX_MARGIN;

cy = pboxCopy->rcText.top * 2 + cyText;

hwnd = CreateWindowEx(

WS_EX_NOPARENTNOTIFY | WS_EX_TRANSPARENT,

atchClassChild,NULL,WS_CHILD,0,0,cx,cy,

hwndMain,NULL,hinst,NULL

);

if (hwnd != NULL)

{

pbox = (PLABELBOX) GetWindowLong(hwnd, 0);

memcpy(pbox, pboxCopy, sizeof(LABELBOX));

ShowWindow(hwnd, SW_SHOWNORMAL);

SetFocus(hwnd);

}

GlobalUnlock(hglb);

}

}

CloseClipboard();

}