第131讲 使用鼠标

上一讲我们绘制一个无休止旋转的立方体,但是这一切都不由我们控制,所以现在我们来看看如何使用鼠标控制物体。


关于鼠标,我们有简单的包装,所以我们只需要重写MDx11Base的dx_MouseEvent函数,所有鼠标事件都会转发到该函数中,所以我们只需要重写该数据即可。


//=========================


bool dx_MouseEvent(MDx11::MouseButton button, MDx11::MouseAction action,float x,float y, bool isglobAxis);


//

// 鼠标按键

//

enum MouseButton{

LeftButton = 0,  

//鼠标左键

WheelButton,  

 

 

//鼠标中键

RightButton,  

 

 

//鼠标右键

NoMouseButton  

 

 

//没动作

};


//

// 鼠标动作

//

enum MouseAction{

ButtonDown = 0,  

// 鼠标按下

ButtonMove,  

// 鼠标移动

ButtonUp,  

// 鼠标移动

ButtonDoubleClick, // 鼠标双击

ButtonHover  

 

 

 

// 鼠标悬浮

};


// x y 为坐标


isglobAxis 是否为屏幕坐标,所以我们现在只关心窗口坐标


//========================


好吧,我们打算使用右键控制物体的旋转,我们添加几个成员变量记录当前旋转的角度以及上一刻鼠标的位置:


//========================


float mXAngle{ 0.0
};

float mYAngle{ 0.0
};

float mPreXPos{ mj::InfinityF
};

float  

mPreYPos{ mj::InfinityF
};


//=========================


现在我们来简单的实现这个dx_MouseEvent响应函数:


//=========================


bool FirstDirectWindow::dx_MouseEvent(MDx11::MouseButton button, MDx11::MouseAction action,float x,float y, bool isglobAxis){

if (isglobAxis == false){

if (button == MDx11::RightButton &

&

action == MDx11::ButtonMove){

if (mPreXPos == mj::InfinityF){

mPreXPos = x;

mPreYPos = y;

}

mXAngle += (x – mPreXPos);

mYAngle += (y – mPreYPos);


mPreXPos = x;

mPreYPos = y;

}

else if (button == MDx11::RightButton &

&

action == MDx11::ButtonUp){

mPreXPos = mj::InfinityF;

mPreYPos = mj::InfinityF;

}

}


return true;

}



//

// 使用我们记录的值来更新旋转矩阵

//

XMMATRIX word = XMMatrixRotationY(mXAngle / 180.0*mj::PI);

word *= XMMatrixRotationZ(mYAngle / 180.0*mj::PI);

word *= XMMatrixRotationX(mXAngle / 180.0*mj::PI);


//=============================


到此,我们可以使用鼠标右键自由控制立方体的旋转了。如果我们想要关心键盘的话就实现dx_KeyEvent(wchar_t,bool)即可,该函数和dx_MouseEvent一样是MDx11Base里面预定义的接口。它的原型如下所示:


//=============================


bool dx_KeyEvent(wchar_t ch,bool isDown);


//

// ch 是键的编码

//


//

// isDown true是按下,false为抬起

//


//===============================


第131讲 使用鼠标


//===============================


回复D查看目录,回复数字查看章节

有些同学问有没有博客或者什么的,毕竟微信上面的代码排版不是很好,所以自己就做了一个简单的web服务器,不过功能简陋,就只是打算在上面放点C++的文件,顺便将源码放在上面。如果有兴趣的同学可以访问下面地址:


http://2076e1b.nat123.cc:43007/


因为外网映射使用的是nat123的免费版,所以会发现下载非常的缓慢,而且可能还会连接不上,还有由于服务器就在电脑上,平时上班家里电脑没开是没法访问网站的,不过下班后就能够访问了,O(∩_∩)O,因为我呢没做过前端,对html和css,js这些不熟悉,所以网站其实就是乱七八糟的,推荐使用win10的edge浏览器,因为实在这个浏览器上面测试的,目前发现chrome不能下载。


对于C++的东西微信里面说得比较深了些,很多同学反应太难看不懂,所以在网站上面打算多说基础。


l150039b70.imwork.net:36629/ 这是花生壳映射的地址,同样是免费的,不过好像比上面那个稳定,所以两个地址都可以进行访问。


原文始发于微信公众号(

C/C++的编程教室

):第131讲 使用鼠标

|

发表评论