C++ WINAPI 按钮剪贴板 - 复制操作

C++ WINAPI Button Clipboard - Copy action

本文关键字:复制 操作 剪贴板 WINAPI 按钮 C++      更新时间:2023-10-16

我对C++有点陌生,但我知道基础知识以及如何正确使用它。我只是想知道如何在 Windows 应用程序中复制到剪贴板。我希望 4 个按钮能够在单击时复制消息并将其存储在剪贴板中。下面是按钮的代码,if 语句是单击时执行的操作:

case WM_CREATE:{
            CreateWindow(TEXT("BUTTON"), TEXT("Copythistext"),
            WS_CHILD | WS_VISIBLE,
            12,60,10,20,
            hwnd, (HMENU) ID_BUTTON, NULL, NULL
            );
            break;
       }

case WM_COMMAND:{      //this is where the button performs it's task 
            if(LOWORD(wParam)== ID_BUTTON) { 
        //this is where the task goes
       }
       break;
     }

事件顺序:

void AddToClipboard(char* pszText)
{
int nStrLen = strlen(pszText);
HGLOBAL hMem = GlobalAlloc(nStrLen + 1, GMEM_SHARE);
char* pCopyTo = (char*) GlobalLock(hMem);
strcpy(pCopyTo, pszText);
GlobalUnlock(hMem);
OpenClipboard(NULL); // or HWND handle instead of NULL
EmptyClipboard();

SetClipboardData(CF_TEXT, hMem); // hMem is handle to memory allocated with GlobalAlloc
CloseClipboard();
}

对于hMem,你通常做一个GlobalAlloc(),GlobalLock(),将字符串复制到GlobalLock()返回的指针上,然后在句柄上做一个GlobalUnlock()

有一种奇怪的方法可以将文本从按钮发送到剪贴板:通过 SetDlgItemText + WM_LBUTTONDBLCLK 到 STATIC 并带有 SS_NOTIFY(STATIC 的大小可能为 =0)。