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

GPS编程

开发平台:

C/C++

  1. /****************************************************************************
  2. * 文件名:Input.C
  3. * 功能:MiniGUI应用例子。
  4. *       创建对话框,实现长度"毫米"-"英寸"的转换。
  5. * 说明:使用MiniGUI for uC/OS-II,使用ADS 1.2编译器。
  6. ****************************************************************************/
  7. #include <stdlib.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. #define  IDC_STATIC1    1000
  17. #define  IDC_STATIC2    1001
  18. #define  IDC_EDIT1   1010
  19. /* 对话框属性设置 */
  20. static DLGTEMPLATE MyDlgTEMP =
  21. {
  22.     WS_BORDER | WS_CAPTION, 
  23.     WS_EX_NONE,
  24.     10, 10, 220, 160, 
  25.     "请输入长度",
  26.     0, 0,
  27.     5, NULL,
  28.     0
  29. };
  30. /* 对话框内的控件定义 */
  31. static CTRLDATA MyCtrlData[] =
  32.     {
  33.         "static",
  34.         WS_VISIBLE | SS_SIMPLE,
  35.         10, 10, 180, 16, 
  36.         IDC_STATIC1, 
  37. "请输入长度(单位:mm)",
  38.         0
  39.     },
  40. {
  41. "static",
  42.         WS_VISIBLE | SS_SIMPLE,
  43.         10, 70, 180, 16, 
  44.         IDC_STATIC2, 
  45. "相当于0.000英寸.",
  46.         0
  47. },
  48. {
  49. "edit",
  50. WS_VISIBLE | WS_BORDER | WS_TABSTOP,
  51. 10, 40, 160, 24,
  52. IDC_EDIT1,
  53. NULL,
  54. 0
  55.     },
  56. { "button",
  57. WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON,
  58. 30, 100, 60, 25,
  59. IDOK,
  60. "确定",
  61. 0
  62. },
  63. { "button",
  64. WS_VISIBLE | WS_TABSTOP, 
  65. 130, 100, 60, 25,
  66. IDCANCEL,
  67. "取消",
  68. 0
  69. },
  70. };
  71. /****************************************************************************
  72. * 名称:MyNotifProc()
  73. * 功能:编辑框控件IDC_EDIT1的回调函数。
  74. *       当编辑框接收到数据输入时(EN_CHANGE消息),就进行单位转换,然后在静
  75. *       态文本框IDC_STATIC2中显示转换结果。
  76. * 入口参数:hWnd        窗口句柄
  77. *           id          控件ID
  78. *           nc          通知码
  79. *           add_data    附加参数
  80. * 出口参数:无
  81. ****************************************************************************/
  82. static void  MyNotifProc(HWND hwnd, int id, int nc, DWORD add_data)
  83. { static char disp[50];
  84. double  len;
  85. int  d, f;
  86. if((id==IDC_EDIT1) && (nc==EN_CHANGE))
  87. { GetWindowText(hwnd, disp, 32); // 取得字符
  88. len = atof(disp); // 转换为浮点数
  89.     len = len / 25.4;
  90.     d = (int)len;
  91.     f = (int)(len * 1000) % 1000;
  92.     sprintf(disp, "相当于%d.%03d英寸", d, f);
  93.     SetDlgItemText(GetParent(hwnd), IDC_STATIC2, disp); // GetParent(hwnd)是取得父窗口句柄,即hDlg
  94. }
  95.     
  96.     if(nc == EN_ENTER)
  97.     {   PostMessage(GetParent(hwnd), MSG_COMMAND, IDOK, 0);
  98.     }
  99. }
  100. /****************************************************************************
  101. * 名称:DialogBoxProc()
  102. * 功能:对话框过程函数。
  103. *       在MSG_INITDIALOG消息中保存启动对话框时传递过来的lParam参数。
  104. *       在MSG_COMMAND消息中处理IDOK命令,将处理后的数据返回主程序(length变量)。
  105. * 入口参数:hWnd        窗口句柄
  106. *           message     消息
  107. *           wParam      消息附加参数1
  108. *           lParam      消息附加参数2
  109. * 出口参数:返回消息处理结果。
  110. ****************************************************************************/
  111. static int DialogBoxProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
  112. { char  disp[50];
  113. double  *length;
  114.     switch (message) 
  115. {   case MSG_INITDIALOG:
  116. SetWindowAdditionalData(hDlg, lParam); // 保存lParam参数(到窗口附加参数中)
  117.     // 即保存rcvdat指针
  118. SetNotificationCallback(GetDlgItem(hDlg, IDC_EDIT1),
  119.    MyNotifProc); // 设计控件回调函数
  120.          return(1);
  121.         
  122.      case MSG_COMMAND:
  123.          switch (LOWORD(wParam)) 
  124.          {   case IDCANCEL:
  125.              EndDialog (hDlg, wParam);
  126.              break;
  127. case IDOK:
  128. length = (double*) GetWindowAdditionalData(hDlg);
  129. GetWindowText(GetDlgItem(hDlg, IDC_EDIT1), disp, 32);
  130. *length = atof(disp);               // 保存转换结果到主程序的变量
  131. EndDialog (hDlg, wParam);
  132. break;
  133. default:
  134. break;
  135.          }
  136.          break;
  137. case MSG_CLOSE:
  138.          EndDialog (hDlg, IDCANCEL);
  139.          break;
  140. default:
  141. break;
  142.     }
  143.     
  144.     return DefaultDialogProc (hDlg, message, wParam, lParam);
  145. }
  146. /****************************************************************************
  147. * 名称:InitDialogBox()
  148. * 功能:初始化对话框,然后启动对话框。 
  149. * 入口参数:hWnd        父窗口句柄
  150. * 出口参数:无
  151. ****************************************************************************/
  152. static void InitDialogBox(HWND hWnd, double *rcvdat)
  153. {
  154.     MyDlgTEMP.controls = MyCtrlData;
  155.     
  156.     DialogBoxIndirectParam(&MyDlgTEMP, hWnd, DialogBoxProc, (LPARAM)rcvdat);
  157. }
  158. /****************************************************************************
  159. * 名称:MiniGUIMain()
  160. * 功能:MiniGUI程序入口点。
  161. * 入口参数:argc    参数个数
  162. *           argv    参数字符串指针
  163. * 出口参数:返回0。
  164. ****************************************************************************/
  165. int  MiniGUIMain(int argc, const char *argv[])
  166. {   double  length = 0.0;
  167. /* 虽然MiniGUI for uC/OS-II不支持"MiniGUI-Lite模式",
  168.    但为了保持代码的移植性,此段不要删除 
  169. */
  170. #ifdef _LITE_VERSION
  171.     SetDesktopRect(0,0, 800,600);
  172. #endif
  173.     InitDialogBox(HWND_DESKTOP, &length);
  174.     return(0);
  175. }
  176. /* 定义桌面接口函数 */
  177. #ifndef _LITE_VERSION
  178. #include "dti.c"
  179. #endif