函数参考


_WinAPI_CreateCaret

新建系统插入符的形状并分配给指定窗口.

#Include <WinAPIEx.au3>
_WinAPI_CreateCaret ( $hWnd, $hBitmap [, $iWidth [, $iHeight]] )

参数

$hWnd 拥有插入符号的窗口句柄.
$hBitmap 定义插入符号形状的位图句柄.如果此参数为 0,插入符号是实心的.
如果此参数为 1,插入符号是灰色的.
如果参数是一个位图句柄,插入符号是指定的位图.
$iWidth [可选参数] 插入符号的宽度逻辑单位.如果此参数为 0,宽度设置为系统定义的窗口边框的宽度.
如果 $hBitmap 为位图句柄, _WinAPI_CreateCaret() 忽略此参数.
$iHeight [可选参数] 插入符号的高度逻辑单位.如果此参数为 0,高度设置为系统定义的窗口边框的高度.
如果 $hBitmap 为位图句柄, _WinAPI_CreateCaret() 忽略此参数.

返回值

成功: 返回 1.
失败: 返回 0,并设置@error标志为非 0 值.

注意/说明

_WinAPI_CreateCaret() 自动销毁先前得插入符号形状(如果存在).包含窗口拥有的插入符号.
插入符号是隐藏的,直到应用程序调用 _WinAPI_ShowCaret() 函数使插入符号可见.

系统每一队列提供一个插入符号.创建的窗口,当它具有键盘焦点或处于活动状态时,应该只有一个插入符号.
窗口在失去键盘焦点或变为非活动状态前销毁插入符号.

可以使用 _WinAPI_GetSystemMetrics() 函数检索系统窗口边框的宽度或高度,
用于指定 $SM_CXBORDER 和 $SM_CYBORDER 值.
使用窗口边框的宽度或高度可保证插入符号在一个高分辨率的屏幕上可见.

相关

详情参考

在MSDN中搜索


示例/演示


#Include <APIConstants.au3>
#Include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $hForm, $Msg, $Input, $Button, $Duration = Default, $hBitmap = _WinAPI_CreateSolidBitmap(0, 0x00AEFF, 10, 14)

OnAutoItExitRegister('OnAutoItExit')

$hForm = GUICreate('MyGUI', 400, 93)
$Input = GUICtrlCreateInput('', 20, 20, 360, 20)
$Button = GUICtrlCreateButton('Exit', 165, 59, 70, 23)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUISetState()

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE, $Button
            ExitLoop
    EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm
            Switch _WinAPI_LoWord($wParam)
                Case $Input
                    Switch _WinAPI_HiWord($wParam)
                        Case $EN_KILLFOCUS
                            _WinAPI_HideCaret($lParam)
                            _WinAPI_DestroyCaret()
                            _WinAPI_SetCaretBlinkTime($Duration)
                            $Duration = Default
                        Case $EN_SETFOCUS
                            $Duration = _WinAPI_SetCaretBlinkTime(-1)
                            _WinAPI_CreateCaret($lParam, $hBitmap)
                            _WinAPI_ShowCaret($lParam)
                    EndSwitch
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func OnAutoItExit()
    _WinAPI_DeleteObject($hBitmap)
    If Not IsKeyword($Duration) Then
        _WinAPI_SetCaretBlinkTime($Duration)
    EndIf
EndFunc   ;==>OnAutoItExit