HDC hcdc=::GetDC(NULL);hdc为什么是空值? 我想把屏幕截取下来放在一个CBitmap上,可用HDC hcdc=::GetDC(NULL);为什么获得HDC时总是空值呢?请大家指点一下,谢谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你给它设置了NULL肯定就是空值了,直接GetDC();就可以的 GetDC(NULL)表示获得整个屏幕的,1楼不要瞎说:)获得失败后,你应该用GetLastError看看到底有没有什么错误可能的原因:你的程序和屏幕在不同desktop上(如密码输入窗口就是这样),系统禁止跨desktop去访问 GetDC()获得是CDC类型,我这样已经试过了,cdc *pdc=getDC();hdc hcdc=pdc->GetSafeHdc();这样得到的hdc仍然是空值,不知道是为什么 另外请帮我看看下面这段代码在哪出问题了 HDC hcdc=::GetDC(NULL);//获得屏幕DC HDC MDC=CreateCompatibleDC(hcdc); //获得兼容DC HBITMAP Bhandle=CreateCompatibleBitmap(hcdc,RectWidth,RectHeight); //Bhandle=SelectObject(MDC,Bhandle); //这句话总报错,不知道怎么改; SelectObject(MDC,Bhandle); // BitBlt(MDC,0,0,RectWidth,RectHeight,hcdc,100,100,SRCCOPY); CBitmap *oBmp=CBitmap::FromHandle(Bhandle);//保存到了一CBitmap return oBmp; 回复2楼,HDC hcdc=::GetDC(NULL);运行后只是空值,但并不报错,只是hcdc的各个变量值都是无法计算的,运行如下代码,都可以通过,只是最后返回的OBMP是空值 HDC hcdc=::GetDC(NULL);//获得屏幕DC HDC MDC=CreateCompatibleDC(hcdc); //获得兼容DC HBITMAP Bhandle=CreateCompatibleBitmap(hcdc,RectWidth,RectHeight); //Bhandle=SelectObject(MDC,Bhandle); //这句话总报错,不知道怎么改; SelectObject(MDC,Bhandle); // BitBlt(MDC,0,0,RectWidth,RectHeight,hcdc,100,100,SRCCOPY); CBitmap *oBmp=CBitmap::FromHandle(Bhandle);//保存到了一CBitmap return oBmp; 请您再帮我看看,谢谢啦 ::GetDC(NULL)是获取屏幕DC的,没错;所以返回为空的话,就应该用GetLastError看看错误信息;既然这里错了,下面代码再看就没有意义,何况还有很多错误。 HDC hcdc=::GetDC(NULL);//获得屏幕DC HDC MDC=CreateCompatibleDC(hcdc); //获得兼容DC HBITMAP hbmpOld; HBITMAP Bhandle=CreateCompatibleBitmap(hcdc,RectWidth,RectHeight); hbmpOld = SelectObject(MDC,Bhandle); SelectObject(MDC,Bhandle); // 你把兼容DC里之前的东西存入另外一个HBITMAP应该就行了. 不要总指望系统主动向你“报”错,我不是叫你去用GetLastError查错么?!系统返回NULL,已经是“报错”了,你还希望它怎么报呢? 回复8楼,谢谢啦,可是我不知道怎么用GetLastError查错。不过上面的问题不需要解决了,我又有个新问题了,我将屏幕保存到BITMAP,然后将bitmap直接画到statics上,这样做可以吗?我这样做了一下,编译运行都可以通过,但statics上没有图像,这是为什么呢? 不好意思,我是个新手,所以问题比较多也比较不会抓要点问,请您多多指教,谢谢啦 HDC hcdc=::GetDC(NULL);//获得屏幕DC if (hcdc==NULL){LPVOID lpMsgBuf;FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, // Default language (LPTSTR) &lpMsgBuf, 0, NULL );MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );} GPRS通讯问题(急) include问题 COM 方法参数(char* str)编译出现以下错误,怎么回事?? 讨论:VC++ 6.0过时了吗? 高手留步,高分! HTTP的简单问题,在线放分! 100分的问题 支持MFC的控制台程序中多线程的问题 Win7下为什么RAW Socket不能捕获发给自己的包? 如何看出.exe所包含的.dll中的函数的参数? 有关Edit控件的问题 如何区分中文的前后字节
cdc *pdc=getDC();
hdc hcdc=pdc->GetSafeHdc();
这样得到的hdc仍然是空值,不知道是为什么
另外请帮我看看下面这段代码在哪出问题了 HDC hcdc=::GetDC(NULL);//获得屏幕DC
HDC MDC=CreateCompatibleDC(hcdc); //获得兼容DC
HBITMAP Bhandle=CreateCompatibleBitmap(hcdc,RectWidth,RectHeight);
//Bhandle=SelectObject(MDC,Bhandle); //这句话总报错,不知道怎么改;
SelectObject(MDC,Bhandle); //
BitBlt(MDC,0,0,RectWidth,RectHeight,hcdc,100,100,SRCCOPY);
CBitmap *oBmp=CBitmap::FromHandle(Bhandle);//保存到了一CBitmap
return oBmp;
HDC hcdc=::GetDC(NULL);//获得屏幕DC
HDC MDC=CreateCompatibleDC(hcdc); //获得兼容DC
HBITMAP Bhandle=CreateCompatibleBitmap(hcdc,RectWidth,RectHeight);
//Bhandle=SelectObject(MDC,Bhandle); //这句话总报错,不知道怎么改;
SelectObject(MDC,Bhandle); //
BitBlt(MDC,0,0,RectWidth,RectHeight,hcdc,100,100,SRCCOPY);
CBitmap *oBmp=CBitmap::FromHandle(Bhandle);//保存到了一CBitmap
return oBmp;
请您再帮我看看,谢谢啦
HDC MDC=CreateCompatibleDC(hcdc); //获得兼容DC
HBITMAP hbmpOld;
HBITMAP Bhandle=CreateCompatibleBitmap(hcdc,RectWidth,RectHeight);
hbmpOld = SelectObject(MDC,Bhandle);
SelectObject(MDC,Bhandle); // 你把兼容DC里之前的东西存入另外一个HBITMAP应该就行了.
系统返回NULL,已经是“报错”了,你还希望它怎么报呢?
if (hcdc==NULL)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0, // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
}