![]()
你描述有问题。你要获取的是桌面的像素。
CWnd desk = GetDesktopWindow();
CDC pdc = desk->GetDC();
COLORREF cr = pdc->GetPixel(30,30);
{ }
desk->ReleaseDC(pdc); //估计你是忘了这句
TextOut输出的东西,你是不可能在窗口显示后再获取文字的,因为输出后的是,不是文本。
因此,如果TextOut的东西需要记录,你只能在输出前记录好输出的文本和位置,而不是在输出后再试图去获取。
如果是一个类对象的话,就不需要释放,如果是其他的,直接调用API函数就需要ReleaseDC ,因为对象的话,MFC调用析构的时候帮你释放了,所以不需要,但是如果是对象指针,就是动态new出来的要调用delete掉指针,这样才能析构。。
jpg显示的步骤:
1。打开控件的绘图DC。
2。使用OleLoadPicture函数读取jpg图像到内存中。(导入olepro32dll)
3。向DC上绘制图像
示例如下:
CDC pDC = GetDlgItem(IDC_STATIC_IMG)->GetDC(); //获取控件DC
HDC hDC = (HDC)pDC;
HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);//从指定的路径szImagePath中读取文件句柄
DWORD dwFileSize=GetFileSize(hFile, NULL); //获得文件的大小,用来分配全局内存
HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给分配全局内存
void pImageMemory=GlobalLock(hImageMemory); //锁定内存
DWORD dwReadedSize; //保存实际读取的文件大小
ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //读取到全局内存当中
GlobalUnlock(hImageMemory); //解锁内存
CloseHandle(hFile); //关闭文件句柄
IStream pIStream;//创建一个IStream接口指针,用来保存流
IPicture pIPicture;//创建一个IPicture接口指针,表示对象
CreateStreamOnHGlobal(hImageMemory, false, &pIStream); //用全局内存初使化IStream接口指针
OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID)&(pIPicture));//用OleLoadPicture获得IPicture接口指针
//得到IPicture COM接口对象后,你就可以进行获得信息、显示等 *** 作
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pIPicture->get_Width(&hmWidth); //用接口方法获得的宽和高
pIPicture->get_Height(&hmHeight);
pIPicture->Render(hDC,0,0,100,100,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上绘出
GlobalFree(hImageMemory); //释放全局内存
pIStream->Release(); //释放pIStream
pIPicture->Release(); //释放pIPicture
ReleaseDC(pDC);
CFile file("D:\\ttxt", CFile::modeRead);
int nlen = fileGetLength();
char buf;
buf = new char[nlen+1];
memset(buf, 0, nlen+1);
fileRead(buf, nlen);
fileClose();
GetDC()->TextOut(0,0,buf);
此段代码经测试无乱码。
纠正一下你的代码:
1没有清零,导致字符串没有结束字符'\0';
2str=pBuf[i] 你这句只能得到其中的一个字符,应该用 str += pBuf[i] 吧;
3如果文件很大,就要考虑分段读取;
4目前的代码只能显示出单行,对于文件里的回车并没有专门处理。
再接再励,代码就是一点点堆起来的,跟学英语、说话一样~
以上就是关于MFC,非模态对话框中[按钮]按下,获取主窗口的RGB,用gerpixel(),请问:HDC dc=::GetDC(_)怎么取全部的内容,包括:MFC,非模态对话框中[按钮]按下,获取主窗口的RGB,用gerpixel(),请问:HDC dc=::GetDC(_)怎么取、MFC 如何获取一个窗口中绘制的数据、MFC调用GetDC()函数后哪些情况下需要释放DC等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)