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

GPS编程

开发平台:

C/C++

  1. /****************************************************************************
  2. * 文件名:Menu.C
  3. * 功能:MiniGUI应用例子。
  4. *       创建一个包含有下拉菜单的主窗口。
  5. * 说明:使用MiniGUI for uC/OS-II,使用ADS 1.2编译器。
  6. ****************************************************************************/
  7. #include <string.h>
  8. /* 包含MiniGUI的配置头文件(编译配置选项) */
  9. #include "MiniGUI_config.h"
  10. /* 包含MiniGUI头文件 */
  11. #include "common.h"
  12. #include "minigui.h"
  13. #include "gdi.h"
  14. #include "window.h"
  15. #include "control.h"
  16. /* 主窗口起始位置及大小 */
  17. #define  MWINDOW_LX 5       /* 窗口左边框的x值 */
  18. #define  MWINDOW_TY 50      /* 窗口上边框的y值 */
  19. #define  MWINDOW_RX 235     /* 窗口右边框的x值 */
  20. #define  MWINDOW_BY 200     /* 窗口下边框的y值 */
  21. /* 定义菜单资源ID */
  22. #define  IDM_FILE 2010
  23. #define  IDM_EXIT 2011  
  24. #define  IDM_HELP 2020
  25. #define  IDM_ABOUT 2021
  26. HWND hMainWnd;      // 主窗口句柄
  27. /****************************************************************************
  28. * 名称:CreatFileMenu()
  29. * 功能:建立子菜单"File"。
  30. * 入口参数:无
  31. * 出口参数:返回菜单句柄。
  32. ****************************************************************************/
  33. static HMENU  CreatFileMenu(void)
  34. {   HMENU  hmenu;
  35.     MENUITEMINFO mii;
  36.  
  37.     /* 建立下拉式子菜单"File" */
  38.     memset(&mii, 0, sizeof(MENUITEMINFO));  // 初始化mii所有单元为0 
  39.     mii.type = MFT_STRING;
  40.     mii.id = 0; 
  41.     mii.typedata = (DWORD)"File";
  42.     hmenu = CreatePopupMenu(&mii);
  43.     /* 添加菜单项"Exit" */
  44.     memset(&mii, 0, sizeof(MENUITEMINFO));  
  45.     mii.type = MFT_STRING;
  46.     mii.state = 0;
  47.     mii.id = IDM_EXIT;
  48.     mii.typedata = (DWORD)"Exit";
  49.     InsertMenuItem(hmenu, 0, TRUE, &mii);
  50.     return(StripPopupHead(hmenu));
  51. }
  52. /****************************************************************************
  53. * 名称:CreatAboutMenu()
  54. * 功能:建立子菜单"Help"。
  55. * 入口参数:无
  56. * 出口参数:返回菜单句柄。
  57. ****************************************************************************/
  58. static HMENU  CreatAboutMenu(void)
  59. {   HMENU  hmenu;
  60.     MENUITEMINFO mii;
  61.  
  62.     /* 建立下拉式子菜单"Help" */
  63.     memset(&mii, 0, sizeof(MENUITEMINFO));
  64.     mii.type = MFT_STRING;
  65.     mii.id = 0;
  66.     mii.typedata = (DWORD)"Help";
  67.     hmenu = CreatePopupMenu(&mii);
  68.     /* 添加菜单项"About" */
  69.     memset(&mii, 0, sizeof(MENUITEMINFO));  
  70.     mii.type = MFT_STRING;
  71.     mii.state = 0;
  72.     mii.id = IDM_ABOUT;
  73.     mii.typedata = (DWORD)"About";
  74.     InsertMenuItem(hmenu, 0, TRUE, &mii);
  75.     return(StripPopupHead(hmenu));
  76. }
  77. /****************************************************************************
  78. * 名称:CreateMainMenu()
  79. * 功能:建立主菜单(下拉式)。
  80. * 入口参数:无
  81. * 出口参数:返回菜单句柄。
  82. ****************************************************************************/
  83. static HMENU  CreateMainMenu(void)
  84. {   HMENU  hmenu;
  85.     MENUITEMINFO mii;
  86.  
  87.     hmenu = CreateMenu();
  88.     /* 添加"File"菜单 */
  89.     memset(&mii, 0, sizeof(MENUITEMINFO));  // 初始化mii所有单元为0 
  90.     mii.type = MFT_STRING;
  91.     mii.id = IDM_FILE;
  92.     mii.typedata = (DWORD)"File...";
  93.     mii.hsubmenu = CreatFileMenu();     // 建立子菜单
  94.     InsertMenuItem(hmenu, 0, TRUE, &mii);
  95.     /* 添加"Help"菜单 */
  96.     memset(&mii, 0, sizeof(MENUITEMINFO));  
  97.     mii.type = MFT_STRING;
  98.     mii.id = IDM_HELP;
  99.     mii.typedata = (DWORD)"Help...";
  100.     mii.hsubmenu = CreatAboutMenu();
  101.     InsertMenuItem(hmenu, 1, TRUE, &mii);
  102.  
  103.     return(hmenu);
  104. }
  105. /****************************************************************************
  106. * 名称:WinProc()
  107. * 功能:主窗口过程函数。
  108. *       处理MSG_COMMAND消息,执行相应的菜单功能。
  109. * 入口参数:hWnd        窗口句柄
  110. *           message     消息
  111. *           wParam      消息附加参数1
  112. *           lParam      消息附加参数2
  113. * 出口参数:消息已处理则返回0。
  114. ****************************************************************************/
  115. static int  WinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
  116. {   HDC  hdc;
  117.     switch(message)
  118.     {   case MSG_PAINT:
  119.         hdc = BeginPaint(hWnd);
  120.         TextOut(hdc, 10, 50, "This is MiniGUI Window!");
  121.         EndPaint(hWnd, hdc);
  122.         break;
  123.         case MSG_CLOSE:
  124.         DestroyMainWindow(hWnd);
  125.         PostQuitMessage(hWnd);
  126.         break;
  127.         case MSG_COMMAND:
  128.             switch(wParam)
  129.             {   case IDM_EXIT:
  130.                     DestroyMainWindow(hWnd);
  131.                     PostQuitMessage(hWnd);
  132.                     break;
  133.                 case IDM_ABOUT:
  134.                     MessageBox(hWnd, "Menu demo V1.0", "About", MB_OK);
  135.                     break;
  136.             }
  137.             break;
  138.         default:
  139.     return(DefaultMainWinProc(hWnd, message, wParam, lParam));
  140.     }
  141.     return(0);
  142. }
  143. /****************************************************************************
  144. * 名称:InitMainWindow()
  145. * 功能:建立主窗口。
  146. * 入口参数:无
  147. * 出口参数:建立成功返回1,否则返回0。
  148. ****************************************************************************/
  149. int InitMainWindow(void)
  150. {   MAINWINCREATE  window_info;
  151.     window_info.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
  152.     window_info.dwExStyle = WS_EX_NONE;
  153.     window_info.spCaption = "Menu demo";        // 窗口标题
  154.     window_info.hMenu = CreateMainMenu();       // 使用下拉式菜单
  155.     window_info.hCursor = GetSystemCursor(0);
  156.     window_info.hIcon = 0;
  157.     window_info.MainWindowProc = WinProc;
  158.     window_info.lx = MWINDOW_LX;
  159.     window_info.ty = MWINDOW_TY;
  160.     window_info.rx = MWINDOW_RX;
  161.     window_info.by = MWINDOW_BY;
  162.     window_info.iBkColor = COLOR_lightwhite;
  163.     window_info.dwAddData = 0;
  164.     window_info.hHosting = HWND_DESKTOP; 
  165.     
  166.     hMainWnd = CreateMainWindow (&window_info);
  167.     if (hMainWnd == HWND_INVALID) return(0);
  168.       else  return(1);
  169. }
  170. /****************************************************************************
  171. * 名称:MiniGUIMain()
  172. * 功能:MiniGUI程序入口点。
  173. * 入口参数:argc    参数个数
  174. *           argv    参数字符串指针
  175. * 出口参数:返回0。
  176. ****************************************************************************/
  177. int  MiniGUIMain(int argc, const char *argv[])
  178. {   MSG Msg;
  179. #ifdef _LITE_VERSION
  180.     SetDesktopRect(0,0, 800,600);
  181. #endif
  182.     InitMainWindow();
  183.     ShowWindow(hMainWnd, SW_SHOWNORMAL);
  184.     while (GetMessage(&Msg, hMainWnd)) 
  185.     {   TranslateMessage(&Msg);
  186.         DispatchMessage(&Msg);
  187.     }
  188.     
  189.     MainWindowThreadCleanup (hMainWnd);
  190.     return(0);
  191. }
  192. #ifndef _LITE_VERSION
  193. #include "dti.c"
  194. #endif