剪贴板(下)-剪贴板查看器
//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 );
}
剪贴板(下)-剪贴板查看器相关推荐
- 解决win10系统便签提示无法打开这个应用,以及win10下照片查看器的问题
win10打开便签的时候,提示无法打开这个应用,解决方法: 用管理员权限打开powershell,之后执行一下语句: add-appxpackage -register "C:\Progra ...
- 图片查看器 Viewer.js
插件简介 Viewer.js 是一款强大的图片查看器,提供了纯 JS 版本和 jQuery 版本,具有以下特点: 支持移动设备触摸事件 支持响应式 支持放大.缩小 支持旋转(类似微博的图片旋转) 支持 ...
- Markdown查看器-typora
前言: 在使用sublimetext打开Markdown文档的时候,格式没问题,可是图片加载是没有的 使用Windows下markdown查看器,typora软件 链接:https://www.typ ...
- Babylongjs-默认查看器
当我们将村庄作为模型放在查看器中时会发生什么? 我们看到地面在闪烁.这是为什么?这是因为默认情况下,查看器已经添加了一个地面,并且在它们重叠的地方显示不正确. 我们如何解决这个问题?我们在≤ baby ...
- 剪贴板查看器:CopyClip 2 for Mac
CopyClip 2 for Mac是一款运行在macOS平台上的剪贴板查看器,CopyClip 2 for Mac版可以帮助用户将存储您以前复制或剪切的所有内容,还能找到你所需要的内容,如果您正好也 ...
- 剪切板 html 查看器,剪贴板历史查看器
剪贴板查看器是一款可以帮助您查看剪贴板历史信息的工具.大家都知道电脑自带的剪贴板只会记录最后一次复制的内容吧,而这款软件就不一样了,它可以在启动后为您记录所有的复制内容,以便您查看或者再次使用. 剪贴 ...
- C#Winform+WindowsAPI做个剪贴板无缝自动保存器(视频截图利器)
C#Winform+WindowsAPI做个剪贴板无缝自动保存器(视频截图利器) (本文最新代码已上传到GitHub,地址在(https://github.com/bitzhuwei/Clipboar ...
- Linux 下高级日志文件查看器Log File Navigator
Log File Navigator,简称lnav,是一款面向小规模的适用于 Linux 的高级日志文件查看器.它是一个终端应用程序,可以理解您的日志文件,让您轻松找到问题,几乎不需要什么设置. ln ...
- linux 如何查看终端格式,你应该还不知道,Linux终端下的 Markdown 文档查看器
原标题:你应该还不知道,Linux终端下的 Markdown 文档查看器 现在,Markdown 差不多已经成为技术文档的标准.它可以实现技术文档的快捷写作,以及输出发布.同样都是标记语言,但Mark ...
- linux文档查看器翻译,mdv – Linux终端下的 Markdown 文档查看器
现在,Markdown 差不多已经成为技术文档的标准.它可以实现技术文档的快捷写作,以及输出发布.同样都是标记语言,但Markdown 文档相比HTML更加简单.一是体现在标记符的数量上,二是体现在标 ...
最新文章
- AI一分钟 | 谷歌开发者大会,千人同玩AI小程序;阿里获杭州首张自动驾驶牌照...
- mysql版本不支持 loop,loopback4, node mysql connector支持 utf8mb4字符集
- 论文阅读02:基于深度学习的图像细粒度分类算法
- 菜鸟心态综合症4:缺乏自信,总对自己说No
- ASP.NET 主题(Themes)FAQ
- python爬虫要安装什么_python爬虫之分布式爬虫和部署
- 管理新语:会议与问题的关系
- 模拟银行叫号系统(c代码)
- Coursera | 离散数学概论(北大)| quiz答案
- 阿里云企业邮箱域名注册流程
- 业务:金融科技行业分析
- 处理数据之把省市自治区这样的字眼切除
- jQuery里面的 .on 和 .bind 的区别
- 知瓜数据爬取-机构排行榜
- 计算机二进制补位是什么,2、二进制
- python中创建对象后可以使用运算符来调用其成员_《守株待兔》这则寓言告诉我们(...
- Failed to register bundle identifier. The app identifier “xxx” cannot be registered to your developm
- 新零售微服务解决方案,打通企业微信、饿了么、美团、京东到家
- 华为手机Android系统优缺点,华为手机与iPhone相比有哪些优缺点?
- SpringMVC 程序开发
热门文章
- 【蓝桥杯】双非本科?大一大二不敢参加?这篇蓝桥全解析帮你打消疑虑轻松获奖【内附蓝桥资源和学习路线】
- cordova打包APP更改图标和APP名字
- 基于多模态路标跟踪的紧耦合激光—视觉—惯导里程计(ICRA2021)
- xshell安装教程
- H5如何实现唤起APP
- Unity IAP接入google支付文档(2022年最新)
- 吊打付费神器,安利两款视频压缩工具,不改变任何画质且永久免费使用的神器!
- [可道云文件管理kodbox 1.15] 企业网盘+云端文档管理+批量上传下载文件夹+移动端H5优化
- mvp架构 java_MVP架构基本使用
- 仿真软件Multisim 10下载地址与破解补丁