65.9K
CodeProject 正在变化。 阅读更多。
Home

MoyStick,一个操纵杆控件

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.82/5 (4投票s)

2005年6月3日

1分钟阅读

viewsIcon

36598

downloadIcon

1728

一个八方向操纵杆控件。

Sample Image

引言

这个控件模拟了一个八方向操纵杆。与传统的操纵杆不同,该控件还根据“杆”的末端与控件中心的距离提供一个幅度测量值。

使用代码

您可能需要了解的属性

  • BackColor 设置控件圆形区域的颜色。
  • CircleDiameter 设置控件的直径(以像素为单位)。
  • LineColor 设置控件“杆”的颜色。
  • LineShapeEnd 设置“杆”末端的形状。
  • LineWidth 设置“杆”的宽度(以像素为单位)。

在您的应用程序中使用鼠标操纵杆需要使用 MouseStickMoved 事件。eventargs 提供两个属性,MagnitudeDirection

  • Magnitude 将返回一个介于 0 和 15 之间的整数值,具体取决于“杆”的末端与控件中心的距离。
  • Direction 返回一个类型为 cPoint 的枚举,定义如下
    public enum cPoint
    {
        north,
        northEast,
        east,
        southEast,
        south,
        southWest,
        west,
        northWest
    }

例如,在我的演示程序中,我在窗体的 userControl11_MouseStickMoved 事件处理程序中设置了圆的加速度和方向

private void userControl11_MouseStickMoved(object sender, 
                              MoyStick.MouseStickEventArgs e)
{
    stbMouseStick.Text = "direction: " + e.Direction.ToString() + 
                         " magnitude: " + e.Magnitude.ToString();
    switch(e.Direction)
    {
        case MoyStick.cPoint.north:
            dY = e.Magnitude * (-1);
            dX = 0;
            break;
        case MoyStick.cPoint.northEast:
            dY = e.Magnitude * (-1);
            dX = e.Magnitude;
            break;
        //(And so on......)

关注点

我使用了一个计时器来使控件失效,以消除我在尝试每次发生 MouseMove 事件时观察到的剧烈闪烁。

© . All rights reserved.