日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

改變HTML中的光標問題

發布時間:2025/3/15 HTML 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 改變HTML中的光標問題 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
改變HTML中的光標問題,我在網上找到這一段代碼,用來改變當前光標位置

HRESULT hr;
CComPtr<IHTMLTxtRange> txtRange;
CComPtr<IHTMLSelectionObject> pSelection;
spDoc->get_selection(&pSelection);
if (pSelection)
{
? CComPtr<IDispatch> pDispRange;
? pSelection->createRange(&pDispRange);
? if (pDispRange)
? {
? hr = pDispRange->QueryInterface(IID_IHTMLTxtRange, (void**)&txtRange);
? if ( SUCCEEDED(hr) && txtRange )
? {?
? txtRange->collapse(VARIANT_TRUE);
? if (pElem)
? {
? if (SUCCEEDED(txtRange->moveToElementText(pElem)))
? {?
? txtRange->select();
? txtRange->scrollIntoView();
? }
? }
? txtRange.Release();
? }
? pDispRange.Release();
? }
? pSelection.Release();? // http://www.wzszf.com/
}

其中,pElem 是指定要跳到的元素(我的情況下,它是一個 <div>&nbsp;</div>,這段代碼可以使光標移到那個元素上,而且那個空位也被選上。但是我衹想要光標移動,不想要文字被選取,我嘗試去掉 txtRange->select() 這一段,但那樣光標又不移動

我是利用 IHTMLDocument2.createElement 來生成新的元素,然後用 IHTMLDOMNode.appendChild插入到指定位置上,插入元素沒有問題。但光標就是移不過去。我後來改用下面的代碼,但還是沒效

HRESULT hr;
CComPtr<IMarkupServices> pMS;
CComPtr<IMarkupContainer> pMarkup;
CComPtr<IMarkupPointer> pPtr;
CComPtr<IDisplayPointer> dpPtr;
CComPtr<IDisplayServices> pDispServices;
CComPtr<IHTMLCaret> spCaret;?

hr = spDoc->QueryInterface(IID_IMarkupContainer, (void **)&pMarkup);
if (hr==S_OK)
{?
? hr = spDoc->QueryInterface(IID_IMarkupServices, (void **)&pMS);
? if (hr==S_OK)?
? {?
? pMS->CreateMarkupPointer(&pPtr);
? hr = spDoc->QueryInterface(IID_IDisplayServices, (void **)&pDispServices);
? if (hr==S_OK)
? {?
? pDispServices->CreateDisplayPointer(&dpPtr);
? pDispServices->GetCaret(&spCaret);
? pMS->CreateMarkupPointer(&pPtr);
? pPtr->MoveAdjacentToElement( pElem, ELEM_ADJ_AfterEnd);
? dpPtr->MoveToMarkupPointer(pPtr, dpPtr);
? spCaret->MoveCaretToPointer(dpPtr, TRUE, CARET_DIRECTION_SAME);
? }
? }
}

上面的代碼中,pElem 是我新插入的元素

實在想不到好辦法,最後衹好用下面這個笨方法

HRESULT hr;?
CComPtr <IHTMLTxtRange> txtRange;?
CComPtr <IHTMLSelectionObject> pSelection;?
spDoc->get_selection(&pSelection);?
if (pSelection)?
{?
? CComPtr <IDispatch> pDispRange;?
? pSelection->createRange(&pDispRange);?
? if (pDispRange)?
? {?
? hr = pDispRange->QueryInterface(IID_IHTMLTxtRange, (void**)&txtRange);?
? if ( SUCCEEDED(hr) && txtRange )?
? {?
? txtRange->collapse(VARIANT_TRUE);?
? if (pElem)?
? {?
? if (SUCCEEDED(txtRange->moveToElementText(pElem)))?
? { long n;
? txtRange->move(L"character", 1, &n); // 向前進一步
? txtRange->move(L"character", -1, &n); // 然後退回去,這樣就移動了光標?
? txtRange->select();?
? txtRange->scrollIntoView();?
? }?
? }?
? txtRange.Release();?
? }?
? pDispRange.Release();?
? }?
? pSelection.Release();?
}

總結

以上是生活随笔為你收集整理的改變HTML中的光標問題的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。