在CView中应用的MSFlexGrid控件如何响应滚轮消息,
在初始化函数CMyView::OnInitialUpdate()中对表格进行初始化,m_gridMyForm是关联MSFlexGrid的控件变量
void CFlexgridWheelView::OnInitialUpdate()
{
CView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//获取客户区矩形
CRect rcBounds;
GetClientRect(&rcBounds);
//设定FlexGrid控件在对话框中的位置和大小
m_gridMyForm.SetWindowPos(&wndTop,rcBounds.left,rcBounds.top,rcBounds.Width(),rcBounds.Height(),NULL);
//设定FlexGrid控件的风格
m_gridMyForm.SetBackColorBkg(GetSysColor(COLOR_3DSHADOW));
m_gridMyForm.SetColWidth(1,1750);
m_gridMyForm.SetColWidth(2,1750);
m_gridMyForm.SetColWidth(3,1750);
//初始化内容
m_gridMyForm.Clear();
m_gridMyForm.SetRows(40);
m_gridMyForm.SetTextArray(1, "姓名 " ); // First Column
m_gridMyForm.SetTextArray(2, "性别 " ); // Second Column
m_gridMyForm.SetTextArray(3, "籍贯 ");
CString strTemp;
for(int i =1; i <40; ++i)
{
strTemp.Format("%d",i);
m_gridMyForm.SetTextMatrix(i,0,strTemp);
}
m_gridMyForm.SetTextMatrix(1,1,"邱正男");
m_gridMyForm.SetTextMatrix(1,2,"男");
m_gridMyForm.SetTextMatrix(1,3,"河南");
m_gridMyForm.SetTextMatrix(39,1,"关真义");
m_gridMyForm.SetTextMatrix(39,2,"女");
m_gridMyForm.SetTextMatrix(39,3,"山西");
}
由于MSFlexGrid控件本身并不带有滚轮消息函数,所以我们可以在CView派生类CMyView中捕获滚轮消息WM_MOUSEWHEEL,然后再在该消息函数里面对网格控件进行数据处理显示。
于是我在CMyView中添加滚轮消息(ON_WM_MOUSEWHEEL)函数。
在该函数里添加如下代码:
BOOL CMyView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: Add your message handler code here and/or call default
// TODO: Add your message handler code here and/or call default
int nPos = m_gridMyForm.GetScrollPos(SB_VERT); //获得当前垂直滚动条位置
int nMax = m_gridMyForm.GetScrollLimit(SB_VERT); //获得当前垂直滚动条位置范围的最大值
if(zDelta < 0) //判断滚动方向为向下滚动
{
nPos += 1;
(nPos >= nMax) ? (nPos = nMax-1) : NULL;
}
else
{
nPos -= 1;
(nPos <= 1) ? (nPos = 1) : NULL;
}
m_gridMyForm.SetTopRow(nPos); //设定网格控件显示的第一行
return CView::OnMouseWheel(nFlags, zDelta, pt);