Win32开发入门(21):复制、粘贴及剪贴板操作

我要提醒一下大家,看了我的博文学到的知识,千万不要用于实际开发,不然你会被你的上司骂: “妈的,这些东西哪来的,从来没有人这样做过。”不信你试试,脑细胞被冻结的经理或者技术总监们 肯定会这样说的。

如果是一些有X年工作经验(X永远不可能大于100)的程序员肯定会说:“你 怎么这么不成熟?”你如果被别人这么说之后,不知道你会不会很伤心,或者很生气?

我呢, 曾经被N个人这样教育过,不过你猜猜我当时的心情,我非常高兴,喜悦。为什么呢?

你不妨想 想,当一个人说你不成熟的时候,你说他其实在说什么,他其实是在说他自己很成熟,就因为他自己熟 得快腐烂了,满身恶臭,才会显得你不成熟,仔细想想,是不是这个事儿?

那么,成熟到底好 不好呢?我相信小学生都有这样的常识,当一个果子熟透了的时候,会怎么样?它会从树枝上高空坠落 ,然后狠巴巴地摔到地上,粉身碎骨。呵呵,所以,你现在明白了吧,当别人说我不成熟的时候,我会 非常高兴,我心里想:“快了快了,你快完蛋了。”

好,牛皮吹完,乐一乐。下面开始干正事 ,今天咱们来认识一下怎么操作粘贴板,即复制和粘贴数据。我不知道大家看不看恐怖片,反正我现在 不得不吓你一回。这个粘贴板的操作,其实挺痛苦的,所以,如果在实际开发中,我肯定用CLR的类来 弄,是的,这是我的做事原则,哪种方法最简单就用哪种,这叫什么?效率最大化,只有闲着没事干的 人才会简单问题复杂化。

不过呢,毕竟这里咱们要了解一下在Win32下操作粘贴板的,所以呢, 我还是用API来解决,至于CLR方法,相信你比我更会用,你不信算了,反正我信了,我不是菜鸟,但我 是菜鹤。

读写粘贴板就像我们上厕所一样,首先打开厕所门(调用OpenClipboard函数),然后 大动作(SetClipboardData或GetClipboardData),干完了出来,关上厕所门(调用CloseClipboard) 。

我说它有点痛苦是因为操作的时睺,与我们平常读写一些数据不同,数据写入到剪贴板后就 由操作系统接管了,期间你不能任意读写,就像公共厕所是提供给你用的,你不能在里面给人家装修, 拆掉人家的东西。

一、复制数据

我这里就不弄太复杂了,就复制一串文本吧,这也常 用。先看看代码。

//复制内容
//打开剪贴板
OpenClipboard(hdlg);
//清空剪贴板
EmptyClipboard();
//向剪贴板中放东西
HWND hedt = GetDlgItem(hdlg, IDC_EDTCPY);
WCHAR ntext[100];
SendMessage(hedt, WM_GETTEXT, (WPARAM)100, (LPARAM)ntext);
//分配内存
HGLOBAL hgl = GlobalAlloc(GMEM_MOVEABLE, 100 * sizeof(WCHAR));
LPWSTR lpstrcpy = (LPWSTR)GlobalLock(hgl);
memcpy(lpstrcpy, ntext, 100 * sizeof(WCHAR));
GlobalUnlock(hgl);
SetClipboardData(CF_TEXT, lpstrcpy);
//关闭剪贴板
CloseClipboard();

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 剪贴板
, 如何给 发送粘贴板
厕所
,以便于您获取更多的相关知识。

时间: 2024-09-13 05:50:08

Win32开发入门(21):复制、粘贴及剪贴板操作的相关文章

Win32开发入门(10) 绘图(C)

今天我们来欣赏一下用于填充图形的函数,当然我不会逐个去介绍,因为我们参考MSDN直接套参数 就可以了. SetDCBrushColor函数有必要扯一下,它的声明如下: COLORREF SetDCBrushColor( __in HDC hdc, __in COLORREF crColor ); 第二个参数,通过RGB宏产生COLORREF传进去就可以了,比如这样: SetDCBrushColor(ps.hdc,RGB(211,254,41)); 但是,如果只是调用这个函数,你会发现 在绘图的时

Win32开发入门(9) 绘图(B)

我们今天继续涂鸦,实践证明,涂鸦是人生一大乐趣. 首先,我们写一个程序骨架子,以便 做实验. #include <Windows.h> LRESULT CALLBACK MainWinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain( HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpsCmdln, int iShow) { WNDCLASS wc

Win32开发入门(8) 绘图(A)

从本篇开始,我就不吹牛皮,那就吹吹兔皮吧.说说与绘图有关的东东. 要进行绘制,首先 要得到一个DC,啥是DC呢?按字面翻译叫设备上下文,也可以翻译为设备描述表,它主要指API为我们 封装了一些与显示设备相关的交互操作,我们这里说的是图形的绘制,自然指的是显卡.当然,对于同 一客观事物,世界上并不存在唯一的理解方案,技术上的东西最终拿来用的,不应该有硬性的去统一. 我们之中的很多人,最大的失败在于,人家说要这样理解他就毫不怀疑地这样理解,权威人士说要这样 这样,他就不经过大脑思考地跟着那样那样.

Win32开发入门(7) 多边形窗口

通常情况下,窗口都是一个矩形,不过,调用下面这个函数,可以自定义窗口的形状. int SetWindowRgn( __in HWND hWnd, __in HRGN hRgn, __in BOOL bRedraw ); 第一个参数是窗口的句柄,第二个参数也是一个句柄--HRGN,一个多边形的区域,可 以用CreatePolygonRgn函数来创建.第三个参数指定函数调用成功后是否重画窗口,如果窗口还没有显 示,就不必了,如果窗口已经显示,可以考虑设为TRUE. 我们创建用于显示窗口形状的区域句

Win32开发入门(4) 创建菜单

我们当然知道 ,现在,在实际开发中肯定不会像我这样写Win32程序的,你看,连个WinMain都要N行代码.但很多人 不明白什么叫学习,什么叫探索.实际上,通常能用于实际开发中的技巧只是占我们对客观世界的认识 总和不到20%,所以,如果你有兴趣计算一下,估计有80%的知识你不知道用到哪里去了.就算我们今后 不会把Win32程序投入到实际操作中,然而如果你了解过这东西,你会发现很多时候对我们是有帮助的 . 哪怕只是简单认识一下Win32的一些原理,相信对于日后编程的学习和成长,是有益处的. 为了提

Win32开发入门(3) 窗口的重绘

我们今天来吹一下关于窗口重绘的事情,在开始吹牛之前,我们先用上一篇博文中说到的方法写一 个简单的Win32应用程序.代码如下: #include <Windows.h> //先声明一下消息处理函数 LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); // 入口点 int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrvInst

Win32开发入门(12) 使用控件——单选按钮

今天,咱们还是接着玩"控件斗地主",这是我原创的超级游戏,有益身心健康,玩一朝,十年少 . 哦,对,脑细胞极速运动了一下,想起了一个问题,这个破问题虽然网上有很多种解决方案 ,但是,并没有让所有人都解决问题. 不知道大家有没有调用过LoadIconMetric函数,这个函 数在静态库Comctl32.lib中有定义(当然,动态库也有),不过,创建项目的时候,默认并没有引用它 的,于是,大家知道,解决调用的方法就是在代码中加上: #pragma comment(lib, "Co

Win32开发入门(6):创建右键菜单

快捷菜单,说得容易理解一点,就是右键菜单,当我们在某个区域内单击鼠标右键,会弹出一些菜 单项.这种类型的菜单,是随处可见的,我们在桌面上右击一下,也会弹出一个菜单. 右键菜 单的好处就是方便,它经常和我们正在操作的某个UI元素联系起来,比如我们正在使用文本框输入文本 ,我们在文本框中右击,就会看到可能有[复制][清空][全选]之类的选项,所以,右键菜单也称 为"上下文菜单(Context Menu)". 一般来说,创建并使用快捷菜单,可以按照以下步骤进 行: 1.用资源编辑器创建菜单.

Win32开发入门(15):ListView控件

这个控件其实不用阿拉来介绍,因为它太常见了,就好像我们一出门就会看到妹子一样常见.当然 也可以说,它是对ListBox的扩充. 在使用该控件之前,我先介绍VS的一个相当好玩的功能. 在代码文件的#include指令上右击,从弹出的菜单中选择"生成包含文件关系图",如下图: 开发入门(15):ListView控件-"> 然后你喝一口咖啡,你会看到这样的东西: