采用 ATL 修改桌面背景
BOOL SetWallpaper(CString &strPicFile, DWORD dwstyle)
{
HRESULT hr;
CComPtr< IActiveDesktop > pIAD ; // 智能指针, 自动释放
// 创建接口的实例
hr = CoCreateInstance ( CLSID_ActiveDesktop,
NULL,
CLSCTX_INPROC_SERVER,
IID_IActiveDesktop,
(void**)&pIAD
);
if(!SUCCEEDED(hr))
return FALSE;
// 将文件名改为宽字符串,这是IActiveDesktop::SetWallpaper的要求
WCHAR wszWallpaper [MAX_PATH];
LPTSTR lpStr = strPicFile.GetBuffer( strPicFile.GetLength() );
MultiByteToWideChar(CP_ACP,
0,
lpStr,
-1,
wszWallpaper,
MAX_PATH);
strPicFile.ReleaseBuffer();
//设置墙纸
hr = pIAD->SetWallpaper(wszWallpaper, 0);
if(!SUCCEEDED(hr))
return FALSE;
//设置墙纸的样式
WALLPAPEROPT wpo;
wpo.dwSize = sizeof(wpo);
wpo.dwStyle = dwstyle;
hr = pIAD->SetWallpaperOptions(&wpo, 0);
if(!SUCCEEDED(hr))
return FALSE;
//应用墙纸的设置
hr = pIAD->ApplyChanges(AD_APPLY_ALL);
if(!SUCCEEDED(hr))
return FALSE;
return TRUE;
}
ListCtrl 的使用技巧
-----------------------------------------------------------------------
设置 ListCtrl 的 CheckBox 属性
m_ctrllist.SetExtendedStyle( m_ctrllist.GetExtendedStyle()
| LVS_EX_CHECKBOXES // 设置 checkBox 属性
| LVS_EX_FULLROWSELECT // 整行选择属性
| LVS_EX_GRIDLINES // 分割线属性
| LVS_EX_SUBITEMIMAGES ); // 每项可以添加图片属性
操作 checkBox 是否被钩选
ListView_SetCheckState
ListView_GetCheckState
给指定列添加图片
假设现在有 2 列,我们插入一行
注意, 在插入一行时, 必须首先调用 InsertItem 插入第一项,
然后才能调用 SetItem 或 SetItemText
LVITEM Item;
// 插入一行的第 1 列
Item.iItem = 0;
Item.mask = LVIF_TEXT |LVIF_IMAGE;
Item.iSubItem = 0 ;
Item.iImage = 0;
Item.pszText = "flower.jpg" ;
m_ctrllist.InsertItem( &Item );
// 插入一行的第 2 列
Item.mask = LVIF_IMAGE | LVIF_TEXT ;
Item.iSubItem = 1 ;
Item.iImage = 1;
Item.pszText = "100";
if ( FALSE == m_ctrllist.SetItem(&Item) )
{
return FALSE;
}
给ListCtrl 添加图片:
CImageList m_imageListSmall ; // 创建 ImageList 对象
m_imageListSmall.Create(16,16,ILC_COLOR32,1,1); // 指定大小和初始大小
m_imageListSmall.Add( AfxGetApp()->LoadIcon( IDI_ICON1) ); // 添加图片
m_imageListSmall.Add( AfxGetApp()->LoadIcon( IDI_ICON2) );
m_ctrllist.SetImageList( &m_imageListSmall , LVSIL_SMALL ) ; // 绑定一起