sendmessage 获得图片 对 CSDN 没什么信心了 居然这么久了又没人回答.... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我没听过sendmessage可以获得图像的 sendmessage(,WM_GETTEXT,,)这样不就是可以得到 文本了吗??那我想得到图片应该怎么办呢 ?? 你这个问题太牛了。用SendMessage得到图片。 =_= 啊 在下只是实习中的软件专业本科生,不过在下认为sendmessage(WM_GETTEXT)的意思不是得到文本,而是发出“得到文本”这条消息才对,真正处理“得到文本”这个“事件”的代码在别的地方,在哪里表问我。。 可以的,随便用哪个参数都行,WPARAM,LPARAM.图片可以读到内存里,比如char* buff,然后SendMessage(hwnd,msg,(WPARAM)buff,pParam);收到时,读:char* temp = (char*)wParam;可能有类型转换的问题,自己改改就行了。不过这种方法不好,因为图片尽寸大,太浪费内存。也不灵活。Windows有个操作Ole剪切板的函数,用那个比较方便。下面是MFC2 那本书的例子:// Copy the text string to a global memory block.char szText[] = "Hello, world";HANDLE hData = ::GlobalAlloc (GMEM_MOVEABLE, ::lstrlen (szText) + 1);LPSTR pData = (LPSTR) ::GlobalLock (hData);::lstrcpy (pData, szText);::GlobalUnlock (hData);// Initialize a FORMATETC structure and a STGMEDIUM structure that// describe the data and the location at which it's stored.FORMATETC fe;fe.cfFormat = CF_TEXT; // Clipboard format=CF_TEXTfe.ptd = NULL; // Target device=Screenfe.dwAspect = DVASPECT_CONTENT; // Level of detail=Full contentfe.lindex = -1; // Index=Not applicablefe.tymed = TYMED_HGLOBAL; // Storage medium=MemorySTGMEDIUM stgm;stgm.tymed = TYMED_HGLOBAL; // Storage medium=Memorystgm.hGlobal = hData; // Handle to memory blockstgm.pUnkForRelease = NULL; // Use ReleaseStgMedium// Place the data object on the OLE clipboard.pdo->SetData (&fe, &stgm, FALSE);::OleSetClipboard (pdo);pdo->Release ();//下面是从剪切板读出来char szText[BUFLEN];IDataObject* pdo;STGMEDIUM stgm;FORMATETC fe = { CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};if (SUCCEEDED (::OleGetClipboard (&pdo))) { if (SUCCEEDED (pdo->GetData (&fe, &stgm) && stgm.hGlobal != NULL)) { LPCSTR pData = (LPCSTR) ::GlobalLock (stgm.hGlobal); if (::lstrlen (pData) < BUFLEN) ::lstrcpy (szText, pData); ::GlobalUnlock (stgm.hGlobal); ::ReleaseStgMedium (&stgm); } pdo->Release ();} 一般用vc做什么项目,最近打算用vc做毕业设计,不知道做什么好,谁能给个思路 选择视频采集卡的问题 MaskBlt 问下,VC什么时候脾气最好? 关于“INTERNAL COMPILER ERROR”的问题! 怎么实现我双击一个文件就打开我的程序,并且用这个程序打开这个文件 ADO返回的结果集中空值的处理??? 求救,关于Win7 X64下使用VS2008调试DLL的问题 如何使按钮能够连续按着 不是动态添加的button控件,而是在对话框设计是添加的,怎样用语句是button 无效呢 怎样在别的类中声名一个类模板 VC++6.0中如何开发独立的数据显示程序
这样不就是可以得到 文本了吗??那我想得到图片应该怎么办呢 ??
用SendMessage得到图片。
收到时,读:char* temp = (char*)wParam;
可能有类型转换的问题,自己改改就行了。
不过这种方法不好,因为图片尽寸大,太浪费内存。也不灵活。Windows有个操作Ole剪切板的函数,用那个比较方便。
下面是MFC2 那本书的例子:
// Copy the text string to a global memory block.
char szText[] = "Hello, world";
HANDLE hData = ::GlobalAlloc (GMEM_MOVEABLE, ::lstrlen (szText) + 1);
LPSTR pData = (LPSTR) ::GlobalLock (hData);
::lstrcpy (pData, szText);
::GlobalUnlock (hData);// Initialize a FORMATETC structure and a STGMEDIUM structure that
// describe the data and the location at which it's stored.
FORMATETC fe;
fe.cfFormat = CF_TEXT; // Clipboard format=CF_TEXT
fe.ptd = NULL; // Target device=Screen
fe.dwAspect = DVASPECT_CONTENT; // Level of detail=Full content
fe.lindex = -1; // Index=Not applicable
fe.tymed = TYMED_HGLOBAL; // Storage medium=MemorySTGMEDIUM stgm;
stgm.tymed = TYMED_HGLOBAL; // Storage medium=Memory
stgm.hGlobal = hData; // Handle to memory block
stgm.pUnkForRelease = NULL; // Use ReleaseStgMedium// Place the data object on the OLE clipboard.
pdo->SetData (&fe, &stgm, FALSE);
::OleSetClipboard (pdo);
pdo->Release ();
//下面是从剪切板读出来
char szText[BUFLEN];
IDataObject* pdo;
STGMEDIUM stgm;FORMATETC fe = {
CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL
};if (SUCCEEDED (::OleGetClipboard (&pdo))) {
if (SUCCEEDED (pdo->GetData (&fe, &stgm) && stgm.hGlobal != NULL)) {
LPCSTR pData = (LPCSTR) ::GlobalLock (stgm.hGlobal);
if (::lstrlen (pData) < BUFLEN)
::lstrcpy (szText, pData);
::GlobalUnlock (stgm.hGlobal);
::ReleaseStgMedium (&stgm);
}
pdo->Release ();
}