完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
50.1.1 多行文本支持的通知代码
以下事件是多行文本控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:
|
|
|
|
|
|
50.1.2 多行文本支持的键盘反应
如果控件具有输入焦点,则它将对下列各键做出反应:
|
|
|
|
|
|
50.2 官方WIDGET_Multiedit实例
官方的这个实例很好的演示了Multiedit的使用,这个例子在模拟器中的位置: |
|
|
|
|
|
源码如下(程序中进行了详细的注释,代码有点长,这里只贴出了主代码):
复制代码 /********************************************************************* * * _DemoMultiedit */ static void _DemoMultiedit(void) { GUI_RECT Rect; int WinFlags; _hFrame = 1; _Overwrite = 0; _ReadOnly = 0; _Password = 0; /* 下面的几个函数主要实现框架窗口的创建 */ _ChangeInfoText("Create framewin", SPEED); /* 创建框架窗口 */ _hFrame = FRAMEWIN_CreateEx(60, 80, 200, 120, WM_HBKWIN, WM_CF_SHOW, 0, 0, "Notepad", 0); /* 获得框架窗口的客户端窗口 */ _hClient = WM_GetClientWindow(_hFrame); /* 设置框架窗口的回调函数 */ _pcbFrameWin = WM_SetCallback(_hFrame, _cbFrameWin); /* 设置框架窗口中客户端窗口的回调函数 */ _pcbFrameWinClient = WM_SetCallback(_hClient, _cbFrameWinClient); /* 设置框架窗口的属性 */ FRAMEWIN_SetMoveable(_hFrame, 1); FRAMEWIN_SetActive(_hFrame, 1); FRAMEWIN_SetTextAlign(_hFrame, GUI_TA_HCENTER | GUI_TA_VCENTER); FRAMEWIN_SetFont(_hFrame, &GUI_Font8x12_ASCII); FRAMEWIN_SetTitleHeight(_hFrame, 16); /* 增加框架窗口按钮,主要是关闭,最小化,最大化按钮 */ if (_ChangeInfoText("Add framewin buttons", SPEED)) return; FRAMEWIN_AddCloseButton(_hFrame, FRAMEWIN_BUTTON_LEFT, 0); FRAMEWIN_AddMaxButton(_hFrame, FRAMEWIN_BUTTON_RIGHT, 0); FRAMEWIN_AddMinButton(_hFrame, FRAMEWIN_BUTTON_RIGHT, 1); WM_InvalidateWindow(_hFrame); /* 创建按钮 */ if (_ChangeInfoText("Add option buttons", SPEED)) return; _hWrapButton = _CreateLButton("None", 0, 36, 16, _hClient, ID_NONEWRAP); _CreateLButton("Word", 37, 36, 16, _hClient, ID_WORDWRAP); _CreateLButton("Char", 74, 36, 16, _hClient, ID_CHARWRAP); _CreateRButton("PSW", 52, 25, 16, _hClient, ID_PASSWORD); _CreateRButton("OVR", 26, 25, 16, _hClient, ID_OVERWRITE); _CreateRButton("R/O", 0, 25, 16, _hClient, ID_READONLY); _SetButtonState(_hWrapButton, 1); /* 创建框架窗口 */ if (_ChangeInfoText("usingnMULTIEDIT_CreateEx", SPEED)) return; WinFlags = WM_CF_SHOW | WM_CF_ANCHOR_RIGHT | WM_CF_ANCHOR_LEFT | WM_CF_ANCHOR_TOP | WM_CF_ANCHOR_BOTTOM; WM_GetClientRectEx(_hClient, &Rect); /* 在框架窗口的客户端窗口中创建多行文本控件 */ _hMEdit = MULTIEDIT_CreateEx(0, 0, 0, Rect.y1 - 16 + 1, _hClient, WinFlags, MULTIEDIT_CF_INSERT, 0, 0, ""); /* 设置多行文本控件的回调函数 */ _pcbMultiEdit = WM_SetCallback(_hMEdit, _cbMultiEdit); /* 激活自动使用水平滚动条 */ MULTIEDIT_SetAutoScrollH(_hMEdit, 1); /* 激活自动使用垂直滚动条 */ MULTIEDIT_SetAutoScrollV(_hMEdit, 1); /* 设置聚焦 */ WM_SetFocus(_hMEdit); /* 下面主要是演示一下多行文本控件支持的几个API函数 */ if (_ChangeInfoText("usingnMULTIEDIT_SetText", SPEED)) return; /* 设置文本 */ MULTIEDIT_SetText(_hMEdit, "This sample demonstrates the use of a multiedit widget!"); /* 设置字体 */ if (_ChangeInfoText("usingnMULTIEDIT_SetFont", SPEED)) return; MULTIEDIT_SetFont(_hMEdit, &GUI_Font16_1); /* 设置文本颜色 */ if (_ChangeInfoText("usingnMULTIEDIT_SetTextColor", SPEED)) return; MULTIEDIT_SetTextColor(_hMEdit, 0, 0xE00000); /* 设置背景色 */ if (_ChangeInfoText("usingnMULTIEDIT_SetBkColor", SPEED)) return; MULTIEDIT_SetBkColor(_hMEdit, 0, 0xD0FFFF); /* 启用字词换行 */ if (_ChangeInfoText("usingnMULTIEDIT_SetWrapWord", SPEED)) return; MULTIEDIT_SetWrapWord(_hMEdit); /* 设置字词换行按钮的状态 */ _SetButtonState(_hWrapButton, 0); _hWrapButton = WM_GetDialogItem(_hClient, ID_WORDWRAP); _SetButtonState(_hWrapButton, 1); /* 用于设置边界 */ if (_ChangeInfoText("usingnMULTIEDIT_SetHBorder", SPEED)) return; MULTIEDIT_SetHBorder(_hMEdit, 3); /* 设置提示文本 */ if (_ChangeInfoText("usingnMULTIEDIT_SetPrompt", SPEED)) return; MULTIEDIT_SetPrompt(_hMEdit, "Type: "); if (_ChangeInfoText("Play with multiedit...", SPEED)) return; while (_hFrame) { GUI_Delay(100); } } /********************************************************************* * * public code * ********************************************************************** */ /********************************************************************* * * MainTask */ void MainTask(void) { GUI_Init(); #if GUI_SUPPORT_MEMDEV WM_SetCreateFlags(WM_CF_MEMDEV); #endif GUI_CURSOR_Show(); WM_SetCallback(WM_HBKWIN, _cbBkWin); while(1) { /* 演示多行文本 */ _DemoMultiedit(); *_acInfoText = 0; WM_InvalidateWindow(WM_HBKWIN); GUI_Delay(SPEED); } } |
|
|
|
|
|
50.4 总结
本期教程主要是跟大家讲解了多行文本控件的基础知识。希望大家可以把本期教程中讲的这两个例子跑跑,然后自己设计一个相关的例子进行试验学习。教程中只是使用了部分的多行文本控件API,其它的API大家都可以试试。 |
|
|
|
|
|
503 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1756 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1183 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1053 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1287 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12022 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 21:04 , Processed in 0.777758 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号