救命啊 HTML控件选择的疑难杂症

liqianhong 2013-03-02 04:29:56
我的项目需要做HTML编辑器
用CHtmlEditView 要实现如下的功能
1。 通过鼠标拖动一个矩形选择多个HTML 控件
2。能将选择的多个控件进行左对齐,右对齐等操作

现在上面的第一个功能基本实现了
实现第二个功能的时候缺遇到了前所未有的问题,经过了很多尝试,都失败了。
VC的很多文档都是英文的,我看着都很累

我遇到的问题是:
在实现第二个功能的时候,需要将一个控件做为一个基准控件,其他控件都参照这个控件的位置
进行对齐操作。现在选择了多个控件的时候,被选择的控件其中一个的四周的小方块显示为白色,好像是焦点控件。
其他选中的控件四周是黑色的小方块。我在对齐处理的时候想获得哪一个控件中当前选择的。也就是四周白色小方块的那个。

我做了如下的尝试,但都以失败告终
1。通过document.activeElement得到那个焦点控件。这个属生在IE直接打开的时候能正常的取得。
在ChtmlEditView中编辑的时候获得的始终是body,所以浪费了一天后,我不得不放弃了这种尝试。

2. 我直接取IHtmlControlRange里的最后一个控件做为基准控件。
但这种也有问题,通过鼠标拖动选择的控件,也就是调用IHtmlControlRange::select进行选择的时候。
列表中的第一个会显示为白色的小方块,而通过按ctrl 一个一个选择的时候,最后选择的那个会显示为白色的小方块。
两者的顺序刚好相反。我相用setactive,focus来强制使希望的那个变成焦点。但这两个方法最把其他选择给取消掉,所以不能用。
我又试了模拟按键点击来将列表中最后一个控件,点成焦点。但窗口有滚动条的时候,隐藏部分的控件没法处理。
所以,在模拟鼠标点击位置还没弄正确的时候,我就放弃了这种尝试。

3。用实现自己的I...Designer来拦截选中事件。希望能记住选择的顺序。
发现,鼠标移动事件等可以触发,onfocus,等事件不能触发。

4。用accSelect 进行选择,希望选择的最后一个能变成焦点控件,也就是按ctrl进行动作的时候效果一样。
看着这个函数的参数,能满足我的需要。但不知道哪里弄错了,经过很多尝试都不能选择成功。

5。用ISelectionServices的AddElementSegment来实现选择。
ISegment。。。有一个SetPrimary 好像是我需要的。但是,又不知道哪里不对,AddElementSegment后,控件并没有被选中。

哪位大师能救救我啊,实在不行我只能蛮干了,在IHtmlControlRange中最后一个控件给它画上一个方框,以示该控件是焦点。
在位置对齐操作的时候,将会以该控件作为基准 。








...全文
145 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧