16,548
社区成员




CListBoxItem* pListBoxItem = m_listBox.GetListBoxItemData(h);
if ( pListBoxItem == NULL )
{
CListBoxItem* pli = new CListBoxItem;
for (int i = 0; i < 4; i ++)
{
if ( i == 0 )
{
HBITMAP hBmp =(HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP3), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS);
pli->SetSubItem(i, hBmp, 3, 8, TRUE, (h+1) * 10 + i);
}
else if ( i == 1 )
{
CTextInfo* pTI = pli->CreateTextInfo();
TextItem ti;
ti.m_crText = RGB(0, 0, 0);
ti.m_strText = phinfo;
pTI->AddTextItem(ti);
pli->SetSubItem(i, pTI, TRUE, (h+1)* 10 + i);
}
else if ( i == 2 )
{
HBITMAP hBmp =(HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS);
pli->SetSubItem(i, hBmp, 3, 8, TRUE, (h+1) * 10 + i);
}
else if ( i == 3)
{
HBITMAP hBmp =(HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP4), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS);
pli->SetSubItem(i, hBmp, 3, 8, TRUE, (h+1) * 10 + i);
}
}
m_listBox.SetListBoxItemData(h, pli);
这是写入 数据 虽然 有些慢,但是 很成功!然而 我提取 数据的时候LRESULT CKjysDlg::OnLDblClk(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("LDblClk Index : %d ID : %d", (int)wParam, (int)lParam);
TextItem ti;
CListBoxItem* pLi=m_listBox.GetListBoxItemData((int)wParam);
tagListSubItem aa;
CString a;
pLi->GetSubItem((int)lParam, aa);
aa.pTextInfo->GetTextItem(,ti);// 运行到这句 就不能运行了
a=ti.m_strText;
MessageBox(a);
return 0;
}
#pragma once
#include <vector>
typedef struct tagTextItem
{
CString m_strText;
COLORREF m_crText;
}TextItem;
class CTextInfo
{
public:
CTextInfo(void);
~CTextInfo(void);
void InsertTextItem(int nIndex, TextItem textItem);
void AddTextItem(TextItem textItem);
void Clear();
int GetItemCount();
bool GetTextItem(int nIndex, TextItem& textItem);
int GetTextHeight(CDC* pDC, int nWidth);
CSize DrawText(CDC* pDC, int nLeft, int nTop, int nWidth, int nMaxHeight);
private:
std::vector<TextItem> m_vecTextItem;
};
int CTextInfo::GetItemCount()
{
return m_vecTextItem.size();
}
bool CTextInfo::GetTextItem(int nIndex, TextItem& textItem)
{
ASSERT ( nIndex >= 0 && nIndex < m_vecTextItem.size() );
textItem = m_vecTextItem[nIndex];
return true;
}