对话框基础复习五 2011.4.29
ListCtrl 控件:(CListCtrl类)
ListCtrl 是列表视图控件,ListBox 与其差不多,ListCtrl 有列标题,其中这个列标题是另外一个Windows通用控件(标题控件),这个控件提供了列排序功能。
ListCtrl有四个style: Large Icons, Small Icons,,List,Report(Details),有三种切换style的方法:
①可以在控件的 properties 里的style 里选择。
②可以通过从 CWnd继承的 ModifyStyle 来设置style,在MSDN 查List-View Window Styles 可以看到所有的ListView的Style。其中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,可指定item的index,就是行号
但是这只能插入首列的本文,要是想为其他列插入文本,就要用下面函数
BOOL SetItemText( int nItem,
int nSubItem, //指定在哪一列
LPTSTR lpszText );
Slider 控件:(CSliderCtrl类)
这是一个滑动条,用来调整一些数据的,很简单的控件。
GetRange/SetRange 设置滚动条的范围
GetPos/SetPos用于查询和设置滑动条的当前值
GetLineSize/SetLineSize按一下右或左箭头时滑块的移动量,默认为1个单位
GetPageSize/SetPageSize 块移动量,指当按下PgUp或PgDown时滑块的移动量
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);//id为1,间隔为 100ms 响应一次