HWND hWnd=GetDesktopWindow(VOID)
HDC hDc=GetDC(hWnd)SelectObject( HDC hdc,HGDIOBJ hgdiobj   // handle to object)
BitBlt()

解决方案 »

  1.   

    我突然在想,把那个 ListView 弄过来 subClass 一下,是不是会比较过瘾啊?~~~
    想想而已,我也没有做过啊...
      

  2.   

    还有活动桌面
    IActiveDesktop 接口方法表 
    方法 功能和用途
     
    AddDesktopItem 添加一个桌面项。 
    AddDesktopItemWithUI 使用某个用户界面添加一个桌面项到活动桌面。 
    AddUrl 添加与指定的URL关联的桌面项。 
    ApplyChange 执行对活动桌面的修改。要使修改生效必须调用这个函数。用于激活或取消活动桌面。 
    GenerateDesktopItemHtml 产生包含给定桌面项的通用HTML页面。 
    GetDesktopItem 获得指定的桌面项。 
    GetDesktopItemByID 获得与给定ID匹配的桌面项。 
    GetDesktopItemBySource 用源URL获得某个桌面项。 
    GetDesktopItemCount 或的桌面项计数。 
    GetDesktopItemOptions 检查活动桌面是否打开或关闭。SHGetSettings 性能更佳。用于激活或取消活动桌面。 
    GetPattern 获取当前使用的式样。 
    GetWallpaper 获取当前使用的墙纸。仅用于活动桌面。标准模式时(桌面关闭),使用SystemParametersInfo。 
    GetWallpaperOptions 获得墙纸选项。仅用于活动桌面。标准模式时(桌面关闭),使用SystemParametersInfo。 
    ModifyDesktopItem 修改桌面项。 
    RemoveDesktopItem 从桌面删除指定的桌面项。 
    SetDesktopItemOptions 打开或关闭活动桌面。 
    SetPattern 设置活动桌面式样。 
    SetWallpaper 设置活动桌面墙纸。仅用于活动桌面。标准模式时(桌面关闭),使用SystemParametersInfo。 
    SetWallpaperOptions 设置墙纸选项。仅用于活动桌面。标准模式时(桌面关闭),使用SystemParametersInfo。 
     
    欢迎大家讨论,欢迎捧场
      

  3.   

    贴一个
    玩转Windows桌面图标 
    大家一定和我一样对Windows的桌面十分不满意吧。那就拿起手术刀(Delphi)给它动动手术。 
    首先要对付的是桌面图标那一个个难看的、带有背景色的文字,不仅看上去别扭,还遮住了漂亮的墙纸,一定要去掉它,把它变成透明。其次就是图标的位置,只会傻傻地呆在屏幕的左边,还得我们一个个去拖,真累!给它来点新花样,Please Follow Me!1、 新建一工程,在 uses 中加入 CommCtrl 单元,窗体上加一个按钮;2、 声明一个取得桌面句柄的函数:function TForm1.GetDesktopHand: THandle;beginResult:=FindWindow('progman',nil);Result:=GetWindow(Result,GW_Child);Result:=GetWindow(Result,GW_Child);end; 
    3、 声明一个设置图标文字颜色的过程:procedure TForm1.SetTextColor(ForeClr, BackClr: TColor);var Hand: THandle;beginHand:= GetDesktopHand;Listview_SetTextColor(Hand,ForeClr); // 设置文字前景色;Listview_SetTextBkColor(Hand,BackClr); // 设置文字背景色,crNone 为透明;Listview_RedrawItems(Hand,0,Listview_GetItemCount(Hand)); // 重画;end; 有了上面的两个方法,你已经可以对桌面动小手术了。下面介绍图标的排列方式。 
    4、 以屏幕的中心为圆点作圆形排列:procedure TForm1.Circle(r: integer); // 形参 r 为半径;vari, Count, CenterX, CenterY, TempR :integer;Hand: THandle;Radian: double;TempRect: TRect;DesktopHeight,DesktopWidth :integer;X, Y : Word;beginHand:=GetDesktopHand;SystemParametersInfo(SPI_GetWorkArea,0,@TempRect,0); // 取得工作区域;DesktopWidth:=TempRect.Right - TempRect.Left; // 工作区的宽(即屏幕的宽);DesktopHeight:= TempRect.Bottom - TempRect.Top; // 工作区的高(即屏幕的高);CenterX:=DesktopWidth div 2; // 取得圆心 X 坐标;CenterY:=DesktopHeight div 2; // 圆心 Y 坐标;if CenterX>CenterY thenTempR:=CenterYelseTempR:=CenterX; if r>TempR then r:=TempR; // 半径不能超过屏幕中心点到四边的最短距离;Count:=Listview_GetItemCount(Hand); // 桌面上图标个数;Radian:=2*3.14159/Count; // 相邻图标间的弧度; for i:=0 to Count-1 dobegin// 第一个图标排在正上方;X:=Integer(CenterX+Trunc(r*Sin(i*Radian))); // 图标的X坐标; Y:=Integer(CenterY+Trunc(r*Cos(i*Radian))); // 图标的Y坐标;SendMessage(Hand,LVM_SetItemPosition,i,MakeLparam(X, y)); // 设置坐标;end;end; 5、 图标右对齐:procedure AlignRight(Rec: Integer); // 形参 Rec 为一个图标所占区域大小,一般为77;var Hand: THandle;h, I, j, DesktopHight, DesktopWidth :integer;TempRect : TRect;BeginHand:=GetDesktopHand;SystemParametersInfo(SPI_GetWorkArea,0,@TempRect,0); // 取得工作区域;DesktopWidth:=TempRect.Right - TempRect.Left; // 工作区的宽(即屏幕的宽);DesktopHeight:= TempRect.Bottom - TempRect.Top; // 工作区的高(即屏幕的高);I:=0; // 图标所排的列数J:=0; For h:=0 to Listview_GetItemCount(Hand)-1 doBeginInc(j);If j*rec>DesktopHeight then // 排完一列;BeginInc(i); // 换列J:=1;End;SendMessage(Hand,LVM_SetItemPosition,h,MakeLparam(DesktopWidth-Rec*(I+1),Rec*(j-1));End; // for 循环结束;End; 6、 在按钮的单击事件中加入代码:procedure TForm1.Button1Click(Sender: TObject);beginSetTextColor(clBlack,crNone); // 设置图标文字颜色;Circle(200); // 把图标排列成半径为200的圆;// AlignRight(77); // 右对齐;end; 编译运行,单击按钮。哇塞!太棒了!你还可发挥你的想象力,对程序稍加改进,把图标排成蛇形、椭圆形、环形等等。以上程序在 Win98+Delphi5下运行通过。 
    /********这里是图标的改动,如果我想将ico换成gif动化呢?谁有好的建议?**************/
      

  4.   

    go on 
    没人参与呀!快来人呀!
      

  5.   

    把 ListView 中图标的链接信息记录下来然后清掉图标,在其中添加若干个显示gif的子窗口,摆到相应的位置上,监测鼠标点击事件...
    我看你干脆把 ListView 的窗口过程给截了算了,他提供的 API 不足以完成这样的灵活性