line.c
上传用户:sdaoma
上传日期:2013-08-07
资源大小:3838k
文件大小:4k
源码类别:

GPS编程

开发平台:

C/C++

  1. /****************************************************************************
  2. * 文件名:Line.C
  3. * 功能:MiniGUI应用例子。
  4. *       创建一个主窗口,并在窗口中间画出随机颜色、随机长度和随机角度
  5. *       的50根直线。
  6. * 说明:使用MiniGUI for uC/OS-II,使用ADS 1.2编译器。
  7. ****************************************************************************/
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. /* 包含MiniGUI的配置头文件(编译配置选项) */
  11. #include "MiniGUI_config.h"
  12. /* 包含MiniGUI头文件 */
  13. #include "common.h"
  14. #include "minigui.h"
  15. #include "gdi.h"
  16. #include "window.h"
  17. #include "control.h"
  18. /* 定义random()函数 */
  19. #define  random()     rand()
  20. /* 主窗口起始位置及大小 */
  21. #define  MWINDOW_LX 5       /* 窗口左边框的x值 */
  22. #define  MWINDOW_TY 50      /* 窗口上边框的y值 */
  23. #define  MWINDOW_RX 235     /* 窗口右边框的x值 */
  24. #define  MWINDOW_BY 200     /* 窗口下边框的y值 */
  25. /* 定义窗口宽度、高度的宏 */
  26. #define  MWINDOW_W   (MWINDOW_RX - MWINDOW_LX)
  27. #define  MWINDOW_H   (MWINDOW_BY - MWINDOW_TY)
  28. HWND hMainWnd;      // 主窗口句柄
  29. /****************************************************************************
  30. * 名称:WinProc()
  31. * 功能:主窗口过程函数。
  32. *       处理MSG_PAINT消息,在窗口中间画出随机颜色、随机长度和随机角度
  33. *       的50根直线。
  34. * 入口参数:hWnd        窗口句柄
  35. *           message     消息
  36. *           wParam      消息附加参数1
  37. *           lParam      消息附加参数2
  38. * 出口参数:消息已处理则返回0。
  39. ****************************************************************************/
  40. static int  WinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
  41. {   HDC  hdc;    
  42.     int  x0, y0;    // 直线第一点坐标变量
  43.     int  x1, y1;    // 直线第二点坐标变量
  44.     int  no;
  45.     switch(message)
  46.     {   case MSG_PAINT:
  47.             hdc = BeginPaint(hWnd);
  48.             
  49.         for(no=0; no<50; no++)          // 画50条随机直线
  50.         {   SetPenColor(hdc, SysPixelIndex[random()%16]);   // 取得随机颜色
  51.             x0 = random()%MWINDOW_W;    // 随机取得直线第一点坐标值
  52.                 y0 = random()%MWINDOW_H;
  53.                 
  54.                 /* 以中心点对称,计算出直线第二点坐标值。
  55.                    设x0在中点左边,中点值为W/2,则中点到x0的长度Mx = W/2 - x0,
  56.                    所以x1 = W/2 + Mx = W/2 + W/2 - x0 = W - x0。
  57.                    若x0在中点右边,也会得到同要的结果(x1=W - x0)。
  58.                 */
  59.                 x1 = MWINDOW_W - x0;        
  60.                 y1 = MWINDOW_H - y0;
  61.                 MoveTo(hdc, x0, y0);        // 移动hdc当前位置到直线第一点处
  62.                 LineTo(hdc, x1, y1);        // 画直线到直线第二点
  63.         }
  64.             EndPaint(hWnd, hdc);
  65.             break;
  66.        case MSG_CLOSE:
  67.         DestroyMainWindow(hWnd);
  68.         PostQuitMessage(hWnd);
  69.         break;
  70.        default:
  71.         return(DefaultMainWinProc(hWnd, message, wParam, lParam));
  72.     }
  73.     return(0);
  74. }
  75. /****************************************************************************
  76. * 名称:InitMainWindow()
  77. * 功能:建立主窗口。
  78. * 入口参数:无
  79. * 出口参数:建立成功返回1,否则返回0。
  80. ****************************************************************************/
  81. int InitMainWindow(void)
  82. {   MAINWINCREATE  window_info;
  83.     window_info.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
  84.     window_info.dwExStyle = WS_EX_NONE;
  85.     window_info.spCaption = "GDI Demo";
  86.     window_info.hMenu = 0;
  87.     window_info.hCursor = GetSystemCursor(0);
  88.     window_info.hIcon = 0;
  89.     window_info.MainWindowProc = WinProc;
  90.     window_info.lx = MWINDOW_LX;
  91.     window_info.ty = MWINDOW_TY;
  92.     window_info.rx = MWINDOW_RX;
  93.     window_info.by = MWINDOW_BY;
  94.     window_info.iBkColor = COLOR_lightwhite;
  95.     window_info.dwAddData = 0;
  96.     window_info.hHosting = HWND_DESKTOP; 
  97.     
  98.     hMainWnd = CreateMainWindow(&window_info);
  99.     if(hMainWnd == HWND_INVALID) return(0);
  100.       else return(1);
  101. }
  102. /****************************************************************************
  103. * 名称:MiniGUIMain()
  104. * 功能:MiniGUI程序入口点。
  105. * 入口参数:argc    参数个数
  106. *           argv    参数字符串指针
  107. * 出口参数:返回0。
  108. ****************************************************************************/
  109. int  MiniGUIMain(int argc, const char *argv[])
  110. {   MSG Msg;
  111. #ifdef _LITE_VERSION
  112.     SetDesktopRect(0,0, 800,600);
  113. #endif
  114.    
  115.     srand(3721);    // 初始化随机总机
  116.        
  117.     InitMainWindow();
  118.     ShowWindow(hMainWnd, SW_SHOWNORMAL);
  119.     while(GetMessage(&Msg, hMainWnd)) 
  120.     {   TranslateMessage(&Msg);
  121.         DispatchMessage(&Msg);
  122.     }
  123.     
  124.     MainWindowThreadCleanup(hMainWnd);
  125.     return(0);
  126. }
  127. #ifndef _LITE_VERSION
  128. #include "dti.c"
  129. #endif