//要成为剪贴板查看器必须做到以下几点
//1.调用SetClipboardViewer,把自己加入到剪贴板查看器链
//在这一步中, 要保存在这条链中,紧跟自己后面的剪贴板查看器的窗口句柄
//2.加入了剪贴板查看器链,在适当时候就必须退出这个链.
//所以,在程序退出时,调用ChangeClipboardChain把自己从剪贴板查看器链移除
//3.处理由于其他剪贴板查看器的上述操作引起的消息 WM_CHANGECBCHAIN
//4.处理WM_DRAWCLIPBOARD, 真正地查看剪贴板,即把剪贴板的内容显示出来
//这当然就要对不同的数据类型(例如文字类型和图片类型的数据)采取不同的方法显示
//我这个例子就只简单地处理文字类型的数据, 所以比较简单

#include <windows.h>

//过程函数的返回值都是LRESULT,类型都是CALLBACK
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow)
{
    HWND hwnd;        //主窗口句柄,在CreateWindow中赋值
    MSG msg;        //消息变量,在GetMessage中使用
    WNDCLASS wndclass;        //窗口类
    TCHAR* szAppName = TEXT("CBViewer");    //类名和窗口名
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    //窗口背景
    wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);        //鼠标
    wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);    //图标
    wndclass.lpszClassName = szAppName;        //类名
    wndclass.cbClsExtra = 0;        //类的额外参数
    wndclass.cbWndExtra = 0;        //窗口的额外参数.用于基于同一窗口类的窗口各自区分.
                                    //在自定义对话框类时必须指定为DLGWINDOWEXTRA的大小
    wndclass.lpszMenuName = NULL;    //菜单名.可以用作子窗口的id
    wndclass.style = CS_HREDRAW | CS_VREDRAW;    //窗口风格
    wndclass.lpfnWndProc = WndProc;        //窗口过程
    wndclass.hInstance = hInstance;        //包含窗口过程的实例句柄

if( !RegisterClass(&wndclass) )        //注册窗口类
        return 0;
    hwnd = CreateWindow(                //创建窗口
                szAppName,                //窗口类名
                szAppName,                //窗口标题
                WS_OVERLAPPEDWINDOW,    //窗口风格
                CW_USEDEFAULT,            //初始的x坐标
                CW_USEDEFAULT,            //初始的y坐标
                CW_USEDEFAULT,            //初始的宽度
                CW_USEDEFAULT,            //初始的高度
                NULL,                    //父窗口
                NULL,                    //菜单
                hInstance,                //和窗口相关的实例句柄
                NULL                    //额外参数
                );
    ShowWindow( hwnd,nCmdShow );        //显示窗口
    UpdateWindow( hwnd );                //更新窗口
    while( GetMessage(&msg,NULL,0,0) )    //消息循环
    {
        TranslateMessage(&msg);            //将WM_XXXKEYXXX消息翻译为WM_CHAR消息
        DispatchMessage(&msg);            //传递消息到窗口过程
    }    
    return msg.wParam;                    //返回
}
LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
{
    static HWND hwndNextViewer;    //剪贴板查看器链的下一个窗口
    switch( message )
    {
    case WM_CREATE:
        {
            hwndNextViewer = SetClipboardViewer(hwnd);
            return 0;
        }
    case WM_CHANGECBCHAIN:
        if( hwndNextViewer == (HWND)wParam )
        {
            hwndNextViewer = (HWND)lParam;
        }
        else if( hwndNextViewer != NULL )
        {
            SendMessage(hwndNextViewer, message, wParam, lParam );
        }
        return 0;
    case WM_DRAWCLIPBOARD:
        {
            if( hwndNextViewer != NULL )
            {
                SendMessage(hwndNextViewer, message, wParam, lParam);
            }
            InvalidateRect(hwnd, NULL, TRUE);
            return 0;
        }
    case WM_PAINT:
        {
            HDC hdc;
            PAINTSTRUCT ps;
            HGLOBAL hglobal; 
            char* pText;
            RECT rc;
            OpenClipboard(hwnd);
            hdc = BeginPaint(hwnd, &ps);
            hglobal = GetClipboardData(CF_TEXT);
            if(hglobal != NULL)
            {
                pText = (char*)GlobalLock(hglobal);                
                GetClientRect(hwnd, &rc);
                DrawText(hdc, pText, -1, &rc, DT_CENTER);
                GlobalUnlock(hglobal);
                
            }
            CloseClipboard();
            EndPaint(hwnd, &ps);
            return 0;
        }
    case WM_DESTROY:
        ChangeClipboardChain(hwnd, hwndNextViewer);
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc( hwnd,message,wParam,lParam );
}

剪贴板(下)-剪贴板查看器相关推荐

  1. 解决win10系统便签提示无法打开这个应用,以及win10下照片查看器的问题

    win10打开便签的时候,提示无法打开这个应用,解决方法: 用管理员权限打开powershell,之后执行一下语句: add-appxpackage -register "C:\Progra ...

  2. 图片查看器 Viewer.js

    插件简介 Viewer.js 是一款强大的图片查看器,提供了纯 JS 版本和 jQuery 版本,具有以下特点: 支持移动设备触摸事件 支持响应式 支持放大.缩小 支持旋转(类似微博的图片旋转) 支持 ...

  3. Markdown查看器-typora

    前言: 在使用sublimetext打开Markdown文档的时候,格式没问题,可是图片加载是没有的 使用Windows下markdown查看器,typora软件 链接:https://www.typ ...

  4. Babylongjs-默认查看器

    当我们将村庄作为模型放在查看器中时会发生什么? 我们看到地面在闪烁.这是为什么?这是因为默认情况下,查看器已经添加了一个地面,并且在它们重叠的地方显示不正确. 我们如何解决这个问题?我们在≤ baby ...

  5. 剪贴板查看器:CopyClip 2 for Mac

    CopyClip 2 for Mac是一款运行在macOS平台上的剪贴板查看器,CopyClip 2 for Mac版可以帮助用户将存储您以前复制或剪切的所有内容,还能找到你所需要的内容,如果您正好也 ...

  6. 剪切板 html 查看器,剪贴板历史查看器

    剪贴板查看器是一款可以帮助您查看剪贴板历史信息的工具.大家都知道电脑自带的剪贴板只会记录最后一次复制的内容吧,而这款软件就不一样了,它可以在启动后为您记录所有的复制内容,以便您查看或者再次使用. 剪贴 ...

  7. C#Winform+WindowsAPI做个剪贴板无缝自动保存器(视频截图利器)

    C#Winform+WindowsAPI做个剪贴板无缝自动保存器(视频截图利器) (本文最新代码已上传到GitHub,地址在(https://github.com/bitzhuwei/Clipboar ...

  8. Linux 下高级日志文件查看器Log File Navigator

    Log File Navigator,简称lnav,是一款面向小规模的适用于 Linux 的高级日志文件查看器.它是一个终端应用程序,可以理解您的日志文件,让您轻松找到问题,几乎不需要什么设置. ln ...

  9. linux 如何查看终端格式,你应该还不知道,Linux终端下的 Markdown 文档查看器

    原标题:你应该还不知道,Linux终端下的 Markdown 文档查看器 现在,Markdown 差不多已经成为技术文档的标准.它可以实现技术文档的快捷写作,以及输出发布.同样都是标记语言,但Mark ...

  10. linux文档查看器翻译,mdv – Linux终端下的 Markdown 文档查看器

    现在,Markdown 差不多已经成为技术文档的标准.它可以实现技术文档的快捷写作,以及输出发布.同样都是标记语言,但Markdown 文档相比HTML更加简单.一是体现在标记符的数量上,二是体现在标 ...

最新文章

  1. AI一分钟 | 谷歌开发者大会,千人同玩AI小程序;阿里获杭州首张自动驾驶牌照...
  2. mysql版本不支持 loop,loopback4, node mysql connector支持 utf8mb4字符集
  3. 论文阅读02:基于深度学习的图像细粒度分类算法
  4. 菜鸟心态综合症4:缺乏自信,总对自己说No
  5. ASP.NET 主题(Themes)FAQ
  6. python爬虫要安装什么_python爬虫之分布式爬虫和部署
  7. 管理新语:会议与问题的关系
  8. 模拟银行叫号系统(c代码)
  9. Coursera | 离散数学概论(北大)| quiz答案
  10. 阿里云企业邮箱域名注册流程
  11. 业务:金融科技行业分析
  12. 处理数据之把省市自治区这样的字眼切除
  13. jQuery里面的 .on 和 .bind 的区别
  14. 知瓜数据爬取-机构排行榜
  15. 计算机二进制补位是什么,2、二进制
  16. python中创建对象后可以使用运算符来调用其成员_《守株待兔》这则寓言告诉我们(...
  17. Failed to register bundle identifier. The app identifier “xxx” cannot be registered to your developm
  18. 新零售微服务解决方案,打通企业微信、饿了么、美团、京东到家
  19. 华为手机Android系统优缺点,华为手机与iPhone相比有哪些优缺点?
  20. SpringMVC 程序开发

热门文章

  1. 【蓝桥杯】双非本科?大一大二不敢参加?这篇蓝桥全解析帮你打消疑虑轻松获奖【内附蓝桥资源和学习路线】
  2. cordova打包APP更改图标和APP名字
  3. 基于多模态路标跟踪的紧耦合激光—视觉—惯导里程计(ICRA2021)
  4. xshell安装教程
  5. H5如何实现唤起APP
  6. Unity IAP接入google支付文档(2022年最新)
  7. 吊打付费神器,安利两款视频压缩工具,不改变任何画质且永久免费使用的神器!
  8. [可道云文件管理kodbox 1.15] 企业网盘+云端文档管理+批量上传下载文件夹+移动端H5优化
  9. mvp架构 java_MVP架构基本使用
  10. 仿真软件Multisim 10下载地址与破解补丁