MFC对话框程序基础复习005

 

对话框基础复习五 2011.4.29


ListCtrl 控件(CListCtrl)

ListCtrl 是列表视图控件,ListBox 与其差不多,ListCtrl 有列标题,其中这个列标题是另外一个Windows通用控件(标题控件),这个控件提供了列排序功能。

ListCtrl有四个style: Large Icons, Small Icons,ListReport(Details),有种切换style的方法:

①可以在控件的 properties 里的style 里选择。

②可以通过从 CWnd继承的 ModifyStyle 来设置style,在MSDN List-View Window  Styles 可以看到所有的ListViewStyle。其中LVS_TYPEMASK 指获得控件当前的 WindowsStyle

③可以在CListCtrl的派生类中,override PreCreateWindow 函数,在其中改变传入参数 cs.style ,就可以改变其控件的style


以前一直疏忽了一个问题,在CListCtrl派生出一个类来,不知道怎么用,之前在Dialog用鼠标画的控件还是基类的。这是一个错误的想法,没有了解实质,在关联控制变量的时候选派生类就可以生成派生类的控件了,之前画出控件只是一个能看的窗口罢了


ListCtrl控件里的列操作:

较起其他控件复杂,添加列有两个重载版本:

int InsertColumn( int nCol, const LVCOLUMN* pColumn );

int InsertColumn( int nCol, 

LPCTSTR lpszColumnHeading, 

int nFormat = LVCFMT_LEFT, 

int nWidth = -1, 

int nSubItem = -1 );

其中,第一种方法要用到一个 结构体 LV_COLUMN


例子

LV_COLUMN lvc;

::ZeroMemory(&lvc, sizeof(lvc));

lvc.mask = LVCF_TEXT | LVCF_FMT;

lvc.fmt = LVCFMT_CENTER;  //对齐方式

lvc.pszText = _T("第一列");

CClientDC dc(this);

CSize size = dc.GetTextExtent(lvc.pszText); //获取文本的长度

lvc.cx = size.cx;

m_listCtrl.InsertColumn(0, &lvc);


VC6.0上测试 lvc.cx设置对于列宽度其没有效果,至今想不出原因,不过还有一个办法可以设置列的宽度:

m_listCtrl.SetColumnWidth(0, 48);

在这里的第二个参数可以是 LVSCW_AUTOSIZE_USEHEADER使得该列按标题设置宽度,很实用。

CHeaderCtrl *pHeader = list.GetHeaderCtrl(); //获取标题控件

pHeader->GetItemCount() 可以获取到标题的数目,方便遍历标题

list.GetColumnWidth 和 list.SetColumnWidth 可以获取和设置列标题框长度


技巧CWnd 类函数

      list.SetRedraw(FALSE); //暂时设置控件不会重绘

现在可以做列标题的调整,一会再恢复重绘,这样就不会每次设置都重绘一次。

  list.SetRedraw(TRUE); //控件恢复重绘

      list.Invalidate();  //控件当前视图失效,等下次重绘


插入Item

InsertItem 插入Item,可指定itemindex,就是行号

但是这只能插入首列的本文,要是想为其他列插入文本,就要用下面函数

BOOL SetItemText( int nItem, 

int nSubItem, //指定在哪一列

LPTSTR lpszText ); 


Slider 控件(CSliderCtrl)

这是一个滑动条,用来调整一些数据的,很简单的控件。

GetRange/SetRange 设置滚动条的范围

GetPos/SetPos用于查询和设置滑动条的当前值

GetLineSize/SetLineSize按一下右或左箭头时滑块的移动量,默认为1个单位

GetPageSize/SetPageSize 块移动量,指当按下PgUpPgDown时滑块的移动量

SetTicFreq 用于设置滑动条刻度的频度。默认为一个单位

SetTic 用于在指定的位置设置刻度,Windows默认的刻度是均匀的

使用刻度要在property中把 Tick Mask 选中

通过响应 NM_CUSTOMDRAW 来获取Slider控件的滑动变化,再在消息映射函数中用GetPos就行了


ProgressCtrl 控件(CProgressCtrl类,vs版本以上出现)

GetRange/SetRange/SetRange32 设置进度条条的范围

GetPos/SetPos用于查询和设置进度条的当前值

SetStep 用于设置进度条的步长,默认为1

StepIt 让进度条走一步


定时器

SetTimer/KillTimer 设置/撤销一个定时器,响应为WM_TIMER消息

SetTimer(1, 100, NULL);//id1,间隔为 100ms 响应一次

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值