Win32 SDK Gui编程系列之--剪贴板(Clipboard)

本文介绍了如何使用Win32 SDK进行剪贴板操作,包括粘贴文本数据、读取文本和位图数据并显示,以及如何在屏幕上捕获带有鼠标光标的图像。通过定时检查剪贴板内容和利用键盘钩子检测屏幕截图事件,实现了屏幕截图功能的完善。
摘要由CSDN通过智能技术生成

剪贴板(Clipboard)

应用之间的数据传输使用剪贴板。

1. 在剪贴板上粘贴文本数据。

首先,试着在剪贴板上粘贴文本数据吧。 节目如下所示。 能否顺利,可以用NotePad等文本编辑器确认。

2. 从剪贴板读取文本数据并显示。

从剪贴板读取文本数据后显示的程序如下所示。

用NotePad等文本编辑器粘贴文本后,运行这个程序的话,可以确认动作。

3. 从剪贴板上读取位图并显示。

从剪贴板读取位图后显示的程序如下所示。 截图后,运行这个程序的话,可以确认动作。

3. 从剪贴板读取位图并显示(2)

Windows OS标配的屏幕截图不会复制鼠标光标。 因此,我想捕捉剪贴板的形象,叠加鼠标光标。

虽然下一个项目还没有达到最终目标,但有时需要确认原理,所以会留作中途经过。

基本上和以前的程序clipboard03.c一样,但是周期性地重复了绘画。 这个程序没有判断是用PRTSC键进行全屏复制,还是用ALT键+PRTSC键捕捉活动窗口,首先,drawCursor的第2参数是TRUE,即活动窗口对应。

#include <windows.h>

void onPaint(HWND hwnd) {
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);
    if (IsClipboardFormatAvailable(CF_BITMAP)) {
    	BITMAP 	bm;
        OpenClipboard(hwnd);
        HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
        HDC hdcMem = CreateCompatibleDC(hdc);
        SelectObject(hdcMem, hBitmap);
        GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
        BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
        DeleteDC(hdcMem);
        CloseClipboard();
    }
    EndPaint(hwnd, &ps);
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT umsg, WPARAM wp, LPARAM lp) {
    switch (umsg) {
      case WM_PAINT:  onPaint(hwnd); return 0;
      case WM_DESTROY: PostQuitMessage(0); return 0;
    }
    return DefWindowProc(hwnd, umsg, wp, lp);
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) {
    MSG msg;
    WNDCLASS wc = { 0, WindowProc, 0, 0, hInst, NULL, LoadCursor(NULL,IDC_ARROW),
			 (HBRUSH)(COLOR_WINDOW+1), NULL, "Dem
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值