野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6623|回复: 3

对回调函数的疑问?

[复制链接]
发表于 2017-8-3 20:57:14 | 显示全部楼层 |阅读模式
最近学习遇到了一些疑惑,希望论坛的朋友们能够答答疑。首先是case WM_PAINT:  重绘我在百度的时候有人时候在GUI_Delay的时候执行的,也就是说我在while(1)里一直执行GUI_delay(50);然后就是每隔50ms执行一次case WM_PAINT:  里的指令嘛??但是如果我又定义了一个按钮,然后点击按钮执行一次GUI_Clear()是不是刚才清屏以后图像又会重新显示??然而我仿真的时候并不是。。还有如果我没有创建对话框,单单只是创建按钮,然后执行的时候GUI_Clear()的时候会把这些按钮给隐藏了嘛。。。刚才就是这样,创建了八个按钮,然后点击其中一个触发GUI_Delay();导致其他七个按钮隐藏了。。。但是在那个位置点击却发现按钮还在。。还有就是怎么在创建的对话框上绘制曲线啊,并不是graph控件,发现其显示速度很慢。暂时就这么点了,想大家能够帮帮忙
回复

使用道具 举报

发表于 2017-8-4 08:05:02 | 显示全部楼层
UI的绘制是在GUI_Exec()或者GUI_Delay()里面执行的,而且是在必要的时候才会重绘.你最好把代码也发过来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-4 09:51:52 | 显示全部楼层
x灼灼其华 发表于 2017-8-4 08:05
UI的绘制是在GUI_Exec()或者GUI_Delay()里面执行的,而且是在必要的时候才会重绘.你最好把代码也发过来
  1. #include "GUI.h"
  2. #include "BUTTON.h"






  3. void show()
  4. {


  5.         GUI_SetFont(&GUI_Font8x16);
  6.         //GUI_DispString("Mr.wu\nthe first");
  7.         //设置画笔的粗细及颜色,以及矢量函数才能设置size
  8.         GUI_SetPenSize(10);
  9.         GUI_SetColor(GUI_RED);
  10.         GUI_DrawLine(80, 10, 240, 90);
  11.         GUI_DrawLine(80, 90, 240, 10);
  12.         GUI_SetBkColor(GUI_BLACK);
  13.         GUI_SetColor(GUI_WHITE);
  14.         //设置正常模式
  15.         GUI_SetTextMode(GUI_TM_NORMAL);
  16.         GUI_DispStringHCenterAt("GUI_TM_NORMAL", 160, 10);
  17.         //翻转文本
  18.         GUI_SetTextMode(GUI_TM_REV);
  19.         GUI_DispStringHCenterAt("GUI_TM_REV", 160, 26);
  20.         //透明文本
  21.         GUI_SetTextMode(GUI_TM_TRANS);
  22.         GUI_DispStringHCenterAt("GUI_TM_TRANS", 160, 42);
  23.         //异或文本
  24.         GUI_SetTextMode(GUI_TM_XOR);
  25.         GUI_DispStringHCenterAt("GUI_TM_XOR", 160, 58);

  26.         GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
  27.         GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 160, 74);



  28. }
  29. static void create_button0()
  30. {
  31.         BUTTON_Handle hButton0;

  32.         hButton0 = BUTTON_Create(260, 5, 50, 20, GUI_ID_BUTTON0, WM_CF_SHOW);

  33.         BUTTON_SetText(hButton0, "Start");
  34. }
  35. static void create_button1()
  36. {
  37.         BUTTON_Handle hButton1;

  38.         hButton1 = BUTTON_Create(260, 35, 50, 20, GUI_ID_BUTTON1, WM_CF_SHOW);

  39.         BUTTON_SetText(hButton1, "Start");
  40. }



  41. static void button_show()
  42. {

  43.         create_button0();
  44.         create_button1();

  45. }

  46. static void _cbBkWin(WM_MESSAGE * pMsg)
  47. {
  48.         WM_HWIN hWin;
  49.         int NCode, Id;
  50.         hWin = pMsg->hWin;
  51.         switch (pMsg->MsgId)
  52.         {
  53.         case WM_INIT_DIALOG:
  54.                  
  55.                 break;
  56.         case  WM_PAINT:
  57.                  show();
  58.                 break;

  59.         case  WM_NOTIFY_PARENT:
  60.                 Id = WM_GetId(pMsg->hWinSrc);
  61.                 NCode = pMsg->Data.v;
  62.         case GUI_ID_BUTTON0:
  63.                 switch (NCode)
  64.                 {
  65.                 case WM_NOTIFICATION_CLICKED:
  66.                         GUI_SetPenSize(10);
  67.                         GUI_SetColor(GUI_RED);
  68.                         GUI_DrawLine(80, 10, 240, 90);
  69.                         GUI_DrawLine(80, 90, 240, 10);
  70.                         break;
  71.                 }
  72.         case GUI_ID_BUTTON1:
  73.                 switch (NCode)
  74.                 {
  75.                 case WM_NOTIFICATION_CLICKED:
  76.                          GUI_Clear();
  77.                                 break;
  78.                 }

  79.                 /*
  80.         case GUI_ID_BUTTON3:
  81.                 switch (NCode)
  82.                 {
  83.                 case WM_NOTIFICATION_RELEASED:
  84.                         GUI_SetPenSize(10);
  85.                         GUI_SetColor(GUI_RED);
  86.                         GUI_DrawLine(80, 10, 240, 90);
  87.                         GUI_DrawLine(80, 90, 240, 10);
  88.                         break;
  89.                 }
  90.         case GUI_ID_BUTTON4:
  91.                 switch (NCode)
  92.                 {
  93.                 case WM_NOTIFICATION_RELEASED:
  94.                         GUI_SetPenSize(10);
  95.                         GUI_SetColor(GUI_RED);
  96.                         GUI_DrawLine(80, 10, 240, 90);
  97.                         GUI_DrawLine(80, 90, 240, 10);
  98.                         break;
  99.                 }
  100.         case GUI_ID_BUTTON5:
  101.                 switch (NCode)
  102.                 {
  103.                 case WM_NOTIFICATION_RELEASED:
  104.                         GUI_SetPenSize(10);
  105.                         GUI_SetColor(GUI_RED);
  106.                         GUI_DrawLine(80, 10, 240, 90);
  107.                         GUI_DrawLine(80, 90, 240, 10);
  108.                         break;
  109.                 }
  110.         case GUI_ID_BUTTON6:
  111.                 switch (NCode)
  112.                 {
  113.                 case WM_NOTIFICATION_RELEASED:
  114.                         GUI_SetPenSize(10);
  115.                         GUI_SetColor(GUI_RED);
  116.                         GUI_DrawLine(80, 10, 240, 90);
  117.                         GUI_DrawLine(80, 90, 240, 10);
  118.                         break;
  119.                 }
  120.         case GUI_ID_BUTTON7:
  121.                 switch (NCode)
  122.                 {
  123.                 case WM_NOTIFICATION_RELEASED:
  124.                         GUI_SetPenSize(10);
  125.                         GUI_SetColor(GUI_RED);
  126.                         GUI_DrawLine(80, 10, 240, 90);
  127.                         GUI_DrawLine(80, 90, 240, 10);
  128.                         break;
  129.                 }
  130.                 */
  131.                 break;


  132.         }



  133. }


  134. void MainTask()
  135. {
  136.        
  137.         GUI_Init();
  138.         GUI_SetBkColor(GUI_BLACK);
  139.         GUI_Clear();
  140.         button_show();


  141.         WM_SetCallback(WM_HBKWIN, _cbBkWin);

  142.         while (1)

  143.         {

  144.                 GUI_Delay(10);
  145.         }


  146.   





  147. }

复制代码

这代码我只是写来看看是怎么运行的,然后我发现刚开始运行的时候,原本想要按下键显示的也一并显示了,然后两个按键都有清屏的效果。。我也不知道怎么回事,你帮忙看下好嘛。。
回复 支持 反对

使用道具 举报

发表于 2017-8-28 12:56:51 | 显示全部楼层
我这几天没注意你的答复, 你的回调函数里面switch语句嵌套了, 但是没有两个break, 问题也许出现在这里
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 13:43 , Processed in 0.031517 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表