找回密码
 加入网盟
分割线
官方精品推荐
以前写过使用Au3排列桌面图标的代码,感觉蛮有意思的。今天逛论坛的时候一不小心看到了一个C/C++操作桌面图标的代码,原理逻辑都是一样的,获得桌面SysListView32的句柄,利用该句柄对控件上的图标进行坐标的调整。排列后的效果及代码如下:


  1. #include <Windows.h>
  2. #include <commctrl.h>
  3. #include <cmath>

  4. void OnSetDeskIcon();

  5. int APIENTRY WinMain(
  6.                                          HINSTANCE hInstance,
  7.                                          HINSTANCE hPrevInstance,
  8.                                          LPSTR lpCmdLine,
  9.                                          int nCmdShow
  10.                                          )
  11. {
  12.         OnSetDeskIcon();
  13. }

  14. void OnSetDeskIcon()
  15. {   
  16.         HWND  hwndParent = ::FindWindow( "Progman", "Program Manager" );
  17.         HWND  hwndSHELLDLL_DefView = ::FindWindowEx( hwndParent, NULL, "SHELLDLL_DefView", NULL );
  18.         HWND  hwndSysListView32 = ::FindWindowEx( hwndSHELLDLL_DefView, NULL, "SysListView32", "FolderView" );

  19.         int Nm = ListView_GetItemCount( hwndSysListView32 );

  20.         int sNm = 0;
  21.         if( Nm >= 10 )
  22.         {
  23.                 sNm = 10;
  24.         }else{
  25.                 sNm = Nm;
  26.         }

  27.         for( int i = 0; i < sNm; i++ )
  28.         {
  29.                 int x = 400 + 150*cos( i*36*3.1415926/180 );
  30.                 int y = 400 + 150*sin( i*36*3.1415926/180 );

  31.                 ::SendMessage( hwndSysListView32,   LVM_SETITEMPOSITION, i,   MAKELPARAM( x,y));
  32.         }
  33.         ListView_RedrawItems(hwndSysListView32, 0, ListView_GetItemCount(hwndSysListView32) - 1);
  34.         ::UpdateWindow(hwndSysListView32);
  35. }
复制代码


转自邓佳的博客
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 加入网盟
关闭

华夏网盟推荐 上一条 /1 下一条