改變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中的光標問題相关推荐

  1. contos7改分辨率_centos6.7修改分辨率的問題

    方法/步骤 1. 修改grub.cfg文件 CentOS 7使用的是grub2,而在grub2中要修改的文件是/boot/grub2/grub.cfg;找到 linux16 /vmlinuz-3.10 ...

  2. linux weblogic 引用antlr.jar,Linux環境下Weblogic部署應用的一些問題

    最近在Linux下Weblogic中部署應用,碰到一些問題,糾結了好久,也查了好多資料,最后總算是成功解決了碰到的各種問題. 這里記錄下遇到的一些問題和解決方法,整體做個總結. 問題一:org.hib ...

  3. 鼠標滑過表格整行改變背景色

    鼠標滑過表格整行改變背景色 <table>     <tr bgcolor="#CCCCCC onMouseOut="this.bgcolor='#00CCCC' ...

  4. 阿諾爾德的「常微分方程」中對「單參變換羣」的定義好像有問題

    見阿諾爾德的「常微分方程」第四頁,他對「單參變換羣」的定義如下: 可是這裏有一個問題,就是,如果$M$是實數集,那麼根據我的博文 M的冪集的勢不大於_M_的所有排列形成的集合的勢 ,可知 M 到它自身 ...

  5. 每天改變或學習一點點 終究聚沙成塔

    在一場國立大學EMBA.高階企業經理人的演講中,我提到簡單的數字遊戲:「1 x 1 x 1 x 1 x 1 x 1 x 1 x 1 x 1 x 1」 1乘1,乘10次,答案會變多少呢? 答案很簡單,當 ...

  6. matlab求最小割,matlab實現圖割算法中的最大流最小割Max-flow/min-cut問題(一)

    本篇主要介紹matlab實現Max-flow/min-cut的方法,介紹一種只實現了Max-flow/min-cut的工具箱Bk_matlab. 一:最大流最小割的由來 了解這個問題之前先說說這個問題 ...

  7. highcharts日常用法的總結之title的樣式改變

    PS:因為在工作中經常會用的這個插件,所以做個日常歸納方便自己查閱,也幫助大家更快速的解決關於這個插件的各種問題和需要的樣式,希望也能幫助大家,謝謝,如有雷同純屬巧合. 1:如何改變畫紅色標題的顏色. ...

  8. 響應式設計中百分比 % 的問題

    問題 為了要能夠解釋得更清楚我們需要實作一小段跟我們會遇到的問題相關的程式碼 .list-item {float: left;width: 33%; } 現在您可能會想知道關於上面這段程式碼有什麼問題 ...

  9. html中百分比都支持吗,響應式設計中百分比%的問題_html/css_WEB-ITnose

    問題 為了要能夠解釋得更清楚我們需要實作一小段跟我們會遇到的問題相關的程式碼 .list-item { float: left; width: 33%;} 現在您可能會想知道關於上面這段程式碼有什麼問 ...

最新文章

  1. Nginx 路由--Location的使用
  2. Spring事务与自定义多线程陷阱
  3. [Servlet]深入掌握Servlet
  4. [vue] 有在vue中使用过echarts吗?踩过哪些坑?如何解决的?
  5. 详解Python中的序列解包(2)
  6. Excel 在某一列中寻找最大值并加粗
  7. 让程序像人一样的去批量下载歌曲?Python采集付费歌曲
  8. 5款App帮你轻松搞定自定义锁屏
  9. Rust入门教程(三):Package、Crate 和 Module
  10. 计算机辅助设计基础试题,CAD基础知识自测题
  11. 玩转OpenStack网络Neutron(1)--热身
  12. 括弧匹配检验:比较基础的栈
  13. 使用VS+QT问题小结
  14. 安卓手机管理_Mac上的安卓手机管理工具:HandShaker for mac
  15. 代码优化小技巧-使用enum统一返回code码
  16. 万兆NAS存储网络组建方案
  17. kpw4换壁纸_kindle 篇五:kindle paperwhite4使用30天总结
  18. 计算机信息管理专业论文初稿,学生信息管理系统论文-初稿.doc
  19. 智能交通系统,可以提高通行效率,节约能源,降低空气污染的水平
  20. 诺基亚java游戏那种_非诺基亚手机如何玩S40 Java游戏_网易手机频道

热门文章

  1. Elasticsearch 自定义分析器Analyzer
  2. 互联网被滥用的沟通“话术”
  3. sql怎么撤回update_零基础快速自学SQL,2天足矣!
  4. ios keychain 不被清理_苹果手机卸载软件会不会有残留?带你认识iOS沙盒机制!...
  5. 基于边缘计算的森林火警监测系统
  6. 作者:​邵蓥侠(1988-),男,博士,北京明略软件系统有限公司技术经理。...
  7. 【2016年第6期】专题:科学数据与创新应用
  8. 【VB.NET】测验题目Quiz2
  9. 二进制高低位交换の琐事(洛谷P1100题题解,Java语言描述)
  10. 初识vue之axios的封装