1# @ohos.multimodalInput.pointer (鼠标指针) 2 3<!--Kit: Input Kit--> 4<!--Subsystem: MultimodalInput--> 5<!--Owner: @zhaoxueyuan--> 6<!--Designer: @hanruofei--> 7<!--Tester: @Lyuxin--> 8<!--Adviser: @Brilliantry_Rui--> 9 10本模块提供鼠标指针管理能力,包括查询、设置鼠标指针属性。 11 12> **说明**: 13> 14> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 15 16## 导入模块 17 18```js 19import { pointer } from '@kit.InputKit'; 20``` 21 22## pointer.setPointerVisible 23 24setPointerVisible(visible: boolean, callback: AsyncCallback<void>): void 25 26设置鼠标指针显示或者隐藏,使用Callback异步回调。 27 28**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 29 30**参数**: 31 32| 参数名 | 类型 | 必填 | 说明 | 33| -------- | ------------------------- | ---- | ---------------------------------------- | 34| visible | boolean | 是 | 鼠标指针是否显示。true表示显示,false表示不显示。 | 35| callback | AsyncCallback<void> | 是 | 回调函数。 | 36 37**错误码**: 38 39以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 40 41| 错误码ID | 错误信息 | 42| ---- | --------------------- | 43| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 44| 801 | Capability not supported. | 45 46**示例**: 47 48```js 49import { pointer } from '@kit.InputKit'; 50 51@Entry 52@Component 53struct Index { 54 build() { 55 RelativeContainer() { 56 Text() 57 .onClick(() => { 58 try { 59 pointer.setPointerVisible(true, (error: Error) => { 60 if (error) { 61 console.error(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 62 return; 63 } 64 console.log(`Set pointer visible success`); 65 }); 66 } catch (error) { 67 console.error(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 68 } 69 }) 70 } 71 } 72} 73``` 74 75## pointer.setPointerVisible 76 77setPointerVisible(visible: boolean): Promise<void> 78 79设置鼠标指针显示或者隐藏,使用Promise异步回调。 80 81**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 82 83**参数**: 84 85| 参数名 | 类型 | 必填 | 说明 | 86| ------- | ------- | ---- | ---------------------------------------- | 87| visible | boolean | 是 | 鼠标指针是否显示。true表示显示,false表示不显示。 | 88 89**返回值**: 90 91| 类型 | 说明 | 92| ------------------- | ------------------- | 93| Promise<void> | 无返回结果的Promise对象。 | 94 95**错误码**: 96 97以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 98 99| 错误码ID | 错误信息 | 100| ---- | --------------------- | 101| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 102| 801 | Capability not supported. | 103 104**示例**: 105 106```js 107import { pointer } from '@kit.InputKit'; 108 109@Entry 110@Component 111struct Index { 112 build() { 113 RelativeContainer() { 114 Text() 115 .onClick(() => { 116 try { 117 pointer.setPointerVisible(false).then(() => { 118 console.log(`Set pointer visible success`); 119 }); 120 } catch (error) { 121 console.error(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 122 } 123 }) 124 } 125 } 126} 127``` 128 129## pointer.setPointerVisibleSync<sup>10+</sup> 130 131setPointerVisibleSync(visible: boolean): void 132 133设置鼠标指针的显示或隐藏,使用同步方式。 134 135**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 136 137**参数**: 138 139| 参数名 | 类型 | 必填 | 说明 | 140| ------- | ------- | ---- | ---------------------------------------- | 141| visible | boolean | 是 | 鼠标指针是否显示。true表示显示,false表示不显示。 | 142 143**错误码**: 144 145以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 146 147| 错误码ID | 错误信息 | 148| ---- | --------------------- | 149| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 150 151**示例**: 152 153```js 154import { pointer } from '@kit.InputKit'; 155 156@Entry 157@Component 158struct Index { 159 build() { 160 RelativeContainer() { 161 Text() 162 .onClick(() => { 163 try { 164 pointer.setPointerVisibleSync(false); 165 console.log(`Set pointer visible success`); 166 } catch (error) { 167 console.error(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 168 } 169 }) 170 } 171 } 172} 173``` 174 175## pointer.isPointerVisible 176 177isPointerVisible(callback: AsyncCallback<boolean>): void 178 179获取鼠标指针显示状态,使用callback异步回调。 180 181**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 182 183**参数**: 184 185| 参数名 | 类型 | 必填 | 说明 | 186| -------- | ---------------------------- | ---- | -------------- | 187| callback | AsyncCallback<boolean> | 是 | 回调函数,返回鼠标指针状态,true为显示,false为隐藏。 | 188 189**错误码**: 190 191以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 192 193| 错误码ID | 错误信息 | 194| ---- | --------------------- | 195| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 196 197**示例**: 198 199```js 200import { pointer } from '@kit.InputKit'; 201 202@Entry 203@Component 204struct Index { 205 build() { 206 RelativeContainer() { 207 Text() 208 .onClick(() => { 209 try { 210 pointer.isPointerVisible((error: Error, visible: boolean) => { 211 if (error) { 212 console.error(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 213 return; 214 } 215 console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`); 216 }); 217 } catch (error) { 218 console.error(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 219 } 220 }) 221 } 222 } 223} 224``` 225 226## pointer.isPointerVisible 227 228isPointerVisible(): Promise<boolean> 229 230获取鼠标指针显示状态,使用Promise异步回调。 231 232**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 233 234**返回值**: 235 236| 类型 | 说明 | 237| ---------------------- | ------------------- | 238| Promise<boolean> | Promise对象,返回鼠标指针状态查询结果。true代表显示状态,false代表隐藏状态。 | 239 240**示例**: 241 242```js 243import { pointer } from '@kit.InputKit'; 244 245@Entry 246@Component 247struct Index { 248 build() { 249 RelativeContainer() { 250 Text() 251 .onClick(() => { 252 try { 253 pointer.isPointerVisible().then((visible: boolean) => { 254 console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`); 255 }); 256 } catch (error) { 257 console.error(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 258 } 259 }) 260 } 261 } 262} 263``` 264 265## pointer.isPointerVisibleSync<sup>10+</sup> 266 267isPointerVisibleSync(): boolean 268 269使用同步方式获取鼠标指针显示或者隐藏。 270 271**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 272 273**返回值**: 274 275| 类型 | 说明 | 276| ---------------------- | ------------------- | 277| boolean | 返回鼠标指针显示或隐藏状态。true代表显示状态,false代表隐藏状态。 | 278 279**示例**: 280 281```js 282import { pointer } from '@kit.InputKit'; 283 284@Entry 285@Component 286struct Index { 287 build() { 288 RelativeContainer() { 289 Text() 290 .onClick(() => { 291 try { 292 let visible: boolean = pointer.isPointerVisibleSync(); 293 console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`); 294 } catch (error) { 295 console.error(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 296 } 297 }) 298 } 299 } 300} 301``` 302 303## pointer.getPointerStyle 304 305getPointerStyle(windowId: number, callback: AsyncCallback<PointerStyle>): void 306 307获取鼠标样式类型,使用Callback异步回调。 308 309**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 310 311**参数**: 312 313| 参数名 | 类型 | 必填 | 说明 | 314| -------- | ---------------------------------------- | ---- | -------------- | 315| windowId | number | 是 | 窗口id。取值范围为大于等于-1的整数,取值为-1时表示全局窗口。 | 316| callback | AsyncCallback<[PointerStyle](#pointerstyle)> | 是 | 回调函数,返回鼠标样式类型。 | 317 318**错误码**: 319 320以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 321 322| 错误码ID | 错误信息 | 323| ---- | --------------------- | 324| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 325 326**示例**: 327 328```js 329import { pointer } from '@kit.InputKit'; 330import { BusinessError } from '@kit.BasicServicesKit'; 331import { window } from '@kit.ArkUI'; 332 333@Entry 334@Component 335struct Index { 336 build() { 337 RelativeContainer() { 338 Text() 339 .onClick(() => { 340 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 341 if (error.code) { 342 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 343 return; 344 } 345 let windowId = win.getWindowProperties().id; 346 if (windowId < 0) { 347 console.log(`Invalid windowId`); 348 return; 349 } 350 try { 351 pointer.getPointerStyle(windowId, (error: Error, style: pointer.PointerStyle) => { 352 console.log(`Get pointer style success, style: ${JSON.stringify(style)}`); 353 }); 354 } catch (error) { 355 console.error(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 356 } 357 }); 358 }) 359 } 360 } 361} 362``` 363 364## pointer.getPointerStyle 365 366getPointerStyle(windowId: number): Promise<PointerStyle> 367 368获取鼠标样式类型,使用Promise异步回调。 369 370**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 371 372**参数**: 373 374| 参数名 | 类型 | 必填 | 说明 | 375| -------- | ------ | ---- | -------- | 376| windowId | number | 是 | 窗口id。 | 377 378**返回值**: 379 380| 类型 | 说明 | 381| ---------------------------------------- | ------------------- | 382| Promise<[PointerStyle](#pointerstyle)> | Promise实例,返回鼠标样式类型。 | 383 384**错误码**: 385 386以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 387 388| 错误码ID | 错误信息 | 389| ---- | --------------------- | 390| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 391 392**示例**: 393 394```js 395import { pointer } from '@kit.InputKit'; 396import { BusinessError } from '@kit.BasicServicesKit'; 397import { window } from '@kit.ArkUI'; 398 399@Entry 400@Component 401struct Index { 402 build() { 403 RelativeContainer() { 404 Text() 405 .onClick(() => { 406 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 407 if (error.code) { 408 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 409 return; 410 } 411 let windowId = win.getWindowProperties().id; 412 if (windowId < 0) { 413 console.log(`Invalid windowId`); 414 return; 415 } 416 try { 417 pointer.getPointerStyle(windowId).then((style: pointer.PointerStyle) => { 418 console.log(`Get pointer style success, style: ${JSON.stringify(style)}`); 419 }); 420 } catch (error) { 421 console.error(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 422 } 423 }); 424 }) 425 } 426 } 427} 428``` 429 430## pointer.getPointerStyleSync<sup>10+</sup> 431 432getPointerStyleSync(windowId: number): PointerStyle 433 434查询鼠标样式类型,如向东箭头、向西箭头、向南箭头、向北箭头等。 435 436**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 437 438**参数**: 439 440| 参数名 | 类型 | 必填 | 说明 | 441| -------- | ------ | ---- | -------- | 442| windowId | number | 是 | 窗口id。<br>默认值为-1,表示获取全局的鼠标样式。 | 443 444**返回值**: 445 446| 类型 | 说明 | 447| ---------------------------------------- | ------------------- | 448| [PointerStyle](#pointerstyle) | 返回鼠标样式类型。 | 449 450**错误码**: 451 452以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 453 454| 错误码ID | 错误信息 | 455| ---- | --------------------- | 456| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 457 458**示例**: 459 460```js 461import { pointer } from '@kit.InputKit'; 462 463@Entry 464@Component 465struct Index { 466 build() { 467 RelativeContainer() { 468 Text() 469 .onClick(() => { 470 let windowId = -1; 471 try { 472 let style: pointer.PointerStyle = pointer.getPointerStyleSync(windowId); 473 console.log(`Get pointer style success, style: ${JSON.stringify(style)}`); 474 } catch (error) { 475 console.error(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 476 } 477 }) 478 } 479 } 480} 481``` 482 483## pointer.setPointerStyle 484 485setPointerStyle(windowId: number, pointerStyle: PointerStyle, callback: AsyncCallback<void>): void 486 487设置鼠标样式类型,使用Callback异步回调。 488 489**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 490 491**参数**: 492 493| 参数名 | 类型 | 必填 | 说明 | 494| ------------ | ------------------------------ | ---- | ----------------------------------- | 495| windowId | number | 是 | 窗口id。 | 496| pointerStyle | [PointerStyle](#pointerstyle) | 是 | 鼠标样式。 | 497| callback | AsyncCallback<void> | 是 | 回调函数。 | 498 499**错误码**: 500 501以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 502 503| 错误码ID | 错误信息 | 504| ---- | --------------------- | 505| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 506 507**示例**: 508 509```js 510import { pointer } from '@kit.InputKit'; 511import { BusinessError } from '@kit.BasicServicesKit'; 512import { window } from '@kit.ArkUI'; 513 514@Entry 515@Component 516struct Index { 517 build() { 518 RelativeContainer() { 519 Text() 520 .onClick(() => { 521 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 522 if (error.code) { 523 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 524 return; 525 } 526 let windowId = win.getWindowProperties().id; 527 if (windowId < 0) { 528 console.log(`Invalid windowId`); 529 return; 530 } 531 try { 532 pointer.setPointerStyle(windowId, pointer.PointerStyle.CROSS, error => { 533 console.log(`Set pointer style success`); 534 }); 535 } catch (error) { 536 console.error(`Set pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 537 } 538 }); 539 }) 540 } 541 } 542} 543``` 544## pointer.setPointerStyle 545 546setPointerStyle(windowId: number, pointerStyle: PointerStyle): Promise<void> 547 548设置鼠标样式类型,使用Promise异步回调。 549 550**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 551 552**参数**: 553 554| 参数名 | 类型 | 必填 | 说明 | 555| ------------------- | ------------------------------ | ---- | ---------------- | 556| windowId | number | 是 | 窗口id。 | 557| pointerStyle | [PointerStyle](#pointerstyle) | 是 | 鼠标样式。 | 558 559**返回值**: 560 561| 类型 | 说明 | 562| ------------------- | ------------------- | 563| Promise<void> | 无返回结果的Promise对象。 | 564 565**错误码**: 566 567以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 568 569| 错误码ID | 错误信息 | 570| ---- | --------------------- | 571| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 572 573**示例**: 574 575```js 576import { pointer } from '@kit.InputKit'; 577import { BusinessError } from '@kit.BasicServicesKit'; 578import { window } from '@kit.ArkUI'; 579 580@Entry 581@Component 582struct Index { 583 build() { 584 RelativeContainer() { 585 Text() 586 .onClick(() => { 587 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 588 if (error.code) { 589 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 590 return; 591 } 592 let windowId = win.getWindowProperties().id; 593 if (windowId < 0) { 594 console.log(`Invalid windowId`); 595 return; 596 } 597 try { 598 pointer.setPointerStyle(windowId, pointer.PointerStyle.CROSS).then(() => { 599 console.log(`Set pointer style success`); 600 }); 601 } catch (error) { 602 console.error(`Set pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 603 } 604 }); 605 }) 606 } 607 } 608} 609``` 610 611## pointer.setPointerStyleSync<sup>10+</sup> 612 613setPointerStyleSync(windowId: number, pointerStyle: PointerStyle): void 614 615设置鼠标样式类型,使用同步方式返回结果。 616 617**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 618 619**参数**: 620 621| 参数名 | 类型 | 必填 | 说明 | 622| ------------------- | ------------------------------ | ---- | ---------------- | 623| windowId | number | 是 | 窗口id。 | 624| pointerStyle | [PointerStyle](#pointerstyle) | 是 | 鼠标样式。 | 625 626**错误码**: 627 628以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 629 630| 错误码ID | 错误信息 | 631| ---- | --------------------- | 632| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 633 634**示例**: 635```js 636import { pointer } from '@kit.InputKit'; 637import { BusinessError } from '@kit.BasicServicesKit'; 638import { window } from '@kit.ArkUI'; 639 640@Entry 641@Component 642struct Index { 643 build() { 644 RelativeContainer() { 645 Text() 646 .onClick(() => { 647 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 648 if (error.code) { 649 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 650 return; 651 } 652 let windowId = win.getWindowProperties().id; 653 if (windowId < 0) { 654 console.log(`Invalid windowId`); 655 return; 656 } 657 try { 658 pointer.setPointerStyleSync(windowId, pointer.PointerStyle.CROSS); 659 console.log(`Set pointer style success`); 660 } catch (error) { 661 console.error(`getPointerSize failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 662 } 663 }); 664 }) 665 } 666 } 667} 668``` 669 670## PrimaryButton<sup>10+</sup> 671 672鼠标主键类型。 673 674**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 675 676| 名称 | 值 | 说明 | 677| -------------------------------- | ---- | ------ | 678| LEFT | 0 | 鼠标左键。 | 679| RIGHT | 1 | 鼠标右键。 | 680 681## RightClickType<sup>10+</sup> 682 683右键菜单的触发方式。 684 685**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 686 687| 名称 | 值 | 说明 | 688| -------------------------------- | ---- | ------ | 689| TOUCHPAD_RIGHT_BUTTON | 1 |按压触控板右键区域。 | 690| TOUCHPAD_LEFT_BUTTON | 2 |按压触控板左键区域。 | 691| TOUCHPAD_TWO_FINGER_TAP | 3 |双指轻击或双指按压触控板。| 692| TOUCHPAD_TWO_FINGER_TAP_OR_RIGHT_BUTTON<sup>20+</sup> | 4 |双指轻击或双指按压触控板、或按压触控板右键区域。| 693| TOUCHPAD_TWO_FINGER_TAP_OR_LEFT_BUTTON<sup>20+</sup> | 5 |双指轻击或双指按压触控板、或按压触控板左键区域。| 694 695## PointerStyle 696 697鼠标样式类型。 698 699**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 700 701| 名称 | 值 | 说明 |图示 | 702| -------------------------------- | ---- | ------ |------ | 703| DEFAULT | 0 | 默认 || 704| EAST | 1 | 向东箭头 || 705| WEST | 2 | 向西箭头 || 706| SOUTH | 3 | 向南箭头 || 707| NORTH | 4 | 向北箭头 || 708| WEST_EAST | 5 | 向西东箭头 || 709| NORTH_SOUTH | 6 | 向北南箭头 || 710| NORTH_EAST | 7 | 向东北箭头 || 711| NORTH_WEST | 8 | 向西北箭头 || 712| SOUTH_EAST | 9 | 向东南箭头 || 713| SOUTH_WEST | 10 | 向西南箭头 || 714| NORTH_EAST_SOUTH_WEST | 11 | 东北西南调整 || 715| NORTH_WEST_SOUTH_EAST | 12 | 西北东南调整 || 716| CROSS | 13 | 准确选择 || 717| CURSOR_COPY | 14 | 拷贝 || 718| CURSOR_FORBID | 15 | 不可用 || 719| COLOR_SUCKER | 16 | 滴管 || 720| HAND_GRABBING | 17 | 并拢的手 || 721| HAND_OPEN | 18 | 张开的手 || 722| HAND_POINTING | 19 | 手形指针 || 723| HELP | 20 | 帮助选择 || 724| MOVE | 21 | 移动 || 725| RESIZE_LEFT_RIGHT | 22 | 内部左右调整 || 726| RESIZE_UP_DOWN | 23 | 内部上下调整 || 727| SCREENSHOT_CHOOSE | 24 | 截图十字准星 || 728| SCREENSHOT_CURSOR | 25 | 截图 || 729| TEXT_CURSOR | 26 | 文本选择 || 730| ZOOM_IN | 27 | 放大 || 731| ZOOM_OUT | 28 | 缩小 || 732| MIDDLE_BTN_EAST | 29 | 向东滚动 || 733| MIDDLE_BTN_WEST | 30 | 向西滚动 || 734| MIDDLE_BTN_SOUTH | 31 | 向南滚动 |  | 735| MIDDLE_BTN_NORTH | 32 | 向北滚动 || 736| MIDDLE_BTN_NORTH_SOUTH | 33 | 向南北滚动 || 737| MIDDLE_BTN_NORTH_EAST | 34 | 向东北滚动 || 738| MIDDLE_BTN_NORTH_WEST | 35 | 向西北滚动 || 739| MIDDLE_BTN_SOUTH_EAST | 36 | 向东南滚动 || 740| MIDDLE_BTN_SOUTH_WEST | 37 | 向西南滚动 || 741| MIDDLE_BTN_NORTH_SOUTH_WEST_EAST | 38 | 四向锥形移动 || 742| HORIZONTAL_TEXT_CURSOR<sup>10+</sup> | 39 | 垂直文本选择 || 743| CURSOR_CROSS<sup>10+</sup> | 40 | 十字光标 || 744| CURSOR_CIRCLE<sup>10+</sup> | 41 | 圆形光标 || 745| LOADING<sup>10+</sup> | 42 | 正在载入动画光标 |<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 746| RUNNING<sup>10+</sup> | 43 | 后台运行中动画光标 |<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 747| MIDDLE_BTN_EAST_WEST<sup>18+</sup> | 44 | 向东西滚动 || 748| SCREENRECORDER_CURSOR<sup>20+</sup> | 48 | 录屏光标 || 749 750## pointer.setCustomCursor<sup>11+</sup> 751 752setCustomCursor(windowId: number, pixelMap: image.PixelMap, focusX?: number, focusY?: number): Promise<void> 753 754设置自定义光标样式,使用Promise异步回调。 755 756**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 757 758**参数**: 759 760| 参数名 | 类型 | 必填 | 说明 | 761| ----- | ------ | ---- | ----------------------------------- | 762| windowId | number | 是 | 窗口id。 | 763| pixelMap | [image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md) | 是 | 自定义光标资源。 | 764| focusX | number | 否 | 自定义光标焦点x,取值范围:大于等于0,默认为0。 | 765| focusY | number | 否 | 自定义光标焦点y,取值范围:大于等于0,默认为0。 | 766 767**返回值**: 768 769| 类型 | 说明 | 770| ------------------- | ---------------- | 771| Promise<void> | 无返回结果的Promise对象。 | 772 773**错误码**: 774 775以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 776 777| 错误码ID | 错误信息 | 778| ---- | --------------------- | 779| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 780 781**示例**: 782 783```js 784import { pointer } from '@kit.InputKit'; 785import { image } from '@kit.ImageKit'; 786import { BusinessError } from '@kit.BasicServicesKit'; 787import { window } from '@kit.ArkUI'; 788 789@Entry 790@Component 791struct Index { 792 build() { 793 RelativeContainer() { 794 Text() 795 .onClick(() => { 796 // app_icon为示例资源,请开发者根据实际需求配置资源文件。 797 this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent( 798 $r("app.media.app_icon").id, (error: BusinessError, svgFileData: Uint8Array) => { 799 const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0); 800 let svgImageSource: image.ImageSource = image.createImageSource(svgBuffer); 801 let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }}; 802 svgImageSource.createPixelMap(svgDecodingOptions).then((pixelMap) => { 803 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 804 let windowId = win.getWindowProperties().id; 805 try { 806 pointer.setCustomCursor(windowId, pixelMap).then(() => { 807 console.log(`setCustomCursor success`); 808 }); 809 } catch (error) { 810 console.error(`setCustomCursor failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 811 } 812 }); 813 }); 814 }); 815 }) 816 } 817 } 818} 819``` 820## CustomCursor<sup>15+</sup> 821 822自定义光标资源。 823 824**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 825| 名称 | 类型 | 只读 | 可选 | 说明 | 826| -------- | ------- | -------- | -------- | ------- | 827| pixelMap | [image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md) | 否 | 否 | 自定义光标。最小限制为资源图本身的最小限制。最大限制为256 x 256px。 | 828| focusX | number | 否 | 是 | 自定义光标焦点的水平坐标。该坐标受自定义光标大小的限制。最小值为0,最大值为资源图的宽度最大值,该参数缺省时默认为0。 | 829| focusY | number | 否 | 是 | 自定义光标焦点的垂直坐标。该坐标受自定义光标大小的限制。最小值为0,最大值为资源图的高度最大值,该参数缺省时默认为0。 | 830 831## CursorConfig<sup>15+</sup> 832 833自定义光标配置。 834 835**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 836 837| 名称 | 类型 | 只读 | 可选 | 说明 | 838| -------- | ------- | -------- | -------- | ------- | 839| followSystem | boolean | 否 | 否 | 是否根据系统设置调整光标大小。false表示使用自定义光标样式大小,true表示根据系统设置调整光标大小,可调整范围为:[光标资源图大小,256×256]。 | 840 841## pointer.setCustomCursor<sup>15+</sup> 842 843setCustomCursor(windowId: number, cursor: CustomCursor, config: CursorConfig): Promise<void> 844 845设置自定义光标样式,使用Promise异步回调。 846应用窗口布局改变、热区切换、页面跳转、光标移出再回到窗口、光标在窗口不同区域移动,以上场景可能导致光标切换回系统样式,需要开发者重新设置光标样式。 847 848**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 849 850**参数**: 851 852| 参数名 | 类型 | 必填 | 说明 | 853| -------- | -------- | -------- | -------- | 854| windowId | number | 是 | 窗口id。 | 855| cursor | [CustomCursor](js-apis-pointer.md#customcursor15) | 是 | 自定义光标资源。 | 856| config | [CursorConfig](js-apis-pointer.md#cursorconfig15) | 是 | 自定义光标配置,用于配置是否根据系统设置调整光标大小。如果CursorConfig中followSystem设置为true,则光标大小的可调整范围为:[光标资源图大小,256×256]。 | 857 858**返回值**: 859 860| 类型 | 说明 | 861| ------------------- | ---------------- | 862| Promise<void> | 无返回结果的Promise对象。 | 863 864**错误码**: 865 866以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[输入设备错误码](./errorcode-inputdevice.md)。 867 868| 错误码ID | 错误信息 | 869| ---- | --------------------- | 870| 401 | Parameter error. Possible causes: 1. Abnormal windowId parameter passed in. 2. Abnormal pixelMap parameter passed in; 3. Abnormal focusX parameter passed in.4. Abnormal focusY parameter passed in. | 871| 26500001 | Invalid windowId. Possible causes: The window id does not belong to the current process. | 872 873**示例**: 874 875```js 876import { pointer } from '@kit.InputKit'; 877import { image } from '@kit.ImageKit'; 878import { BusinessError } from '@kit.BasicServicesKit'; 879import { window } from '@kit.ArkUI'; 880 881@Entry 882@Component 883struct Index { 884 build() { 885 RelativeContainer() { 886 Text() 887 .onClick(() => { 888 // app_icon为示例资源,请开发者根据实际需求配置资源文件。 889 this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent( 890 $r("app.media.app_icon").id, (error: BusinessError, svgFileData: Uint8Array) => { 891 const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0); 892 let svgImageSource: image.ImageSource = image.createImageSource(svgBuffer); 893 let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }}; 894 svgImageSource.createPixelMap(svgDecodingOptions).then((pixelMap) => { 895 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 896 let windowId = win.getWindowProperties().id; 897 try { 898 pointer.setCustomCursor(windowId, {pixelMap: pixelMap, focusX: 25, focusY: 25}, {followSystem: false}).then(() => { 899 console.log(`setCustomCursor success`); 900 }); 901 } catch (error) { 902 console.error(`setCustomCursor failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 903 } 904 }); 905 }); 906 }); 907 }) 908 } 909 } 910} 911``` 912 913## pointer.setCustomCursorSync<sup>11+</sup> 914 915setCustomCursorSync(windowId: number, pixelMap: image.PixelMap, focusX?: number, focusY?: number): void 916 917设置自定义光标样式,使用同步方式进行设置。 918 919**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 920 921**参数**: 922 923| 参数名 | 类型 | 必填 | 说明 | 924| ----- | ------ | ---- | ----------------------------------- | 925| windowId | number | 是 | 窗口id。取值为大于0的整数。 | 926| pixelMap | [image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md) | 是 | 自定义光标资源。 | 927| focusX | number | 否 | 自定义光标焦点x,取值范围:大于等于0,默认为0。 | 928| focusY | number | 否 | 自定义光标焦点y,取值范围:大于等于0,默认为0。 | 929 930**错误码**: 931 932以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 933 934| 错误码ID | 错误信息 | 935| ---- | --------------------- | 936| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 937 938**示例**: 939 940```js 941import { pointer } from '@kit.InputKit'; 942import { image } from '@kit.ImageKit'; 943import { BusinessError } from '@kit.BasicServicesKit'; 944import { window } from '@kit.ArkUI'; 945 946@Entry 947@Component 948struct Index { 949 build() { 950 RelativeContainer() { 951 Text() 952 .onClick(() => { 953 // app_icon为示例资源,请开发者根据实际需求配置资源文件。 954 this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent( 955 $r("app.media.app_icon").id, (error: BusinessError, svgFileData: Uint8Array) => { 956 const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0); 957 let svgImageSource: image.ImageSource = image.createImageSource(svgBuffer); 958 let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }}; 959 svgImageSource.createPixelMap(svgDecodingOptions).then((pixelMap) => { 960 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 961 let windowId = win.getWindowProperties().id; 962 try { 963 pointer.setCustomCursorSync(windowId, pixelMap, 25, 25); 964 console.log(`setCustomCursorSync success`); 965 } catch (error) { 966 console.error(`setCustomCursorSync failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 967 } 968 }); 969 }); 970 }); 971 }) 972 } 973 } 974} 975```