---
name: "ctrlMapCursor"
type: command
status: ok
groups: ["GUI Control - Map"]
arma3_since: "0.50"
locality: {"argument": null, "effect": null, "server_exec": false}
source: https://community.bistudio.com/wiki/ctrlMapCursor
revid: 369056
updated: 2024-09-02T20:24:53Z
---

# ctrlMapCursor

*Command · GUI Control - Map · Arma 3 v0.50 · introduced in Arma 2 v1.00*

## Description

Changes the default cursor that appears when interacting with a map control to a custom one. Use an empty string to restore the default cursor.

> [!IMPORTANT]
> Before Arma 3, if the specified cursor does not exist the default is used and no error is produced.
>
> In Arma 3, this would result in the following error: `"No entry 'bin\config.bin/CfgWrapperUI/Cursors'"`.

The cursor is the name of a config entry from *CfgWrapperUI / Cursors*. This command has the following specifics:
- When used on the Main Map (`findDisplay 12 displayCtrl 51`), it is possible to override multiple default cursors. For example, while leaving default "Arrow" intact, it is possible to just override "Scroll" with e.g "Wait" (See [#Example 3](../commands/ctrlMapCursor.md#example-3))
- When used on a custom map, for example user made Mini Map, there is only one single cursor "" for everything, therefore only this cursor can be overridden (see [#Example 4](../commands/ctrlMapCursor.md#example-4) on how to override it)
Some possible class names (See ctrlMapCursor/cursors for the whole list):
- Arrow
- Track
- Move
- Scroll
- Rotate
- Track3D
- Move3D
- Rotate3D
- Raise3D
- Wait
- HC_move
- HC_overFriendly
- HC_overEnemy
- HC_overMission
- HC_unsel

## Syntax

```sqf
control ctrlMapCursor [defaultCursor, newCursor]
```

**Parameters:**

- `control`: [Control](../topics/Control.md) - map control
- `defaultCursor`: [String](../topics/String.md) - cursor class name, **case-sensitive**
- `newCursor`: [String](../topics/String.md) - cursor class name, **case-sensitive**

**Returns:** [Nothing](../topics/Nothing.md)

## Examples

### Example 1

```sqf
_map ctrlMapCursor ["Track", "Arrow"];
```

### Example 2

```sqf
uiNamespace setVariable ["_map", findDisplay 12 displayCtrl 51];
(uiNamespace getVariable "_map") ctrlMapCursor ["Track", "HC_overFriendly"];
```

### Example 3

```sqf
findDisplay 12 displayCtrl 51 ctrlMapCursor ["Scroll", "Wait"];
```

### Example 4

Cycle through all available cursors over custom map:

```sqf
0 spawn
{
    disableSerialization;
    _map = findDisplay 46 createDisplay "RscCredits" ctrlCreate ["RscMapControl", -1];
    _map ctrlSetPosition [0,0,1,1];
    _map ctrlCommit 0;
    {
        _map ctrlMapCursor ["", configName _x]; //<-- the actual usage
        hint format ["Current cursor: %1", configName _x];
        sleep 1;
    }
    forEach ("true" configClasses (configFile >> "CfgWrapperUI" >> "Cursors"));
};
```

## See also

[setMousePosition](../commands/setMousePosition.md) · [getMousePosition](../commands/getMousePosition.md)

## Community notes

**Bull A** — 2016-02-08

When using this command, the cursor will change for the whole display, resulting in visual glitches. Adding the onMouseMoving event handler can help solve this problem:

```sqf
_control ctrlAddEventHandler ["MouseMoving", {
    params [
        ["_mapCtrl",controlNull, [controlNull]],
        ["_xPos",-1,[0]],
        ["_yPos",-1,[0]],
        ["_mouseIn", false, [true]]
    ];

    if (_mouseIn) then {
    // Mouse is in control area
    _mapCtrl ctrlMapCursor ["", "Track"];
    } else {
    // Mouse is out of control area, goes back to arrow
    _mapCtrl ctrlMapCursor ["", "Arrow"];
    };
}];
```

<sub>Source: [BI Community Wiki — ctrlMapCursor](https://community.bistudio.com/wiki/ctrlMapCursor) (revision 369056).</sub>
