请问如何得到桌面的句柄和CDC
1。下面的两个有什么不同
CDC *pDC=CDC::FROMHANDLG(::GETDC(NULL))
CDC *pDC=CDC::FROMHANDLG(::GETDC(hDesk))
hDesk 为桌面的句柄。
2。如何取得桌面的控制权,令系统不再重新绘制窗口,并不能点击桌面的图标?

解决方案 »

  1.   

    桌面句柄用:GetDesktopWindow()获得。
    要做到让系统不再重新绘制窗口,需要hook系统消息wm_paint。
      

  2.   

    GetDC(NULL)得到的是整个屏幕的DC,GETDC(hDesk)得到的桌面窗口的。
      

  3.   

    GetDesktopWindow()->GetSafeHandle()
      

  4.   

    GetDC(NULL)得到的是整个屏幕的DC.桌面句柄用:GetDesktopWindow()获得
      

  5.   

    请问屏幕DC与桌面窗口DC有什么区别,如果作一个类似的打老鼠的游戏,应该用那个?
      

  6.   

    用屏幕DC画的东西是直接画到屏幕上的,而不是画到一个窗口中,也就是说没有哪个窗口能住画出来的东西。而用桌面窗口DC画的东西是画到桌面窗口中的。但是这个桌面窗口其实是看不见。我们通常所说的桌面,是桌面窗口的一个子窗口,它的窗口类是SysListView32(用spy++可以看到,它是Program Manager的子窗口SHELLDLL_DefView的子窗口)。另外桌面窗口还有另一些子窗口,比如任务栏Shell_TrayWnd等。所以,用CDC *pDC=CDC::FROMHANDLG(::GETDC(hDesk))得到DC画出来的东西你是看不见的,因为被SysListView32子窗口挡住了。 
       综上,如果你想你的打老鼠游戏在无论哪个窗口处于前台时都能看到,就用GetDC(NULL),如果只是在所有窗口都被最小化时才能看到,就要用SysListView32的DC(不是GetDesktopWindow()得到的那个窗口).