我用以下代码在Desktop上写字:
CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
CWindowDC dc(pwndDesktop);
dc.TextOut(100,100,_T("Hello Windows 2000!"));
pwndDesktop->Invalidate();
pwndDesktop->UpdateWindow();
Sleep(2000);
dc.TextOut(100,100,_T("Hello Windows!"));
pwndDesktop->Invalidate();
pwndDesktop->UpdateWindow();
桌面不理会我发送的刷新消息,没有把上次写的字去掉,所以第二次显示字的时候,多了一个"2000",请问如何让Desktop刷新???????
CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
CWindowDC dc(pwndDesktop);
dc.TextOut(100,100,_T("Hello Windows 2000!"));
pwndDesktop->Invalidate();
pwndDesktop->UpdateWindow();
Sleep(2000);
dc.TextOut(100,100,_T("Hello Windows!"));
pwndDesktop->Invalidate();
pwndDesktop->UpdateWindow();
桌面不理会我发送的刷新消息,没有把上次写的字去掉,所以第二次显示字的时候,多了一个"2000",请问如何让Desktop刷新???????
解决方案 »
- 使用UpdateData(true)为什么会运行出错?
- 在数据库中查询一段时间内的数据,SQL语句怎么写?
- 侄子刚出世,请大家帮忙给想个好听的名字 ,谢谢大家了!
- 怎么写代码让一个函数在指定时间内如果没有执行完毕也返回一个值退出?
- PreTranslateMessage的问题,急....
- 简单的问题,请各位多指教
- WS_TABSTOP的问题
- 一个很简单有关于树形结构的问题
- 修改Access数据
- 请教:怎么通过接口接收中文字符串?
- 高分求教:如何在VC程序中获得当前显示器的分辨率是(800*600)还是(1024*768)
- 请问…熟悉c、c++、java想学vc++应当从哪个方面入手!!看什么书!
---------------------------------------
char szTxt[256];
CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
CWindowDC dc(pwndDesktop);
strcpy(szTxt,"Hello Windows 2000!");
dc.TextOut(100,100,szTxt);
pwndDesktop->Invalidate();
pwndDesktop->UpdateWindow();
Sleep(2000);
strcpy(szTxt,"Hello Windows!");
dc.TextOut(100,100,szTxt);
pwndDesktop->Invalidate();
pwndDesktop->UpdateWindow();
if (FindDesktop(hDesktopWnd)==TRUE)
{
InvalidateRect(hDesktopWnd,NULL,TRUE);
//刷新桌面窗口
}
再说如果我用
CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
InvalidateRect(pwndDesktop.GetSafeHwnd(),NULL,TRUE);
来刷新,它也不起作用呀?
InvalidateRect(pwndDesktop.GetSafeHwnd(),NULL,TRUE);
为什么不用
pwndDesktop->InvalidateRect(NULL) ?
我加了pwndDekstop->SetFocus()也没有作用to cooljjyy:
用这两个没有什么区别,我需要的结果是我第二次写字的时候,第一次写的字要被更新掉
CWindowDC dc(pwndDesktop);难道这个dc不是桌面的DC?那请问如何刷新当前背景呢?
CWindowDC dc(pwndDesktop);
这个DC确实不能用来刷新桌面。直接用CWindowDC dc(NULL)应该可以了。另外如果想得到桌面DC就直接用HDC hDC=GetDC(NULL)就可以。