MFC,非模态对话框中[按钮]按下,获取主窗口的RGB,用gerpixel(),请问:HDC dc=::GetDC(_)怎么取

MFC,非模态对话框中[按钮]按下,获取主窗口的RGB,用gerpixel(),请问:HDC dc=::GetDC(_)怎么取,第1张

你描述有问题。你要获取的是桌面的像素。

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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10149009.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存