模拟window桌面实现

时间:2021-09-05 01:51:49

正在开发中的游戏有个全屏功能--可以在window桌面背景上运行,就像一些视频播放器在桌面背景上播放一样的,花了个上午整了个Demo放出来留个纪念。

实现功能:显示图标,,双击图标执行相应的程序,右击图标弹出该图标对应得菜单,点击非图标区则弹出桌面菜单。需要完整工程可以点此下载:DesktopWindow.rar。程序效果图如下:

在这个程序里,定义了一个XShellItem的数据结构,保持桌面图标的iten id(ITEMIDLiST),图标以及文字图标。

    struct XShellItem ...{
        ITEMIDLIST
*     itemId;

        
int x;
        
int y;
        
int w;
        
int h;

        
int nameX;
        
int nameY;
        
int nameW;
        
int nameH;

        BOOL hit;

        CStringW name;
        Bitmap
*     icon;
        Bitmap
*     nameIcon;

        XShellItem()
        :
        itemId(NULL),
        x(
0),
        y(
0),
        w(
0),
        h(
0),
        nameX(
0),
        nameY(
0),
        nameW(
0),
        nameH(
0),
        name(L
""),
        hit(FALSE),
        icon(NULL),
        nameIcon(NULL) 
...{
        }

        
~XShellItem() ...{
        }

    }
;

然后定义一个数组CAtlArray<XShellItem> itemArray;用来保存所有桌面图标对象,在InitShellFolder()中对它进行初始化: