?? input.c
字號:
/***************************************************************************** 文件名:Input.C* 功能:MiniGUI應用例子。* 創建對話框,實現長度"毫米"-"英寸"的轉換。* 說明:使用MiniGUI for uC/OS-II,使用ADS 1.2編譯器。****************************************************************************/#include <stdlib.h>/* 包含MiniGUI的配置頭文件(編譯配置選項) */#include "MiniGUI_config.h"/* 包含MiniGUI頭文件 */#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "control.h"#define IDC_STATIC1 1000#define IDC_STATIC2 1001#define IDC_EDIT1 1010/* 對話框屬性設置 */static DLGTEMPLATE MyDlgTEMP ={ WS_BORDER | WS_CAPTION, WS_EX_NONE, 10, 10, 220, 160, "請輸入長度", 0, 0, 5, NULL, 0};/* 對話框內的控件定義 */static CTRLDATA MyCtrlData[] ={ { "static", WS_VISIBLE | SS_SIMPLE, 10, 10, 180, 16, IDC_STATIC1, "請輸入長度(單位:mm)", 0 }, { "static", WS_VISIBLE | SS_SIMPLE, 10, 70, 180, 16, IDC_STATIC2, "相當于0.000英寸.", 0 }, { "edit", WS_VISIBLE | WS_BORDER | WS_TABSTOP, 10, 40, 160, 24, IDC_EDIT1, NULL, 0 }, { "button", WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON, 30, 100, 60, 25, IDOK, "確定", 0 }, { "button", WS_VISIBLE | WS_TABSTOP, 130, 100, 60, 25, IDCANCEL, "取消", 0 },};/***************************************************************************** 名稱:MyNotifProc()* 功能:編輯框控件IDC_EDIT1的回調函數。* 當編輯框接收到數據輸入時(EN_CHANGE消息),就進行單位轉換,然后在靜* 態文本框IDC_STATIC2中顯示轉換結果。* 入口參數:hWnd 窗口句柄* id 控件ID* nc 通知碼* add_data 附加參數* 出口參數:無****************************************************************************/static void MyNotifProc(HWND hwnd, int id, int nc, DWORD add_data){ static char disp[50]; double len; int d, f; if((id==IDC_EDIT1) && (nc==EN_CHANGE)) { GetWindowText(hwnd, disp, 32); // 取得字符 len = atof(disp); // 轉換為浮點數 len = len / 25.4; d = (int)len; f = (int)(len * 1000) % 1000; sprintf(disp, "相當于%d.%03d英寸", d, f); SetDlgItemText(GetParent(hwnd), IDC_STATIC2, disp); // GetParent(hwnd)是取得父窗口句柄,即hDlg } if(nc == EN_ENTER) { PostMessage(GetParent(hwnd), MSG_COMMAND, IDOK, 0); }}/***************************************************************************** 名稱:DialogBoxProc()* 功能:對話框過程函數。* 在MSG_INITDIALOG消息中保存啟動對話框時傳遞過來的lParam參數。* 在MSG_COMMAND消息中處理IDOK命令,將處理后的數據返回主程序(length變量)。* 入口參數:hWnd 窗口句柄* message 消息* wParam 消息附加參數1* lParam 消息附加參數2* 出口參數:返回消息處理結果。****************************************************************************/static int DialogBoxProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam){ char disp[50]; double *length; switch (message) { case MSG_INITDIALOG: SetWindowAdditionalData(hDlg, lParam); // 保存lParam參數(到窗口附加參數中) // 即保存rcvdat指針 SetNotificationCallback(GetDlgItem(hDlg, IDC_EDIT1), MyNotifProc); // 設計控件回調函數 return(1); case MSG_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: EndDialog (hDlg, wParam); break; case IDOK: length = (double*) GetWindowAdditionalData(hDlg); GetWindowText(GetDlgItem(hDlg, IDC_EDIT1), disp, 32); *length = atof(disp); // 保存轉換結果到主程序的變量 EndDialog (hDlg, wParam); break; default: break; } break; case MSG_CLOSE: EndDialog (hDlg, IDCANCEL); break; default: break; } return DefaultDialogProc (hDlg, message, wParam, lParam);}/***************************************************************************** 名稱:InitDialogBox()* 功能:初始化對話框,然后啟動對話框。 * 入口參數:hWnd 父窗口句柄* 出口參數:無****************************************************************************/static void InitDialogBox(HWND hWnd, double *rcvdat){ MyDlgTEMP.controls = MyCtrlData; DialogBoxIndirectParam(&MyDlgTEMP, hWnd, DialogBoxProc, (LPARAM)rcvdat);}/***************************************************************************** 名稱:MiniGUIMain()* 功能:MiniGUI程序入口點。* 入口參數:argc 參數個數* argv 參數字符串指針* 出口參數:返回0。****************************************************************************/int MiniGUIMain(int argc, const char *argv[]){ double length = 0.0;/* 雖然MiniGUI for uC/OS-II不支持"MiniGUI-Lite模式", 但為了保持代碼的移植性,此段不要刪除 */#ifdef _LITE_VERSION SetDesktopRect(0,0, 800,600);#endif InitDialogBox(HWND_DESKTOP, &length); return(0);}/* 定義桌面接口函數 */#ifndef _LITE_VERSION #include "dti.c"#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -