麻煩大家問下,最近在用ListCtrlEx(作業需要,必須用這個類),應該是從ListCtrl派生出來的吧。誰能給個例子,告訴我如何利用ListCtrlEx在串列中確定的某一行某一列上用位圖或者圖示畫出一個影像呢?http://www.cnblogs.com/dlbrant/archive/2009/02/17/1392597.html是網上提供的源代碼。我把源代碼中ListCtrlExDemoDlg.cpp中的OnInitialDialog做了修改,并且添加了函式InsertPic,具體內容大家可以查看下面的代碼,編譯環境是vs2010。但是始侄訓不出影像,是我的代碼有問題么?不知道怎么回事?請大家幫我看一下。謝謝
BOOL CListCtrlExDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_list.ModifyStyle(0, LVS_SINGLESEL|LVS_REPORT|LVS_SHOWSELALWAYS);
m_list.SetExtendedStyle(m_list.GetExtendedStyle() |LVS_EX_FULLROWSELECT );
InsertPic();
return TRUE; // return TRUE unless you set the focus to a control
}
void CListCtrlExDemoDlg::InsertPic()
{
m_list.ModifyStyle(0, LVS_SINGLESEL|LVS_REPORT|LVS_SHOWSELALWAYS);
m_list.SetExtendedStyle(m_list.GetExtendedStyle() );
DWORD dwStyle;
dwStyle = m_list.GetExtendedStyle();
dwStyle = dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES ;
m_list.SetExtendedStyle(dwStyle);
AddImages();
// 向串列視圖控制元件InsertColumn插入3列資料
CRect mRect;
m_list.GetWindowRect(&mRect); // 獲取控制元件矩形區域
int length = mRect.Width();
/*
m_list.InsertColumn(0, _T("用戶頭像"), LVCFMT_CENTER, length / 4, -1);
m_list.InsertColumn(1, _T("用戶名"), LVCFMT_CENTER, length / 4, -1);
m_list.InsertColumn(2, _T("QQ格言"), LVCFMT_CENTER, length / 2, -1);
//*/
//*
m_list.InsertColumn(0,L"用戶頭像",length / 4,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
m_list.InsertColumn(1,L"用戶名",length / 8,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
m_list.InsertColumn(2,L"QQ格言",length / 8,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
//*/
int nRow;
for(int lsn=0;lsn<20;lsn++)
{
CString csn=_T("");
csn.Format(_T("%d"),lsn+1);
LVITEM lvItem={0};
lvItem.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_STATE; // 文字、圖片、狀態
lvItem.iItem = lsn; // 行號(第三行)
lvItem.iImage = 2; // 圖片索引號(第三幅圖片 IDB_BITMAP3)
lvItem.iSubItem = 0; // 子列號
nRow = m_list.InsertItem(&lvItem);
m_list.SetItemText(nRow,1,csn);
m_list.SetItemText(nRow,2,_T("Eastmount制作"));
}
return;
}
uj5u.com熱心網友回復:
你有沒有向ListCtrl添加imageList呢uj5u.com熱心網友回復:
嗯嗯,添加了影像串列。我忘了寫上另外一個函式了uj5u.com熱心網友回復:
嗯嗯,添加了影像串列。我忘了寫上另外一個函式了,寫在下面了。不知道寫法對不對
void CListCtrlExDemoDlg::AddImages()
{
// 載入64*64像素 24位真彩(ILC_COLOR24)圖片
m_imList.Create(14,14,ILC_COLOR24,10,20); // 創建影像序列CImageList物件
CBitmap * pBmp = NULL;
pBmp = new CBitmap();
pBmp->LoadBitmap(IDB_BITMAP1); // 載入位圖IDB_BITMAP1
m_imList.Add(pBmp,RGB(0,0,0));
delete pBmp;
//
pBmp = new CBitmap();
pBmp->LoadBitmap(IDB_BITMAP2);
m_imList.Add(pBmp,RGB(0,0,0));
delete pBmp;
//
pBmp = new CBitmap();
pBmp->LoadBitmap(IDB_BITMAP3);
m_imList.Add(pBmp,RGB(0,0,0));
delete pBmp;
// 設定CImageList影像串列與CListCtrl控制元件關聯 LVSIL_SMALL小圖示串列
m_list.SetImageList(&m_imList,LVSIL_SMALL);
}
uj5u.com熱心網友回復:
我再把代碼重新整理一下,方便高手幫我看一下:麻煩大家問下,最近在用ListCtrlEx(作業需要,必須用這個類),應該是從ListCtrl派生出來的吧。誰能給個例子,告訴我如何利用ListCtrlEx在串列中確定的某一行某一列上用位圖或者圖示畫出一個影像呢?http://www.cnblogs.com/dlbrant/archive/2009/02/17/1392597.html是網上提供的源代碼。我把源代碼中ListCtrlExDemoDlg.cpp中的OnInitialDialog做了修改,并且添加了函式InsertPic,具體內容大家可以查看下面的代碼,編譯環境是vs2010。但是始侄訓不出影像,是我的代碼有問題么?不知道怎么回事?請大家幫我看一下。謝謝
宣告的全域變數:
ListCtrlEx::CListCtrlEx m_list;
CImageList m_imList;
BOOL CListCtrlExDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_list.ModifyStyle(0, LVS_SINGLESEL|LVS_REPORT|LVS_SHOWSELALWAYS);
m_list.SetExtendedStyle(m_list.GetExtendedStyle() |LVS_EX_FULLROWSELECT );
InsertPicAndWord();
return TRUE; // return TRUE unless you set the focus to a control
}
void CListCtrlExDemoDlg::InsertPic()
{
m_list.ModifyStyle(0, LVS_SINGLESEL|LVS_REPORT|LVS_SHOWSELALWAYS);
m_list.SetExtendedStyle(m_list.GetExtendedStyle() );
DWORD dwStyle;
dwStyle = m_list.GetExtendedStyle();
dwStyle = dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES ;
m_list.SetExtendedStyle(dwStyle);
AddImages();
// 向¨°列¢D表à¨a視o¨?圖a?控?件tInsertColumn插?入¨?3列¢D數oy據Y
CRect mRect;
m_list.GetWindowRect(&mRect); // 獲?取¨?控?件t矩?形?區?域?¨°
int length = mRect.Width();
m_list.InsertColumn(0,L"用??戶?ì頭a?¤像?",length / 4,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
m_list.InsertColumn(1,L"用??戶?ì名?",length / 8,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
m_list.InsertColumn(2,L"QQ格?言?",length / 8,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
int nRow;
for(int lsn=0;lsn<20;lsn++)
{
CString csn=_T("");
csn.Format(_T("%d"),lsn+1);
LVITEM lvItem={0};
lvItem.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_STATE; // 文?字á?、?é圖a?片?、?é狀á??態??
lvItem.iItem = lsn; // 行D號?(第ì¨2三¨y行D)
lvItem.iImage = 2; // 圖a?片?索??引°y號?(第ì¨2三¨y幅¤¨′圖a?片? IDB_BITMAP3)
lvItem.iSubItem = 0; // 子á¨?列¢D號?
nRow = m_list.InsertItem(&lvItem);
m_list.SetItemText(nRow,1,csn);
m_list.SetItemText(nRow,2,_T("Eastmount制?作á??"));
}
return;
}
void CListCtrlExDemoDlg::AddImages()
{
// 載?入¨?64*64像?素? 24位?真?彩¨o(ILC_COLOR24)圖a?片?
m_imList.Create(14,14,ILC_COLOR24,10,20); // 創???建?§圖a?像?序¨°列¢DCImageList對?象¨?
CBitmap * pBmp = NULL;
pBmp = new CBitmap();
pBmp->LoadBitmap(IDB_BITMAP1); // 載?入¨?位?圖a?IDB_BITMAP1
m_imList.Add(pBmp,RGB(0,0,0));
delete pBmp;
//
pBmp = new CBitmap();
pBmp->LoadBitmap(IDB_BITMAP2);
m_imList.Add(pBmp,RGB(0,0,0));
delete pBmp;
//
pBmp = new CBitmap();
pBmp->LoadBitmap(IDB_BITMAP3);
m_imList.Add(pBmp,RGB(0,0,0));
delete pBmp;
// 設|¨¨置?CImageList圖a?像?列¢D表à¨a與??CListCtrl控?件t關?聯¢a LVSIL_SMALL小?圖a?標à¨o列¢D表à¨a
m_list.SetImageList(&m_imList,LVSIL_SMALL);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/115430.html
標籤:界面
上一篇:opengl紋理上繪制圖形
