|
本帖最后由 Mark 于 2018-5-22 14:47 编辑
问题如题:
- /*******************************************************************
- *
- * _Draw
-
- Draws the graph area
- */
- static void _Draw(void * p) {
- int i;
- PARAM * pParam = (PARAM *)p;
- GUI_SetBkColor(GUI_BLACK);
- GUI_SetColor(GUI_DARKGRAY);
- GUI_ClearRect(19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21));
- for (i = 0; i < (YSIZE / 2); i += 20) {
- GUI_DrawHLine((LCD_YSIZE - 20) - (YSIZE / 2) + i, 19, (LCD_XSIZE - 2));
- if (i) {
- GUI_DrawHLine((LCD_YSIZE - 20) - (YSIZE / 2) - i, 19, (LCD_XSIZE - 2));
- }
- }
- for (i = 40; i < (LCD_XSIZE - 20); i += 40) {
- GUI_DrawVLine(18 + i, (LCD_YSIZE - 20) - YSIZE, (LCD_YSIZE - 21));
- }
- GUI_SetColor(COLOR_GRAPH0);
- GUI_DrawGraph(pParam->aY, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - YSIZE);
- }
- /*******************************************************************
- *
- * _Draw2
- */
- static void _Draw2(void * p) {
- PARAM * pParam = (PARAM *)p;
- _Draw(p);
- GUI_SetColor(COLOR_GRAPH1);
- GUI_DrawGraph(pParam->aY+15, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - YSIZE);
- }
- /*******************************************************************
- *
- * _Label
- Labels the x & y-axis
- */
- static void _Label(void) {
- int x, y;
- GUI_SetBkColor(GUI_RED);
- GUI_Clear();
- GUI_SetColor(GUI_WHITE);
- GUI_SetFont(&GUI_Font24_ASCII);
- GUI_DispStringHCenterAt("MEMDEV_DrawGraph - Sample", 160, 5);
- GUI_SetPenSize(1);
- GUI_ClearRect(0, (LCD_YSIZE - 21) - YSIZE, (LCD_XSIZE - 1), (LCD_YSIZE - 1));
- GUI_DrawRect(18, (LCD_YSIZE - 21) - YSIZE, (LCD_XSIZE - 1), (LCD_YSIZE - 20));
- GUI_SetFont(&GUI_Font6x8);
- for (x = 0; x < (LCD_XSIZE - 20); x += 40) {
- int xPos = x + 18;
- GUI_DrawVLine(xPos, (LCD_YSIZE - 20), (LCD_YSIZE - 14));
- GUI_DispDecAt(x / 40, xPos - 2, (LCD_YSIZE - 9), 1);
- }
- for (y = 0; y < YSIZE / 2; y += 20) {
- int yPos = (LCD_YSIZE - 20) - YSIZE / 2 + y;
- GUI_DrawHLine(yPos, 13, 18);
- if (y) {
- GUI_GotoXY(1, yPos - 4);
- GUI_DispSDec(-y / 20, 2);
- yPos = (LCD_YSIZE - 20) - YSIZE / 2 - y;
- GUI_DrawHLine(yPos, 13, 18);
- GUI_GotoXY(1, yPos - 4);
- GUI_DispSDec(y / 20, 2);
- } else {
- GUI_DispCharAt('0', 7, yPos - 4);
- }
- }
- }
- static void _GetSineData(I16 * paY, int n) {
- int i;
- for (i = 0; i < n; i++) {
- float s = sin(i * DEG2RAD * 4);
- paY[i] = s * YSIZE / 2 + YSIZE / 2;
- }
- }
- /*******************************************************************
- *
- * _DemoSineWave
- */
- static void _DemoSineWave(void) {
- PARAM Param;
- I16 * pStart;
- int t0, Cnt = 0;
- GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)};
- GUI_HMEM hMem = GUI_ALLOC_AllocZero(405 * sizeof(I16));
- GUI_SetColor(GUI_WHITE);
- GUI_SetBkColor(GUI_RED);
- GUI_ClearRect(0, 55, LCD_XSIZE, 75);
- GUI_SetFont(&GUI_FontComic18B_1);
- GUI_DispStringAt("Sine wave", 20, 55);
- pStart = GUI_ALLOC_h2p(hMem);
- _GetSineData(pStart, 405);
- GUI_SetFont(&GUI_Font6x8);
- t0 = GUI_GetTime();
- while((GUI_GetTime() - t0) < 10000)
- {
- if (Cnt++ % 90) {
- Param.aY++;
- } else {
- Param.aY = pStart;
- }
- GUI_MEMDEV_Draw(&Rect, _Draw2, &Param, 0, 0);
- }
- GUI_ALLOC_Free(hMem);
- }
复制代码 如果是按照以上这种写法,在mian中调用这个波形他是一个动态的。
但是如果我如果按照以下这种方式在回调函数中使用:
- case WM_PAINT:
- PaintDialog5_1(pMsg);
- _Label();
- _DemoSineWave();
复制代码 (图片貌似现在上传不了,说是Server (IO) Error)那就口述一下吧。显示的效果就会从屏幕的上面到下面慢慢刷新,而且显示出来的波形也不是动态的。
也搜索了一些资料,有的说是GUI动态内存的问题(我也修改了我相关内存大小,但是都没反应)我也强制WM_SendMessageNoPara(WM_GetClientWindow(hDlg),WM_PAINT);用这种方式触发WM_PAINT但是效果还是一样的。
求大神帮我看看,我这个到底问题在哪,或者应该怎么样在FRAMEWIN这个窗口控件上用2D图形接口来显示一个动态波形!
|
|