这个问题难,难的是没有人在使用这个功能,它需要俘获 SPVOICESTATUS 。
试试使用下面函数
HRESULT GetStatus(
SPVOICESTATUS *pStatus,
WCHAR **ppszLastBookmark
);
来得到这个结构中的成员,结构如下:
typedef struct SPVOICESTATUS
{
ULONG ulCurrentStream;
ULONG ulLastStreamQueued;
HRESULT hrLastResult;
DWORD dwRunningState;
ULONG ulInputWordPos;
ULONG ulInputWordLen;
ULONG ulInputSentPos;
ULONG ulInputSentLen;
LONG lBookmarkId;
SPPHONEID PhonemeId;
SPVISEMES VisemeId;
DWORD dwReserved1;
DWORD dwReserved2;
} SPVOICESTATUS;
得到 ulInputWordPos 和 ulInputWordLen 就可以使用类似下面的代码:
nStart = 0;
nEnd = SendDlgItemMessage( m_hWnd, IDE_EDITBOX, WM_GETTEXTLENGTH, 0, 0 );
SendDlgItemMessage( m_hWnd, IDE_EDITBOX, EM_SETSEL, nStart, nEnd );
或 Delphi 的 SetStart ,CaretPos ,SelLength 等函数。
呵呵,我有点吃不消。仅供参考。