硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2531|回复: 3
收起左侧

[emWin] 如何在窗口中绘制矩形填充色块

[复制链接]

15

主题

56

回帖

101

积分

初级会员

积分
101
发表于 2018-8-31 13:30:25 | 显示全部楼层 |阅读模式
屏幕上要做个色彩校准,方便检查屏幕是否有坏点之类的,可是我在窗口的paint消息中只能绘制填充一个矩形,不知道为什么,下图分别是模拟的效果和预计达成的效果
IMG_20180831_132025.jpg
IMG_20180831_132037.jpg
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-8-31 13:33:54 | 显示全部楼层
代码是这样写的,创了一个窗口和回调函数,在回调函数中设置颜色
  1. static void _cbWindow(WM_MESSAGE * pMsg) {
  2.         switch (pMsg->MsgId) {
  3.         case WM_PAINT:
  4.                 switch(GlobalColor){
  5.                 case e_ColorBlack:
  6.                         GUI_SetColor(GUI_BLACK);
  7.                         GUI_FillRect(0, 0, 800, 480);
  8.                         break;
  9.                 case e_ColorWhite:
  10.                         GUI_SetColor(GUI_WHITE);
  11.                         GUI_FillRect(0, 0, 800, 480);
  12.                         break;
  13.                 case e_ColorRed:

  14.                         GUI_SetColor(GUI_RED);
  15.                         GUI_FillRect(0, 0, 800, 480);

  16.                         break;
  17.                 case e_ColorGreen:
  18.                         GUI_SetColor(GUI_GREEN);
  19.                         GUI_FillRect(0, 0, 800, 480);
  20.                         break;
  21.                 case e_ColorBlue:
  22.                         GUI_SetColor(GUI_BLUE);
  23.                         GUI_FillRect(0, 0, 800, 480);

  24.                         break;
  25.                 case e_ColorBlocks:
  26.                         GUI_SetColor(GUI_MAKE_COLOR(0xF58388));
  27.                         GUI_FillRect(0, 0, 270, 80);
  28.                         GUI_SetColor(GUI_MAKE_COLOR(0xf36d74));
  29.                         GUI_FillRect(0, 80, 270, 80);
  30. //                        GUI_SetColor(0xf1565e);
  31. //                        GUI_FillRect(0, 160, 270, 80);
  32. //                        GUI_SetColor(0xef434b);
  33. //                        GUI_FillRect(0, 240, 270, 80);
  34. //                        GUI_SetColor(0xed2c35);
  35. //                        GUI_FillRect(0, 320, 270, 80);
  36. //                        GUI_SetColor(0xe1131e);
  37. //                        GUI_FillRect(0, 400, 270, 80);
  38. //
  39. //                        GUI_SetColor(0xb5ffb5);
  40. //                        GUI_FillRect(270, 0, 260, 80);
  41. //                        GUI_SetColor(0x80ff80);
  42. //                        GUI_FillRect(270, 80, 260, 80);
  43. //                        GUI_SetColor(0x55ff55);
  44. //                        GUI_FillRect(270, 160, 260, 80);
  45. //                        GUI_SetColor(0x15ff15);
  46. //                        GUI_FillRect(270, 240, 260, 80);
  47. //                        GUI_SetColor(0x00dd00);
  48. //                        GUI_FillRect(270, 320, 260, 80);
  49. //                        GUI_SetColor(0x00aa00);
  50. //                        GUI_FillRect(270, 400, 260, 80);
  51. //
  52. //                        GUI_SetColor(0x9191ff);
  53. //                        GUI_FillRect(530, 0, 270, 80);
  54. //                        GUI_SetColor(0x6a6aff);
  55. //                        GUI_FillRect(530, 80, 270, 80);
  56. //                        GUI_SetColor(0x3c3cff);
  57. //                        GUI_FillRect(530, 160, 270, 80);
  58. //                        GUI_SetColor(0x1a1aff);
  59. //                        GUI_FillRect(530, 240, 270, 80);
  60. //                        GUI_SetColor(0x0000f9);
  61. //                        GUI_FillRect(530, 320, 270, 80);
  62. //                        GUI_SetColor(0x0000d5);
  63. //                        GUI_FillRect(530, 400, 270, 80);
  64.                         break;
  65.                 case e_GrayScale:
  66.                         break;
  67.                 }
  68.                 break;               
  69.         }
  70. }


  71. void ColorPaint(e_ColorCalibrating Color)
  72. {
  73.         static WM_HWIN hWin;
  74.        
  75.         static uint8_t flag = 1;
  76.         if (1 == flag) {
  77.                 hWin = WINDOW_CreateEx(0, 0, 800, 480, MainMenuhWin, WM_CF_STAYONTOP | WM_CF_HIDE, 0, 0, _cbWindow);
  78.                 flag = 0;
  79.         }

  80.         switch(Color){
  81.                 case e_BackToNormal:
  82.                         WM_HideWindow(hWin);
  83.                         break;

  84.                 case e_ColorBlack:               
  85.                 case e_ColorWhite:
  86.                 case e_ColorRed:
  87.                 case e_ColorGreen:
  88.                 case e_ColorBlue:
  89.                 case e_ColorBlocks:
  90.                 case e_GrayScale:
  91.                         GlobalColor = Color;
  92.                         WM_InvalidateWindow(hWin);
  93.                         WM_ShowWindow(hWin);
  94.                        
  95.                         break;

  96.                 default:
  97.                         break;
  98.         }

  99. }
复制代码
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-8-31 13:35:30 | 显示全部楼层
当我想绘制多个色块时总是只有一个色块被正确绘制,其他的显示不出来
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-8-31 13:58:53 | 显示全部楼层
问题已解决,函数参数填错了,丢人丢人
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-17 06:21 , Processed in 0.436075 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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