如何直接在屏幕上画图

windcbf 2001-10-27 10:14:50
请问如何在屏幕直接画图,

用GetDesktopWindow()再
GetDC好像没用啊
...全文
747 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
111222 2001-10-28
  • 打赏
  • 举报
回复
HDC hdc = ::GetDC(0);
用hdc画画,比如::TextOut(hdc......

画完之后任何一个鼠标动作都会导致窗口重画
所以你需要把桌面窗口锁住,禁止它重画

//画画之后琐住桌面
::LockWindowUpdate(::GetDesktopWindow());
//下面操作解锁
::LockWindowUpdate(NULL);
//下面操作刷新整个桌面
::InvalidateRect(0,NULL,0);
goodmyluck 2001-10-28
  • 打赏
  • 举报
回复
各位老兄:有这么复杂吗??
CDC *pDC = CDC::FromHandle(::GetDC(NULL));
wwtmw 2001-10-28
  • 打赏
  • 举报
回复
mark
bladeboy 2001-10-28
  • 打赏
  • 举报
回复
没用的GetDeskTopWindow(),因为上面有时候已经有很多看上去透明的窗口了

以前在VB下面,我试过GetDC(0);得到的就是屏幕的DC,然后在上面LineTo()什么的,
确实可以的
DoItFreely 2001-10-28
  • 打赏
  • 举报
回复
画完以后在强制整个屏幕有效不行吗?
RECT rc;
HWND hWnd = GetDesktopWindow();
GetClientRect(hWnd,&rd);
//drawing here
ValidateRect(hWnd,&rc);

或者干脆SubClass桌面的窗口,在CallWindowProc调用原来的窗口函数以后再自己“添足”噢!
Julienjut 2001-10-28
  • 打赏
  • 举报
回复
在屏幕上作图有这么复杂吗
vickowang 2001-10-27
  • 打赏
  • 举报
回复
up
ray2_ls 2001-10-27
  • 打赏
  • 举报
回复
不过偶同意Happy_Wawe(十一少)的观点
任何刷新都会导致屏幕重画
ray2_ls 2001-10-27
  • 打赏
  • 举报
回复
CDC SCreenDC;
SCreenDC.CreateDC("DISPLAY",NULL,NULL,NULL); //创建屏幕的设备上下文
CDC memDC;//定义一个兼容DC
memDC.CreateCompatibleDC(&SCreenDC);//创建DC
CBitmap bmpDraw;
bmpDraw.LoadBitmap(IDB_BITMAP1);//装入DDB
CBitmap* pbmpOld=memDC.SelectObject(&bmpDraw);//保存原有DDB,并选入新DDB入DC
pDC->BitBlt(0,0,32,32,&memDC,0,0,SRCCOPY); //现在可以随心所欲的画了
memDC.SelectObject(&bmpOld);
Happy_Wawe 2001-10-27
  • 打赏
  • 举报
回复
实际上,它是画了的,但是当你的函数结束以后, DesktopWindow会自动重画。就把你画的
摸掉了。
不信你可以在你的函数里多画一些东西,中间用sleep。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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