Commit 20ca62d0 authored by Administrator's avatar Administrator
Browse files

added mouse scroll operation

parent 9f392617
......@@ -44,12 +44,12 @@ void CoreHandler::CoreProcess(Window& window, Graphics& gfx, HWND& hWnd, Logger&
break;
}
case (Mouse::MouseEvent::Type::LRelease):
{
std::ostringstream oss;
oss << "(" << mouseEvent.GetX() << "," << mouseEvent.GetY() << "): Mouse Left Released";
window.SetTitle(hWnd, oss.str());
break;
}
{
std::ostringstream oss;
oss << "(" << mouseEvent.GetX() << "," << mouseEvent.GetY() << "): Mouse Left Released";
window.SetTitle(hWnd, oss.str());
break;
}
case (Mouse::MouseEvent::Type::RClick):
{
std::ostringstream oss;
......@@ -58,19 +58,31 @@ void CoreHandler::CoreProcess(Window& window, Graphics& gfx, HWND& hWnd, Logger&
break;
}
case (Mouse::MouseEvent::Type::RRelease):
{
std::ostringstream oss;
{
std::ostringstream oss;
cameraX += cameraDeltaX;
cameraY += cameraDeltaY;
cameraX += cameraDeltaX;
cameraY += cameraDeltaY;
cameraDeltaX = 0;
cameraDeltaY = 0;
cameraDeltaX = 0;
cameraDeltaY = 0;
oss << "(" << mouseEvent.GetX() << "," << mouseEvent.GetY() << "): Mouse Right Released";
window.SetTitle(hWnd, oss.str());
break;
}
oss << "(" << mouseEvent.GetX() << "," << mouseEvent.GetY() << "): Mouse Right Released";
window.SetTitle(hWnd, oss.str());
break;
}
case (Mouse::MouseEvent::Type::Wheel):
{
std::ostringstream oss;
cameraDeltaZ = Window::mouse.GetWheelDelta();
oss << "(" << mouseEvent.GetX() << "," << mouseEvent.GetY() << "): Mouse WheelUp";
oss << " | cameraDeltaZ(" << cameraDeltaZ << ")";
window.SetTitle(hWnd, oss.str());
break;
}
}
}
......@@ -103,7 +115,7 @@ void CoreHandler::SetCamera(Window& window, Logger& logger)
DirectX::XMVECTOR focusPosition = DirectX::XMVectorZero();
DirectX::XMVECTOR upDirection = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 1.0f);*/
float radius = 5.0f;
float radius = cameraZ - cameraDeltaZ / 120.0f;
auto vSinValue = sin((cameraY + cameraDeltaY) / 100.0f);
auto vCosValue = cos((cameraY + cameraDeltaY) / 100.0f);
......
......@@ -13,10 +13,10 @@ public:
void SetCamera(Window& window, Logger& logger);
private:
double seed;
int cameraX = 80;
int cameraY = 60;
int cameraZ = 0;
int cameraDeltaX = 0;
int cameraDeltaY = 0;
int cameraDeltaZ = 0;
float cameraX = 80.0f;
float cameraY = 60.0f;
float cameraZ = 5.0f;
float cameraDeltaX = 0;
float cameraDeltaY = 0;
float cameraDeltaZ = 0;
};
\ No newline at end of file
#include "Mouse.h"
#include "Window.h"
Mouse::Mouse()
{
......@@ -54,6 +55,11 @@ int Mouse::GetRightDragDeltaY()
return rightDragDeltaY;
}
int Mouse::GetWheelDelta()
{
return wheelDelta;
}
void Mouse::OnMouseMove(int newX, int newY)
{
x = newX;
......@@ -103,6 +109,47 @@ void Mouse::OnRightRelease(int newX, int newY)
TrimEvents();
}
void Mouse::OnWheelDelta(int x, int y, int delta)
{
wheelDelta += delta;
if (wheelDelta >= 2.0f * WHEEL_DELTA)
{
wheelDelta = 2.0f * WHEEL_DELTA;
}
if (wheelDelta <= -120.0f * WHEEL_DELTA)
{
wheelDelta = -120.0f * WHEEL_DELTA;
}
mouseEvents.push(Mouse::MouseEvent(Mouse::MouseEvent::Type::Wheel, *this));
TrimEvents();
// generate events for every 120
// 默认每次达到120,执行一次滚轮事件。如果数字够大,可以执行复数次
//if (wheelDelta >= 0.0f)
//{
// //wheelDelta -= WHEEL_DELTA;
// OnWheelUp(x, y);
//}
//else
//{
// //wheelDelta += WHEEL_DELTA;
// OnWheelDown(x, y);
//}
}
//void Mouse::OnWheelUp(int x, int y)
//{
// mouseEvents.push(Mouse::MouseEvent(Mouse::MouseEvent::Type::WheelUp, *this));
// TrimEvents();
//}
//
//void Mouse::OnWheelDown(int x, int y)
//{
// mouseEvents.push(Mouse::MouseEvent(Mouse::MouseEvent::Type::WheelDown, *this));
// TrimEvents();
//}
Mouse::MouseEvent Mouse::ReadEvent()
{
if (mouseEvents.size() > 0)
......
......@@ -13,8 +13,9 @@ public:
LRelease,
RClick,
RRelease,
WheelUp,
WheelDown,
//WheelUp,
//WheelDown,
Wheel,
Move,
Enter,
Leave,
......@@ -89,12 +90,16 @@ public:
int GetRightClickAtY();
int GetRightDragDeltaX();
int GetRightDragDeltaY();
int GetWheelDelta();
void OnMouseMove(int newX, int newY);
void OnLeftClick(int newX, int newY);
void OnleftRelease(int newX, int newY);
void OnRightClick(int newX, int newY);
void OnRightRelease(int newX, int newY);
void OnWheelDelta(int x, int y, int delta);
//void OnWheelUp(int x, int y);
//void OnWheelDown(int x, int y);
Mouse::MouseEvent ReadEvent();
void TrimEvents();
......@@ -110,9 +115,9 @@ private:
int leftClickAtY;
int rightClickAtX;
int rightClickAtY;
int rightDragDeltaX;
int rightDragDeltaY;
int wheelDelta;
static constexpr unsigned int bufferSize = 16u;
......
......@@ -116,6 +116,11 @@ LRESULT Window::HandleMsg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noe
pt = MAKEPOINTS(lParam);
mouse.OnRightRelease(pt.x, pt.y);
break;
case WM_MOUSEWHEEL:
pt = MAKEPOINTS(lParam);
int mouseDelta = GET_WHEEL_DELTA_WPARAM(wParam);
mouse.OnWheelDelta(pt.x, pt.y, mouseDelta);
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment