简易文本编辑器分析
来源:互联网 发布:桂圆淘宝 编辑:程序博客网 时间:2024/04/29 00:48
一、消息机制分析
编辑代码的时候,直接源文件编辑
switch (message) { case WM_INPUTLANGCHANGE: //当输入法发生切换时,此消息发送 dwCharSet = wParam ; //wParam参数是新输入法使用的字符集 // fall through case WM_CREATE: hdc = GetDC (hwnd) ; SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0, dwCharSet, 0, 0, 0, FIXED_PITCH , NULL)) ; GetTextMetrics (hdc, &tm) ; cxChar = tm.tmAveCharWidth ; cyChar = tm.tmHeight ; DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ; ReleaseDC (hwnd, hdc) ; case WM_SIZE://清空内存区,把内存区置为空格字符,然后设置光标为0,0位置,最后刷新,重新绘制这边没有用break; swith(i) case 结构 case 1 , case 2, case 3 等价于 if i =1 jmp case1if i = 2 jmp case2if i = 3 jmp case3case1case2case3
二、交互性分析
1、重绘消息处理
case WM_PAINT //将内存中所有字符全部输出hdc = BeginPaint (hwnd, &ps) ; SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0, dwCharSet, 0, 0, 0, FIXED_PITCH, NULL)) ; for (y = 0 ; y < cyBuffer ; y++) TextOut (hdc, 0, y * cyChar, & BUFFER(0,y), cxBuffer) ; DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ; EndPaint (hwnd, &ps) ; return 0 ;
2、字符输入消息处理
case WM_CHAR: //每输入一个字符,则将其所在内存区域的位置定位到TextOut()中的x,y,再将其输出,WM_SIZE消息已经将内存区置为' ';所以后面的不会输出//然后,再换一行,验证是否到本行的终点,到了则行位置为0;再++列,判断是否到了所在行的列末尾,到了则列置0, for (i = 0 ; i < (int) LOWORD (lParam) ; i++) { switch (wParam) { case x... break;;//这里是光标控制处理 default: // character codes BUFFER (xCaret, yCaret) = (TCHAR) wParam ; HideCaret (hwnd) ; hdc = GetDC (hwnd) ; SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0, dwCharSet, 0, 0, 0, FIXED_PITCH, NULL)) ; TextOut (hdc, xCaret * cxChar, yCaret * cyChar, & BUFFER (xCaret, yCaret), 1) ; DeleteObject ( SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ; ReleaseDC (hwnd, hdc) ; ShowCaret (hwnd) ; if (++xCaret == cxBuffer) { xCaret = 0 ; if (++yCaret == cyBuffer) yCaret = 0 ; } break ; } } SetCaretPos (xCaret * cxChar, yCaret * cyChar) ;
2、光标处理
主要是设置光标的位置,
处理VK_DELETE:时,会将内存区该行的数据从后面拷贝到前面,再输出
case WM_KEYDOWN:switch(wParam){ case VK_HOME://设置Home键
3、注意事项
WM_CHAR消息中,如果是Unicode界面的程序,此时能接受中文汉字;非Unicode界面程序,输入法对于双字节字符,会连续发送两个字节
三、总结
主要是WM_SIZE消息,释放了适合页面大小的一段内存,然后在编辑时,进行定位操作
参考:1、插入符号的函数和TYPER程序
2、WM_INPUTLANGCHANGE消息
3、windows键盘消息和字符集
4、switch语句的分析
5、Win32输入编程技术分析
6、\n和\r的含义
7、WM_IME_CHAR和WM_CHAR的区别
- 简易文本编辑器分析
- 【文本】简易文本编辑器分析
- java -简易文本编辑器
- 简易文本编辑器
- 简易文本编辑器
- 简易富文本编辑器
- Qt简易文本编辑器
- 简易java文本编辑器 续
- (数据结构)简易文本编辑器
- C++实现简易文本编辑器
- Java swing 简易文本编辑器
- 文本编辑器代码分析
- 简易文本编辑器(Delphi源码)
- java -简易文本编辑器 修改1
- [原创]简易文本编辑器( 无界面)
- Java实现简易的文本编辑器
- 用C++实现简易的文本编辑器
- 用C++实现简易文本编辑器
- Servlet的生命周期?
- 晶振与晶振的作用
- 禅修促进自我成长
- Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)
- Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级)
- 简易文本编辑器分析
- strchr
- C++图结构的图结构操作示例
- U-Boot启动过程完全分析
- poj 2840 Big Clock
- 接口
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级)
- 无线高清显示技术