以下是在两个按钮里实现的写和读剪贴板,如果去掉GlobalFree(hGlobal),则执行很正常。但是不去掉,先按一下“写”,再按一下“读”,文本框(m_e1)不能正常显示,但是无论“写”还是“读”,如果和其他程序,如记事本,配合能成功,就是我本身配合不行。如果不要GlobalFree(hGlobal),会内存泄漏吗?
void CMy1Dlg::OnButton1()
{ if(!OpenClipboard()) return;
EmptyClipboard();
HGLOBAL hGlobal=GlobalAlloc(GMEM_ZEROINIT ,1000);
if (hGlobal == NULL) return;
LPSTR lpszData= (LPSTR)GlobalLock(hGlobal);
strcpy((char *)lpszData, "xxx");
GlobalUnlock(hGlobal);
SetClipboardData(CF_TEXT,hGlobal);
if (hGlobal == NULL) return;
CloseClipboard();
GlobalFree(hGlobal);
}void CMy1Dlg::OnButton2()
{
if (!OpenClipboard()) return; HGLOBAL hGlobal = GetClipboardData(CF_TEXT);
if (hGlobal == NULL) return;
LPSTR lpszData = (LPSTR)GlobalLock(hGlobal);
unsigned long nBufSize = GlobalSize(hGlobal);
m_e1.SetWindowText(lpszData);
GlobalUnlock(hGlobal);
CloseClipboard();
}
void CMy1Dlg::OnButton1()
{ if(!OpenClipboard()) return;
EmptyClipboard();
HGLOBAL hGlobal=GlobalAlloc(GMEM_ZEROINIT ,1000);
if (hGlobal == NULL) return;
LPSTR lpszData= (LPSTR)GlobalLock(hGlobal);
strcpy((char *)lpszData, "xxx");
GlobalUnlock(hGlobal);
SetClipboardData(CF_TEXT,hGlobal);
if (hGlobal == NULL) return;
CloseClipboard();
GlobalFree(hGlobal);
}void CMy1Dlg::OnButton2()
{
if (!OpenClipboard()) return; HGLOBAL hGlobal = GetClipboardData(CF_TEXT);
if (hGlobal == NULL) return;
LPSTR lpszData = (LPSTR)GlobalLock(hGlobal);
unsigned long nBufSize = GlobalSize(hGlobal);
m_e1.SetWindowText(lpszData);
GlobalUnlock(hGlobal);
CloseClipboard();
}
解决方案 »
- 数据库连接问题
- 如何使按钮在被按下和弹起时分别执行不同的程序
- 求教: strex.cpp 是干什么用的???
- 进程注入的一个问题
- 用VB,能否在客户端用一指针指向在服务器端创建的一个对象?
- VC数据库编
- Visual C 下的 MSComm 控件
- 请教一本经典书籍《The C++ Programming Language》
- 我在程序中使用了数据感知空件但还需要一个数据集空件(dbgrid),就是vb中那个叫datasouce的东西,不知道vc中叫什么怎么添加?
- 快来看,高低手们,求救!!!!!
- c++的SQL中模糊查询中通配符的问题(用like语句)
- 一个winsock多线程从exe改写成DLL调用后,传输性能急剧下降
调用SetClipboardData后, 系统拥有hGlobal对象, 系统可以读取数据, 但是前提是你不能释放或者解锁内存锁定.
还有一个就是如果hGlobal是一个内存对象, 该内存对象必须已经使用LocalAlloc 分配了内存.其它的你自己可以参考msdn..
那个内存泄漏不是错误,是剪贴板机制所决定的。你可试试,把剪贴板清空后,再退出程序,是看不到内存泄漏的报告的。