打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
《基于MFC的OpenGL编程》Part 6 Keyboard and Mouse Control
userphoto

2010.05.15

关注

豆豆网   技术应用频道   2008年12月30日

《基于MFC的OpenGL编程》Part 6 Keyboard and Mouse Control。

  在上一篇的基础上加入对键盘和鼠标的事件处理程序,以便用其来控制3D物体的旋转和移动。

  1,首先在CCY457OpenGLView类中为WM_KEYDOWN, WM_LBUTTONDOWN, WM_LBUTTONUP 和 WM_MOUSEMOVE四个事件加入事件处理函数。

  2,在CCY457OpenGLView.h中加入下列用于控制旋转和移动的变量:

  GLfloat m_xAngle;
  GLfloat m_yAngle;
  GLfloat m_xPos;
  GLfloat m_yPos;
  CPoint m_MouseDownPoint;

  并在构造函数中初始化:

CCY457OpenGLView::CCY457OpenGLView()
{
  m_xPos = 0.0f;
  m_yPos = 0.0f;
  m_xAngle = 0.0f;
  m_yAngle = 0.0f;
}

  3,加入绘制代码:

void COpenGLView::RenderScene ()
{
  glLoadIdentity();
  glTranslatef(m_xPos, m_yPos, -5.0f);
  glRotatef(m_xAngle, 1.0f,0.0f,0.0f);
  glRotatef(m_yAngle, 0.0f,1.0f,0.0f);
  
  glutWireCube(1.0f);
}

  4,为四个事件处理函数加入控制代码

void COpenGLView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
  // TODO: Add your message handler code here and/or call default
  switch (nChar)
  {
    case VK_UP:    m_yPos = m_yPos + 0.1f;
            break;
    case VK_DOWN:  m_yPos = m_yPos - 0.1f;
            break;
    case VK_LEFT:  m_xPos = m_xPos - 0.1f;
            break;
    case VK_RIGHT: m_xPos = m_xPos + 0.1f;
            break;
    default:    MessageBox("Press the arrow keys only");
            break;
  }    
  
  InvalidateRect(NULL,FALSE);
  
  CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
  
void COpenGLView::OnLButtonDown(UINT nFlags, CPoint point)
{
  // TODO: Add your message handler code here and/or call default
  m_MouseDownPoint=point;
  SetCapture();
  
  CView::OnLButtonDown(nFlags, point);
}
  
void COpenGLView::OnLButtonUp(UINT nFlags, CPoint point)
{
  // TODO: Add your message handler code here and/or call default
  m_MouseDownPoint=CPoint(0,0);
  ReleaseCapture();
  
  CView::OnLButtonUp(nFlags, point);
}
  
void COpenGLView::OnMouseMove(UINT nFlags, CPoint point)
{
  // TODO: Add your message handler code here and/or call default
  // Check if we have captured the mouse
  if (GetCapture()==this)
  {
    //Increment the object rotation angles
    m_xAngle+=(point.y-m_MouseDownPoint.y)/3.6;
    m_yAngle+=(point.x-m_MouseDownPoint.x)/3.6;
    //Redraw the view
    InvalidateRect(NULL,FALSE);
    //Set the mouse point
    m_MouseDownPoint=point;
  };
  
  CView::OnMouseMove(nFlags, point);
}

来源:博客园    作者:Phinecos(洞庭散人)  


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
WM_NCHITTEST消息说明
CCanvas
[转] 16行AHK代码实现鼠标手势!
Flash制作跟随鼠标扇形旋转文字视觉特效
javascript实现图片跟随鼠标移动效果
MPBrowser简易图片浏览器 v1.0
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服