如何用C编写文本编辑器(12)
发布时间:2021-06-06
发布时间:2021-06-06
C#编写文本编辑器
该死循环首先调用Win32API函数 WaitMessage等待Windows消息,若没有任何Windows消息则退出该循环
调用Win32API函数PeekMessage来获得当前Windows消息
若当前消息为鼠标按键松开消息则退出循环
若当前消息为鼠标移动消息则则获得当前鼠标光标位置,根据开始脱拽的鼠标光标位置来绘制橡皮筋矩形
调用Win32API函数GetMessage将当前Windows消息给“吃”掉,然后进入下一次循环 例程退出该循环后就将当前鼠标光标位置和拖拽操作前的鼠标光标位置之差,也就是鼠标光标在整个拖拽操作中移动的距离作为返回值返回给主调函数(HandleMouseDown) 主调函数接受返回的鼠标光标移动的距离,然后根据该距离来进行其他的处理,在这里就是修改对象的大小
在此插上一段,其实.NET框架还是比较适合Win32的API编程,
System.Windows.Form.Control的Handle属性就是窗体的句柄,可以被其他
Win32API作为参数调用,CreateParams属性实际上就是CreateWindowEx的参数,重载它就可以设置控件创建时的样式;WndProc就是控件处理所有的Windows消息的默认过程,也可以重载它自己来处理底层的Windows消息。
System.Windows.Forms.Application的静态函数AddMessageFilter和
RemoveMessageFilter就可以很方便的为整个应用程序添加或删除"钩子"程序。C#语言可以使用System.Runtime.InteropServices.DllImport来导入声明DLL文件中的API函数。
光标的控制
光标就是文本编辑器在获得输入焦点时在当前插入点闪烁显示的一个小方块,当文本编辑器没有获得输入焦点时就不会显示光标。Windows操作系统已经提供了一套处理光标的API函数,包括创建光标CreateCaret,设置光标位置SetCaretPos,显示光标ShowCaret和隐藏光标HideCaret。使用API创建和显示光标后,操作系统会自动的让光标闪烁。文本编辑器要提供处理光标的例程供其他程序模块调用。文本编辑器首先根据当前插入点的位置计算光标在文档视图区域中的位置,还需要根据文档处理插入模式还是修改模式计算光标的大小。若光标所在位置在用户界面上没有显示出来则还需要滚动文本编辑器已保证光标所在区域处于可视区域。然后调用API来创建和显示光标。文本编辑器还重载OnGotFocus过程来显示光标,重载OnLostFocus过程隐藏光标。注意重载这两个过程时需要在最后必须调用base.OnGotFocus和base.OnLostFocus,若不这样则文本编辑器嵌入在网页中运行会发生无法获得输入焦点的错误。光标控制还涉及到输入法的控制,我们中国人使用文本编辑器会使用到各种中文输入法。Windows操作系统也提供了一套API来控制输入法。在本文本编辑器中重载OnKeyPress方法来获得用户输入的字符,此时的字符可以是键盘直接输入的ASCI字符,也可以是使用某种输入法输入的汉字。这些操作系统都已经实现了,为什么还要控制输入法。原因是使用默认处理时输入法的浮动窗口会显示在屏幕中间而不会随着插入点的位置而移动。一般的中文输入法的用户界面为一个浮动窗口,各种建议输入的中文字符显示在这个浮动窗口中供人选择。想想看,当插入点在屏幕的某个边角中,而输入法的浮动窗口在屏幕中央,这样输入中文比较累。但若输入的浮动窗体随着插入点的移动而移动,浮动窗体和插入点紧密的靠在一起,这样输入中文就不是很累了。Win32API函数ImmSetCompositionWindow能对指定的窗体控制输入法浮动窗体的显示位置,当插入点改变时调用该API函数就能让输入法浮动窗体随着插入点跑了。
上一篇:川教版历史二轮复习资料
下一篇:安全生产宣传栏[内容]