1、工学嵌入式系统11课题实验十 编写Dialog程序需 6课时教学目的要求教学重点教学难点教案编写日期2011年5月10日教学内容及教学过程提示与补充一、组织教学二、内容讲解10.1 实验目的 进一步熟悉EVC集成开发环境以及相关配置,掌握对话框应用程序的设计与实现。10.2 实验内容 编写Dialog应用程序10.3 实验设备 1. OURS-PXA270-RP实验箱,烧录有WinCE的Flash,交叉网线及USB延长线。 2. 安装Windows系统的PC机,EVC集成开发环境10.4 实验步骤 1. 硬件连接 2. 程序剖析#include #include resource.h#defi
2、ne MAX_TEXT 1024BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);/对话框窗口过程回调函数int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)/程序入口 return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1/对话框资源标识), NULL, DialogProc/对话框窗口过程);HWND hLogList;/日志列表框句柄voi
3、d OutputLog(LPCTSTR lpFormat, .)/写日志函数 va_list arg; TCHAR buf256; if(hLogList != NULL) va_start(arg, lpFormat); wvsprintf(buf, lpFormat, arg); va_end(arg); SendMessage(hLogList, LB_ADDSTRING/增加字符串事件, 0, (LPARAM)buf); BOOL CALLBACK DialogProc(HWND hDlg/对话框句柄, UINT uMsg, WPARAM wParam, LPARAM lParam)
4、TCHAR strTextMAX_TEXT; WORD wID, wNotifyCode; DWORD nIndex; switch(uMsg) case WM_INITDIALOG:/对话框初始化消息 SendMessage(GetDlgItem(hDlg, IDC_CKLOG)/根据对话框控件标识得到对话框上某控件的操作句柄, BM_CLICK/复选框单击事件, 0, 0); SendMessage(GetDlgItem(hDlg, IDC_CHECK1), BM_CLICK, 0, 0); OutputLog(_T(initialization dialog done); break;
5、case WM_CLOSE:EndDialog(hDlg, 0); break; case WM_COMMAND: wID = LOWORD(wParam);/控件标识 wNotifyCode = HIWORD(wParam);/控件事件标识 switch(wID) case IDC_CKLOG:/IDC_CKLOG复选框的事件处理 if(wNotifyCode = BN_CLICKED) if(SendMessage(GetDlgItem(hDlg, IDC_CKLOG), BM_GETCHECK, 0, 0) = BST_CHECKED/BST_CHECKED指的是IDC_CKLOG复选框
6、处于被选中状态;如果被选中的话,使IDC_LISTLOG列表框与IDC_BTNCLEAR可用(Enable)) hLogList = GetDlgItem(hDlg, IDC_LISTLOG); EnableWindow(hLogList, TRUE); EnableWindow(GetDlgItem(hDlg, IDC_BTNCLEAR), TRUE); Else/如果IDC_CKLOG未被选中,则使IDC_LISTLOG列表框与IDC_BTNCLEAR不可用。 EnableWindow(GetDlgItem(hDlg, IDC_BTNCLEAR), FALSE); EnableWindow
7、(hLogList, FALSE); hLogList = NULL; break; return FALSE; case IDC_BTNCLEAR:/IDC_BTNCLEAR按钮的事件处理 if(hLogList != NULL) while(SendMessage(hLogList, LB_DELETESTRING/循环删除日志列表框的字符串, (WPARAM)0, 0) != LB_ERR); break; case IDC_LIST1:/IDC_LIST列表框的事件处理 if(wNotifyCode = LBN_SELCHANGE)/列表框选择项发生变化事件处理 OutputLog(_
8、T(选择第%d项), SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETCURSEL, 0, 0); else if(wNotifyCode = LBN_DBLCLK)/列表框双击事件处理 OutputLog(_T(双击第%d项), SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETCURSEL, 0, 0); else return FALSE; break; case IDC_BTNADD:/IDC_BTNADD按钮事件处理 if(GetDlgItemText(hDlg, IDC_EDIT1, strT
9、ext, MAX_TEXT) 0)/返回对话框子控件的文本 SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_ADDSTRING, 0, (LPARAM)strText);/将文本内容追加到IDC_LIST1列表框内 OutputLog(_T(单击Add按钮); break; case IDC_BTNDEL:/IDC_BTNDEL按钮事件处理 nIndex = SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETCURSEL, 0, 0); if(nIndex != LB_ERR) SendMessage(GetD
10、lgItem(hDlg, IDC_LIST1), LB_DELETESTRING, (WPARAM)nIndex, 0); OutputLog(_T(单击Delete按钮); break; case IDC_CHECK1:/IDC_CHECK1复选框事件处理 if(wNotifyCode = BN_CLICKED) BOOL bEnab = FALSE; if(SendMessage(GetDlgItem(hDlg, IDC_CHECK1), BM_GETCHECK, 0, 0) = BST_CHECKED) bEnab = TRUE; EnableWindow(GetDlgItem(hDlg
11、, IDC_RADIO1), bEnab); EnableWindow(GetDlgItem(hDlg, IDC_RADIO2), bEnab); EnableWindow(GetDlgItem(hDlg, IDC_BUTTON1), bEnab); EnableWindow(GetDlgItem(hDlg, IDC_EDIT2), bEnab); if(bEnab) OutputLog(_T(Check1 is checked); else OutputLog(_T(Check1 is unchecked); break; return FALSE; case IDC_RADIO1: cas
12、e IDC_RADIO2: if(wNotifyCode = BN_CLICKED) if(SendMessage(GetDlgItem(hDlg, IDC_RADIO1), BM_GETCHECK, 0, 0) = BST_CHECKED) OutputLog(_T(Radio1 is checked); else if(SendMessage(GetDlgItem(hDlg, IDC_RADIO2), BM_GETCHECK, 0, 0) = BST_CHECKED) OutputLog(_T(Radio2 is checked); break; return FALSE; case IDC_EDIT2: if(wNotifyCode = EN_CHANGE) if(GetDlgItemText(hDlg, IDC_EDIT2, strText, MAX_TEXT) 0) SetDlgItemText(hDlg, IDC_BUTTON1, strText); break; return FALSE; break; default: return FALSE; return TRUE;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1