HDC hcdc=::GetDC(NULL);hdc为什么是空值?

waixinmao 2009-03-04 02:38:32
我想把屏幕截取下来放在一个CBitmap上,可用HDC hcdc=::GetDC(NULL);为什么获得HDC时总是空值呢?请大家指点一下,谢谢啦
...全文
2952 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
看不见的裂痕 2010-09-19
  • 打赏
  • 举报
回复
最近流行掘坟?
码侬 2010-09-19
  • 打赏
  • 举报
回复
狂晕。。。。。。。。。。
码侬 2010-09-19
  • 打赏
  • 举报
回复
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 );
}

Eleven 2010-09-19
  • 打赏
  • 举报
回复
09年的帖子。。。
huangdi7922 2010-09-19
  • 打赏
  • 举报
回复
刷新需要重绘
waixinmao 2009-03-05
  • 打赏
  • 举报
回复
回复8楼,谢谢啦,可是我不知道怎么用GetLastError查错。不过上面的问题不需要解决了,我又有个新问题了,我将屏幕保存到BITMAP,然后将bitmap直接画到statics上,这样做可以吗?我这样做了一下,编译运行都可以通过,但statics上没有图像,这是为什么呢? 不好意思,我是个新手,所以问题比较多也比较不会抓要点问,请您多多指教,谢谢啦
arong1234 2009-03-04
  • 打赏
  • 举报
回复
不要总指望系统主动向你“报”错,我不是叫你去用GetLastError查错么?!
系统返回NULL,已经是“报错”了,你还希望它怎么报呢?

[Quote=引用 4 楼 waixinmao 的回复:]
回复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); //这句话总报错,不知道怎么改…
[/Quote]
davey1984 2009-03-04
  • 打赏
  • 举报
回复
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应该就行了.
青稞 2009-03-04
  • 打赏
  • 举报
回复
同意5楼的说法,先看为什么返回空,再调查其他的。。
菜牛 2009-03-04
  • 打赏
  • 举报
回复
::GetDC(NULL)是获取屏幕DC的,没错;所以返回为空的话,就应该用GetLastError看看错误信息;既然这里错了,下面代码再看就没有意义,何况还有很多错误。
waixinmao 2009-03-04
  • 打赏
  • 举报
回复
回复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;
请您再帮我看看,谢谢啦
waixinmao 2009-03-04
  • 打赏
  • 举报
回复
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;

arong1234 2009-03-04
  • 打赏
  • 举报
回复
GetDC(NULL)表示获得整个屏幕的,1楼不要瞎说:)

获得失败后,你应该用GetLastError看看到底有没有什么错误

可能的原因:你的程序和屏幕在不同desktop上(如密码输入窗口就是这样),系统禁止跨desktop去访问
xxweilw 2009-03-04
  • 打赏
  • 举报
回复
你给它设置了NULL肯定就是空值了,直接GetDC();就可以的

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧