青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

(四)列表控制的應(yīng)用技巧示例

  本文給出具體實例演示列表控制及前面的表頭控制和圖像列表的應(yīng)用技巧。步驟如下:

  1、通過“FILE->NEW->PROJECTS->MFC AppWizard(EXE)”建立名為VCLIST的工程,在建立過程中選擇基于對話框(Dialog based)的應(yīng)用;將對話框中的默認(rèn)控件刪除,并將所有對話框?qū)傩灾械腖anguage域設(shè)置為Chinese(P.R.C.),以使應(yīng)用程序支持中文;

  建立兩個圖標(biāo)IDI_GJ和IDI_XS,用來表示圖標(biāo)的選中和非選中狀態(tài),對于每個圖標(biāo)都應(yīng)建立32X32和16X16兩種大小,以保證程序的需要;

  3、在對話框窗口中設(shè)計組合框(Group Box),組合框中設(shè)置四個無線按鈕(Radio)“大圖標(biāo)|小圖標(biāo)|列表|資料”,同時設(shè)置排序、刪除和關(guān)閉三個控制按鈕(Button),并在對話框中設(shè)置大小合適的列表控制(List Ctrl),其對應(yīng)標(biāo)識分別如下:

--------------------------------------------------------------------------------

控制名稱 標(biāo)題名稱 標(biāo)識符號


--------------------------------------------------------------------------------

列表控制 IDC_LISTCTRL

組合框 方式 IDC_STATIC

無線按鈕 大圖標(biāo) IDC_STDICON

小圖標(biāo) IDC_SMLICON

列 表 IDC_LIST

資 料 IDC_REPORT

按鈕 排 序 IDC_SORT

刪 除 IDC_DEL

關(guān) 閉 IDOK


--------------------------------------------------------------------------------

  4、在設(shè)置無線按鈕時,需要注意的是只有大圖標(biāo)的Group屬性為選中狀態(tài),而其它無線按鈕的狀態(tài)均為默認(rèn)值。

  5、選中列表控制控件,選擇“VIEW->ClassWizard->Memory Variables”,并利用IDC_ LISTCTRL引入成員變量,其變量類型為:

  變量名 種類 變量類型

 

 m_ListCtrl Control ClistCtrl

 

  同時利用“MESSAGES MAP”為各無線按鈕和命令按鈕增加控制功能。

  6、然后在包含文件和代碼文件中分別加入如下代碼:

  (1)在VCLISTDlg.h中增加數(shù)據(jù)結(jié)構(gòu)和定義

 

typedef struct tagSPS //定義結(jié)構(gòu)

char szPm[10]; //品名

int Lx; //0-GJ 1-XS

char szSl[10]; //數(shù)量

char szDj[10]; //單價

char szJe[10]; //金額

}
 SPS;

int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort);

 

  (2)在VCLISTDlg.CPP中的起始處增加初始化數(shù)據(jù)和程序定義

//在文件開始處增加數(shù)據(jù)結(jié)構(gòu)初始化

SPS Sps[]
={//信息

{"紅梅",0,"1000","30","30000"},

{"黃梅",0,"1000","29","29000"},

{"綠梅",0,"1000","28","28000"},

{"青梅",0,"1000","27","27000"},

{"白梅",0,"1000","31","31000"},

{"紅梅",1,"1000","30","30000"},

{"黃梅",1,"1000","29","29000"},

{"綠梅",1,"1000","28","28000"},

{"青梅",1,"1000","27","27000"},

{"白梅",1,"1000","31","31000"}}
;

CImageList Cil1,Cil2;
//大小圖像列表

  (3)在程序初始化處增加表頭、圖像和列表控制建立代碼



BOOL CVCLISTDlg::OnInitDialog()

{CDialog::OnInitDialog();

////其它代碼

// TODO: Add extra initialization here此處增加代碼

LV_ITEM lvitem;

LV_COLUMN lvcol;

int i,iPos,iItemNum;

CVCLISTApp 
*pApp=(CVCLISTApp *)AfxGetApp();//創(chuàng)建圖象列表

Cil1.Create(
32,32,TRUE,2,2);

Cil1.Add(pApp
->LoadIcon(IDI_GJ));

Cil1.Add(pApp
->LoadIcon(IDI_XS));

Cil2.Create(
16,16,TRUE,2,2);

Cil2.Add(pApp
->LoadIcon(IDI_GJ));

Cil2.Add(pApp
->LoadIcon(IDI_XS));//設(shè)置圖象列表

m_ListCtrl.SetImageList(
&Cil1,LVSIL_NORMAL);

m_ListCtrl.SetImageList(
&Cil2,LVSIL_SMALL);//向列表控制中添加表列

lvcol.mask
=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;

lvcol.fmt
=LVCFMT_CENTER;//居中

i
=0;

lvcol.pszText
="品 名";

lvcol.iSubItem
=i;

lvcol.cx
=70;

m_ListCtrl.InsertColumn(i
++,&lvcol);

lvcol.pszText
="數(shù) 量";

lvcol.iSubItem
=i;

lvcol.cx
=70;

m_ListCtrl.InsertColumn(i
++,&lvcol);

lvcol.pszText
="單 價";

lvcol.iSubItem
=i;

lvcol.cx
=70;

m_ListCtrl.InsertColumn(i
++,&lvcol);

lvcol.pszText
="金 額";

lvcol.iSubItem
=i;

lvcol.cx
=70;

m_ListCtrl.InsertColumn(i
++,&lvcol);

//向列表控制中添加表項

iItemNum
=sizeof(Sps)/sizeof(SPS);

for(i=0;i<iItemNum;i++){

lvitem.mask
=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;

lvitem.iItem
=i;

lvitem.iSubItem
=0;

lvitem.pszText
=Sps[i].szPm;

lvitem.iImage
=Sps[i].Lx;

lvitem.lParam
=i;

iPos
=m_ListCtrl.InsertItem(&lvitem);//返回表項插入后的索引號

lvitem.mask
=LVIF_TEXT;

lvitem.iItem
=iPos;

lvitem.iSubItem
=1;

lvitem.pszText
=Sps[i].szSl;

m_ListCtrl.SetItem(
&lvitem);

lvitem.iSubItem
=2;

lvitem.pszText
=Sps[i].szDj;

m_ListCtrl.SetItem(
&lvitem);

lvitem.iSubItem
=3;

lvitem.pszText
=Sps[i].szJe;

m_ListCtrl.SetItem(
&lvitem);

}


CheckRadioButton(IDC_STDICON,IDC_REPORT,IDC_STDICON);

return TRUE; // return TRUE unless you set the focus to a control

}

 

  (4)完善列表顯示方式代碼

  在利用Classwizard類向?qū)?chuàng)建各功能按鈕顯示功能函數(shù)之后,必須依次完善這些功能函數(shù)的代碼,這些功能函數(shù)如下:



void CVCLISTDlg::OnStdicon()//設(shè)置大圖標(biāo)顯示方式

// TODO: Add your control notification handler code here

LONG lStyle;

lStyle
=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//獲取當(dāng)前窗口類型

lStyle
&=~LVS_TYPEMASK; //清除顯示方式位

lStyle
|=LVS_ICON; //設(shè)置顯示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);
//設(shè)置窗口類型

}


void CVCLISTDlg::OnSmlicon() //設(shè)置小圖標(biāo)顯示方式

// TODO: Add your control notification handler code here

LONG lStyle;

lStyle
=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//獲取當(dāng)前窗口類型

lStyle
&=~LVS_TYPEMASK; //清除顯示方式位

lStyle
|=LVS_SMALLICON; //設(shè)置顯示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);
//設(shè)置窗口類型

}


void CVCLISTDlg::OnList() //設(shè)置列表顯示方式

// TODO: Add your control notification handler code here

LONG lStyle;

lStyle
=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//獲取當(dāng)前窗口類型

lStyle
&=~LVS_TYPEMASK; //清除顯示方式位

lStyle
|=LVS_LIST; //設(shè)置顯示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);
//設(shè)置窗口類型

}


void CVCLISTDlg::OnReport() //詳細(xì)資料顯示方式

// TODO: Add your control notification handler code here

LONG lStyle;

lStyle
=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//獲取當(dāng)前窗口類型

lStyle
&=~LVS_TYPEMASK; //清除顯示方式位

lStyle
|=LVS_REPORT; //設(shè)置顯示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);
//設(shè)置窗口類型

}

 

 

 (5)刪除功能的實現(xiàn)

  要實現(xiàn)刪除功能,必須取得選中表項的數(shù)和表項總數(shù),并且需要從后向前進行依次刪除,其原因是每個表項被刪除后,其后各表項的索引號均會發(fā)生遞減變化,如果采取從前向后刪除的方法,就會造成無法正常刪除選中的表項,其功能代碼如下:



void CVCLISTDlg::OnDel() //刪除按鈕功能

// TODO: Add your control notification handler code here

int i,iState;

int nItemSelected=m_ListCtrl.GetSelectedCount();//所選表項數(shù)

int nItemCount=m_ListCtrl.GetItemCount();//表項總數(shù)

if(nItemSelected<1return;

for(i=nItemCount-1;i>=0;i--){

iState
=m_ListCtrl.GetItemState(i,LVIS_SELECTED);

if(iState!=0) m_ListCtrl.DeleteItem(i);

}


}

 

 

 (6)排序功能的實現(xiàn)

  列表控制有一個特殊的功能,當(dāng)以詳細(xì)資料方式顯示時,列表頂部的表頭可以當(dāng)作按鈕來使用,這可以通過列表控制創(chuàng)建時的風(fēng)格來控制。當(dāng)鼠標(biāo)點擊列表頭名稱時,列表控制就會向其父窗口發(fā)送一個LNV_COLUMNCLICK消息,利用類導(dǎo)向中列表控制IDC_LISTCTRL對應(yīng)的LNV_COLUMNCLICK消息加入相應(yīng)處理函數(shù),就可將表列按照特定順序進行排列。其函數(shù)使用方法見程序,其中iSort為排序的表列索引號,(PFNLVCOMPARE)CompareFunc為進行具體排序的回調(diào)函數(shù),也就是說,通過鼠標(biāo)點擊表頭實現(xiàn)的排序過程是由第三方開發(fā)的專用排序函數(shù)來實現(xiàn)的,排序函數(shù)只是實現(xiàn)表項的具體比較操作,而整個排序過程是由SortItemS屬性通過不斷調(diào)用這個函數(shù)來實現(xiàn)的。正常的排序過程是升序方式,通過調(diào)換排序函數(shù)中的參數(shù)值,就可實現(xiàn)降序排列,即將PARAM1與PARAM2調(diào)換位置。這個回調(diào)函數(shù)的前兩個參數(shù)為表列中表項的索引號,第三個參數(shù)為排序的表列索引號。



void CVCLISTDlg::OnColumnclickListctrl(NMHDR* pNMHDR, LRESULT* pResult) 

//鼠標(biāo)左鍵單擊表頭處理函數(shù)

NM_LISTVIEW
* pNMListView = (NM_LISTVIEW*)pNMHDR;

// TODO: Add your control notification handler code here

static int iSorted=-1;//排列序號

if (pNMListView->iSubItem==iSorted) return;

iSorted
=pNMListView->iSubItem;

m_ListCtrl.SortItems((PFNLVCOMPARE)CompareFunc,iSorted);

*pResult = 0;

}


//排序時比較表項的回調(diào)函數(shù)

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2,LPARAM lParamSort)

char *text1,*text2;

switch (lParamSort){

case 0L:text1=Sps[lParam1].szPm;

text2
=Sps[lParam2].szPm;break;

case 1L:text1=Sps[lParam1].szSl;

text2
=Sps[lParam2].szSl;break;

case 2L:text1=Sps[lParam1].szDj;

text2
=Sps[lParam2].szDj;break;

case 3L:text1=Sps[lParam1].szJe;

text2
=Sps[lParam2].szJe;break;

}


return (strcmp(text1,text2));//結(jié)果為>0 =0 <0

}

 

 

 同樣,也可以通過專用按鈕來實現(xiàn)排序功能,如本文的排序按鈕對應(yīng)的功能代碼如下:



void CVCLISTDlg::OnSort() 

// TODO: Add your control notification handler code here

m_ListCtrl.SortItems((PFNLVCOMPARE)CompareFunc,
0);}

 

 

 7、列表視的演練技巧

  在使用列表視時,其方法與列表控制基本相同,只不過列表視是在窗口中來實現(xiàn)的而列表控制是在對話框中實現(xiàn),列表視的各種功能是通過菜單來實現(xiàn)的而列表控制是通過按鈕等方式來實現(xiàn)的,列表控制需要在對話框中創(chuàng)建列表控制控件而列表視直接占據(jù)整個窗口,在設(shè)計過程中只要將按鈕和列表控制設(shè)計過程變?yōu)椴藛卧O(shè)計,并注意在功能增加是在類向?qū)е惺峭ㄟ^菜單命令來操作,同時在每個功能函數(shù)前面增加取得列表視引用的命令( CListCtrl& ListCtrl = GetListCtrl()),而其余數(shù)據(jù)結(jié)構(gòu)和代碼均不需要修改,實現(xiàn)起來比較容易。

共3頁。 9 7 1 2 3
Posted on 2005-11-08 18:58 艾凡赫 閱讀(353) 評論(0)  編輯 收藏 引用 所屬分類: MFC技術(shù)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久综合亚州| 亚洲精品乱码| 国产精品99久久久久久人| 久久高清一区| 亚洲在线观看视频| 亚洲欧美日韩国产| 亚洲免费影院| 久久国产欧美日韩精品| 亚洲视屏在线播放| 亚洲免费视频网站| 亚洲欧美激情在线视频| 正在播放日韩| 亚洲欧美在线免费观看| 午夜一区二区三区在线观看| 亚洲欧美日韩另类精品一区二区三区| av不卡在线看| 亚洲欧美激情四射在线日 | 午夜欧美理论片| 亚洲综合视频1区| 久久蜜桃av一区精品变态类天堂| 久久亚洲精品欧美| 欧美日韩91| 好看的亚洲午夜视频在线| 在线视频欧美精品| 久久久久久久999| 欧美视频在线观看视频极品| 国产精品视频午夜| 亚洲欧洲一区二区三区久久| 亚洲一区综合| 亚洲国产高清视频| 亚洲视频在线观看三级| 久久国产主播| 国产欧美一区二区精品婷婷| 一区在线免费| 久久人人爽人人| 亚洲欧美中文日韩v在线观看| 香蕉免费一区二区三区在线观看| 免费看黄裸体一级大秀欧美| 国产精品视频1区| 亚洲一区二区三区在线看| 最新日韩av| 久久精品一区二区三区中文字幕 | 国产精品视频最多的网站| 日韩视频一区二区| 91久久精品日日躁夜夜躁国产| 欧美一级片在线播放| 国产精品免费看| 欧美一区二区成人| 欧美一级视频免费在线观看| 国产精品视频专区| 久久全球大尺度高清视频| 久久激情网站| 亚洲最新视频在线| 亚洲一区网站| 亚洲国产视频一区| 女人天堂亚洲aⅴ在线观看| 美女久久网站| 国产精品久久777777毛茸茸| 欧美日韩午夜在线| 国产一区二区久久久| 亚洲午夜视频在线观看| 亚洲黄色一区| 欧美黄在线观看| 亚洲激情视频在线观看| 欧美激情亚洲激情| 女生裸体视频一区二区三区| 1204国产成人精品视频| 久久久久久欧美| 欧美综合激情网| 国产一区视频观看| 久久这里有精品15一区二区三区| 欧美一级在线播放| 激情国产一区| 欧美大胆a视频| 欧美精品二区三区四区免费看视频| 91久久精品一区| 亚洲观看高清完整版在线观看| 玖玖玖国产精品| 亚洲国产小视频| 亚洲片在线观看| 欧美精品免费视频| 亚洲素人一区二区| 亚洲无限乱码一二三四麻| 国产嫩草影院久久久久| 久久精品国产第一区二区三区最新章节| 亚洲亚洲精品在线观看| 国产欧美精品日韩精品| 可以看av的网站久久看| 欧美顶级大胆免费视频| 亚洲女同精品视频| 久久久另类综合| 日韩亚洲精品在线| 亚洲一区二区免费| 亚洲福利专区| 一区二区三区四区国产精品| 国产日韩在线视频| 欧美激情视频一区二区三区不卡| 欧美日韩视频不卡| 久久久一二三| 欧美日韩中国免费专区在线看| 欧美亚洲免费在线| 免费黄网站欧美| 亚洲欧美国产高清va在线播| 久久精品综合网| 日韩亚洲在线观看| 久久不射网站| 亚洲欧美日本国产专区一区| 久久久久亚洲综合| 久久丁香综合五月国产三级网站| 欧美黑人国产人伦爽爽爽| 欧美呦呦网站| 欧美日韩在线精品| 亚洲成人直播| 国产一区二区三区四区老人| 亚洲精品网站在线播放gif| 好吊日精品视频| 亚洲美女中出| 亚洲一区二区3| 久久久久久久久久看片| 亚洲欧美国产77777| 欧美国产日本韩| 玖玖在线精品| 国内精品国产成人| 亚洲欧美激情视频在线观看一区二区三区| 亚洲区第一页| 免费国产一区二区| 亚洲成人自拍视频| 亚洲高清中文字幕| 久久裸体艺术| 麻豆精品一区二区综合av| 国产精品麻豆欧美日韩ww| 亚洲美女淫视频| 亚洲人成亚洲人成在线观看 | 亚洲一级一区| 亚洲午夜免费视频| 欧美日韩日韩| 中国成人在线视频| 亚洲一区制服诱惑| 国产精品日韩专区| 亚洲免费一在线| 久久精品国产免费观看| 国产伦精品一区| 性欧美大战久久久久久久免费观看 | 亚洲欧美资源在线| 国产精品久久久久久久久久免费 | 欧美高清在线一区二区| 亚洲第一色中文字幕| 亚洲精品系列| 欧美三级中文字幕在线观看| 一区二区激情小说| 午夜精品视频一区| 国产欧美日韩视频一区二区三区| 亚洲小视频在线观看| 久久精品中文| 亚洲国产精选| 欧美精品1区| 亚洲一区二区三区777| 欧美自拍偷拍| 亚洲第一级黄色片| 欧美国产精品v| 亚洲精品久久嫩草网站秘色| 亚洲性感美女99在线| 国产精品天天摸av网| 久久久久久婷| 日韩天堂在线视频| 久久久久久久91| 9i看片成人免费高清| 国产欧美 在线欧美| 久久夜色撩人精品| 夜色激情一区二区| 久久久综合免费视频| 亚洲美女av网站| 欧美一级久久久| 欧美在线视频播放| 久久大逼视频| 亚洲区欧美区| 午夜免费电影一区在线观看| 国内外成人在线视频| 欧美成人精品1314www| 在线午夜精品自拍| 男人的天堂亚洲在线| 亚洲欧美成人网| 在线观看国产精品淫| 国产精品国产| 欧美成黄导航| 欧美一区二区在线免费观看 | 9l视频自拍蝌蚪9l视频成人| 国产毛片一区| 欧美日韩亚洲综合在线| 老司机67194精品线观看| 国产精品99久久久久久宅男| 欧美成年人视频网站| 欧美综合第一页| 亚洲视频在线观看一区| 亚洲精品人人| 亚洲国产精品高清久久久| 国产日韩欧美综合| 欧美午夜不卡在线观看免费 | 亚洲欧美日本伦理| 一区二区欧美视频|