CListCtrlEx是基于CListCtrl,有关代码如下 void CListCtrlEx::AddItem(short i, char* name, char* text)
{
LVITEM lvi; lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
lvi.iItem = GetItemCount();
lvi.iImage = i;
lvi.iSubItem = 0;
lvi.pszText = name;
lvi.cchTextMax = 64;
lvi.lParam = 0;
InsertItem(&lvi); lvi.mask = LVIF_TEXT;
lvi.pszText = text;
lvi.cchTextMax = 32;
lvi.iSubItem = 1;
SetItem(&lvi);
}然后在dlgBar对话框中放入列表控件m_olist。并在CMainFrame中调用m_olist代码如下:
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)
{
CImageList m_imgList;
m_imgList.Create ( 48, 48, ILC_COLOR16 | ILC_MASK, 4, 1 );
m_imgList.Add (HICON(::LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR )));
this->dlgBar.m_olist.SetImageList ( &m_imgList, LVSIL_SMALL );
CString* pStr = (CString*)wParam; //用来接收用户名的消息
this->dlgBar.m_olist.AddItem((short)lParam, pStr->GetBuffer(0), NULL);
pStr->ReleaseBuffer(); }
运行程序,结果图标没显示,只空出显示图标的位置。请高手指点。谢谢!!
{
LVITEM lvi; lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
lvi.iItem = GetItemCount();
lvi.iImage = i;
lvi.iSubItem = 0;
lvi.pszText = name;
lvi.cchTextMax = 64;
lvi.lParam = 0;
InsertItem(&lvi); lvi.mask = LVIF_TEXT;
lvi.pszText = text;
lvi.cchTextMax = 32;
lvi.iSubItem = 1;
SetItem(&lvi);
}然后在dlgBar对话框中放入列表控件m_olist。并在CMainFrame中调用m_olist代码如下:
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)
{
CImageList m_imgList;
m_imgList.Create ( 48, 48, ILC_COLOR16 | ILC_MASK, 4, 1 );
m_imgList.Add (HICON(::LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR )));
this->dlgBar.m_olist.SetImageList ( &m_imgList, LVSIL_SMALL );
CString* pStr = (CString*)wParam; //用来接收用户名的消息
this->dlgBar.m_olist.AddItem((short)lParam, pStr->GetBuffer(0), NULL);
pStr->ReleaseBuffer(); }
运行程序,结果图标没显示,只空出显示图标的位置。请高手指点。谢谢!!
解决方案 »
- 错误: 未能完成操作。不支持此接口(VS2005/扩展性/共享的外接程序/MyAddin1/MyAddin1Setup)
- 如何控制一个应用程序让它只启动一个
- 国王和电烤箱 zt
- 怎样在程序中为机器设置ip地址?
- 关于发消息的简单问题
- 谁有T.120协议的中文资料阿, 分不够可以再加
- 如何向注册表写入REG_DWORD类型的值,谢谢指点!
- 到底什么错误!missing storage-class or type specifiers
- 当窗口内容被破坏时,如何重画?
- 怎样才能获得一个 lib 或 dll 中的函数声明?
- 为什么malloc会失败,处理内存不足的原因之外
- 不弹出打印对话框,直接打印文档
m_imgList.Create ( 48, 48, ILC_COLOR16 | ILC_MASK, 4, 1 );
m_imgList.Add (HICON(::LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR )));
===CImageList m_imgList不能是临时变量。也就是说,它的生命期不能比m_olist短。因为m_olist只是记录这个m_imgList的一个引用类型,没有进行复制。如果你的m_imgList先无效,自然就不行了。因此,把m_imgList定义为成员变量是最合理的方式。
这种局部变量,函数一退出就 Over 了;
改成 CMainFrame 的成员变量即可。
定义出你的成员变量,而不是局部变量,不然局部变量析构了,你的图标就没了
{
CImageList m_imgList;
m_imgList.Create ( 48, 48, ILC_COLOR16 | ILC_MASK, 4, 1 );
m_imgList.Add (HICON(::LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR )));
this->dlgBar.m_olist.SetImageList ( &m_imgList, LVSIL_SMALL );
CString* pStr = (CString*)wParam; //用来接收用户名的消息
this->dlgBar.m_olist.AddItem((short)lParam, pStr->GetBuffer(0), NULL);
pStr->ReleaseBuffer(); }
======
首先将CImageList m_imgList放到CMainFrame的头文件中定义;
其次将
m_imgList.Create ( 48, 48, ILC_COLOR16 | ILC_MASK, 4, 1 );
m_imgList.Add (HICON(::LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR )));
this->dlgBar.m_olist.SetImageList ( &m_imgList, LVSIL_SMALL );
放到CMainFrame的OnCreate函数中,可以放到函数的末尾,保证对象都已经创建完成。
本函数中只保留最后三句。
m_imgList.Add (HICON(::LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR )));
不要这么写。把LoadImage单独写成一行。获取返回值,看一下有没有Load成功啊。你得学会调试啊。靠我们来猜帮你解决问题么