久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2025年度未來銀行科技服務(wù)商TOP100
全世界各行各業(yè)聯(lián)合起來,internet一定要實(shí)現(xiàn)!

可設(shè)置單元格顏色的ClistCtrl類

2004-02-23 eNet&Ciweek

  本文的示例程序界面如圖一所示,移動(dòng)列表項(xiàng)后的示例如圖二所示。


圖一


圖二

  實(shí)現(xiàn)原理
  要實(shí)現(xiàn)表項(xiàng)目的上下移動(dòng),思路其實(shí)很簡(jiǎn)單。首先,我們要得到用戶所選列表項(xiàng)目的索引,這可以通過調(diào)用CListCtrl類的兩個(gè)成員函數(shù)GetFirstSelectedItemPosition( )和GetNextSelectedItem( POSITION& pos )來實(shí)現(xiàn)。
得到用戶所選列表項(xiàng)目的索引后,就好辦了,我們可以通過刪除項(xiàng)目,再添加項(xiàng)目的方法來達(dá)到移動(dòng)列表項(xiàng)目的目的,假定在List Control中用戶選擇了第i+1項(xiàng),由于List Control中項(xiàng)目的索引是從0開始的,那么該項(xiàng)的索引值就是i,先用GetItemText( int nItem, int nSubItem )來得到索引為i的項(xiàng)目的各列文本,然后刪除該項(xiàng),最后在索引為i-1的位置將我們剛才得到的文本作為新項(xiàng)目插進(jìn)來,那么用戶所選列表項(xiàng)就向上移動(dòng)了一位,如果是在索引為i+1的位置插入新項(xiàng)目,那么用戶所選列表項(xiàng)就向下移動(dòng)了一位。

  實(shí)現(xiàn)方法
  新建一個(gè)基于對(duì)話框的工程,命名為L(zhǎng)CDemo,然后在對(duì)話框中按照?qǐng)D一所示添加一個(gè)List Control和兩個(gè)Button,設(shè)置List Control樣式為Report。為L(zhǎng)ist Control關(guān)聯(lián)一個(gè)變量m_listCtrl,并通過ClassWizard為L(zhǎng)ist Control和Button添加Click消息的響應(yīng)函數(shù)。
先在OnInitDialog()函數(shù)中對(duì)控件初始化,就是為L(zhǎng)ist Control添加列,并插入10行列表項(xiàng)目,詳細(xì)內(nèi)容請(qǐng)參考附帶的源代碼,我只想列出主要的代碼片斷。
為對(duì)話框類定義一個(gè)整型變量IndexInFieldList,用它來存儲(chǔ)項(xiàng)目索引,把下面代碼粘貼到CLCDemoDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 函數(shù)中。

void CLCDemoDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult)
{
POSITION pos;
pos = m_listCtrl.GetFirstSelectedItemPosition();

// 得到項(xiàng)目索引
IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos);

*pResult = 0;
}
在向上移動(dòng)操作按鈕的WM_CLICK消息響應(yīng)函數(shù)中寫入下面代碼。 void CLCDemoDlg::OnButtonUp()
{
m_listCtrl.SetFocus();

if (IndexInFieldList == -1)
return;

// 判斷所選項(xiàng)是否位于行首
if (IndexInFieldList == 0)
{
AfxMessageBox("已經(jīng)位于第一行!");
return;
}

// 提取所選列表項(xiàng)各列類容
CString tempField1, tempField2, tempField3;
tempField1 = m_listCtrl.GetItemText(IndexInFieldList, 0);
tempField2 = m_listCtrl.GetItemText(IndexInFieldList, 1);
tempField3 = m_listCtrl.GetItemText(IndexInFieldList, 2);

// 刪除所選列表項(xiàng)
m_listCtrl.DeleteItem(IndexInFieldList);

// 在IndexInFieldList-1位置處插入上面所刪列表項(xiàng)的各列類容
int tempItem;
tempItem = m_listCtrl.InsertItem(IndexInFieldList-1, _T(tempField1));
m_listCtrl.SetItemText(tempItem, 1, _T(tempField2));
m_listCtrl.SetItemText(tempItem, 2, _T(tempField3));
IndexInFieldList--;

// 使得IndexInFieldList-1位置處項(xiàng)目高亮顯示并獲得焦點(diǎn)
UINT flag = LVIS_SELECTED LVIS_FOCUSED;
m_listCtrl.SetItemState(IndexInFieldList, flag, flag);
}
  向下移動(dòng)操作按鈕的響應(yīng)函數(shù)代碼與上面的代碼類似,請(qǐng)參考本文所附源代碼,因?yàn)榇a有相關(guān)中文注釋,這里我就不再贅述了。

  運(yùn)行情況
  具體的運(yùn)行效果請(qǐng)編譯好附帶源代碼后執(zhí)行。
  本示例在Visual C++ 6.0 和 Window XP下編譯運(yùn)行通過。

相關(guān)頻道: eNews

您對(duì)本文或本站有任何意見,請(qǐng)?jiān)谙路教峤?,謝謝!

投稿信箱:tougao@enet16.com