MSFlexGrid控件响应滑轮消息

在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);

}

综上所述,简单的几句代码就可以实现VC++中网格控件响应滚轮消息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值