5.6 五个数值显示窗口的快速刷新 五个数值显示窗口是指的下面这五个: 主要有幅值窗口,两个状态窗口,频率窗口和系统信息窗口。这几个窗口的创建都是以对话框的形式创建,方便管理。对话框回调函数的WM_PAINT消息里面通过大量的2D函数进行绘制,每次刷新数值还是比较影响系统性能的,为了降低影响,需要提前将其绘制到存储设备里面,跟本章节5.2小节的方法类似。我们这里以其中一个状态窗口为例进行说明,WM_PAINT消息里面要绘制如下这些图形和字符: - /*
- *********************************************************************************************************
- * 函 数 名: PaintDialogStatus1
- * 功能说明: 状态窗口的回调函数重绘消息
- * 形 参:pMsg 指针地址
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void PaintDialogStatus1(WM_MESSAGE * pMsg)
- {
- /* 清背景色 */
- GUI_SetBkColor(0x905040);
- GUI_Clear();
-
- /* 绘制填充的抗锯齿圆角矩形 */
- GUI_SetColor(GUI_BLACK);
- GUI_AA_FillRoundedRect(0, 0, 509, 34, 10);
-
- /* 绘制抗锯齿圆角矩形 */
- GUI_SetColor(0XEBCD9E);
- GUI_SetPenSize(2);
- GUI_AA_DrawRoundedRect(0, 0, 509, 34, 10);
-
- /* 绘制抗锯齿圆角矩形,并填数值1 */
- GUI_SetColor(GUI_YELLOW);
- GUI_AA_FillRoundedRect(10, 4, 30, 16, 3);
-
- GUI_SetColor(GUI_BLACK);
- GUI_SetFont(&GUI_Font16_1);
- GUI_SetTextMode(GUI_TEXTMODE_TRANS);
- GUI_DispCharAt('1', 16, 3);
-
- /* 绘制抗锯齿圆角矩形,并填数值1 */
- GUI_SetColor(GUI_YELLOW);
- GUI_AA_FillRoundedRect(135, 4, 155, 16, 3);
-
- GUI_SetColor(GUI_BLACK);
- GUI_SetFont(&GUI_Font16_1);
- GUI_SetTextMode(GUI_TEXTMODE_TRANS);
- GUI_DispCharAt('1', 141, 3);
-
- /* 绘制抗锯齿圆角矩形,并填数值1 */
- GUI_SetColor(GUI_YELLOW);
- GUI_AA_FillRoundedRect(260, 4, 280, 16, 3);
-
- GUI_SetColor(GUI_BLACK);
- GUI_SetFont(&GUI_Font16_1);
- GUI_SetTextMode(GUI_TEXTMODE_TRANS);
- GUI_DispCharAt('1', 266, 2);
-
- /* 绘制抗锯齿圆角矩形,并填数值1 */
- GUI_SetColor(GUI_YELLOW);
- GUI_AA_FillRoundedRect(385, 4, 405, 16, 3);
-
- GUI_SetColor(GUI_BLACK);
- GUI_SetFont(&GUI_Font16_1);
- GUI_SetTextMode(GUI_TEXTMODE_TRANS);
- GUI_DispCharAt('1', 391, 2);
-
- /* 绘制抗锯齿圆角矩形,并填数值2 */
- GUI_SetColor(GUI_GREEN);
- GUI_AA_FillRoundedRect(10, 19, 30, 31, 3);
-
- GUI_SetColor(GUI_BLACK);
- GUI_SetFont(&GUI_Font16_1);
- GUI_SetTextMode(GUI_TEXTMODE_TRANS);
- GUI_DispCharAt('2', 16, 18);
-
- /* 绘制抗锯齿圆角矩形,并填数值2 */
- GUI_SetColor(GUI_GREEN);
- GUI_AA_FillRoundedRect(135, 19, 155, 31, 3);
-
- GUI_SetColor(GUI_BLACK);
- GUI_SetFont(&GUI_Font16_1);
- GUI_SetTextMode(GUI_TEXTMODE_TRANS);
- GUI_DispCharAt('2', 141, 18);
-
- /* 绘制抗锯齿圆角矩形,并填数值2 */
- GUI_SetColor(GUI_GREEN);
- GUI_AA_FillRoundedRect(260, 19, 280, 31, 3);
-
- GUI_SetColor(GUI_BLACK);
- GUI_SetFont(&GUI_Font16_1);
- GUI_SetTextMode(GUI_TEXTMODE_TRANS);
- GUI_DispCharAt('2', 266, 18);
-
- /* 绘制抗锯齿圆角矩形,并填数值2 */
- GUI_SetColor(GUI_GREEN);
- GUI_AA_FillRoundedRect(385, 19, 405, 31, 3);
-
- GUI_SetColor(GUI_BLACK);
- GUI_SetFont(&GUI_Font16_1);
- GUI_SetTextMode(GUI_TEXTMODE_TRANS);
- GUI_DispCharAt('2', 391, 18);
- }
复制代码通过下面的方式将其绘制到存储设备里面(系统上电时就进行加载): - /*
- *********************************************************************************************************
- * 函 数 名: DrawWinStatus1Bk
- * 功能说明: 将窗口背景绘制到存储设备里面
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void DrawWinStatus1Bk(void)
- {
- hMemStatus1Dlg = GUI_MEMDEV_CreateFixed(0,
- 0,
- 510,
- 35,
- GUI_MEMDEV_HASTRANS,
- GUI_MEMDEV_APILIST_16,
- GUICC_M565);
- GUI_MEMDEV_Select(hMemStatus1Dlg);
- PaintDialogStatus1(NULL);
- GUI_MEMDEV_Select(0);
- }
复制代码之后将如下函数填到状态窗口回调函数WM_PAINT消息里面即可 - GUI_MEMDEV_WriteAt(hMemStatus1Dlg, 145, 444);
复制代码其它四个窗口的设计方法同理,通过这样的优化,一定程度上降低了GUI刷新的负担。
|