工学嵌入式系统11.docx
《工学嵌入式系统11.docx》由会员分享,可在线阅读,更多相关《工学嵌入式系统11.docx(11页珍藏版)》请在冰豆网上搜索。
工学嵌入式系统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"
#defineMAX_TEXT1024
BOOLCALLBACKDialogProc(HWND,UINT,WPARAM,LPARAM);//对话框窗口过程回调函数
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow)//程序入口
{
returnDialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1//对话框资源标识),NULL,DialogProc//对话框窗口过程);
}
HWNDhLogList;//日志列表框句柄
voidOutputLog(LPCTSTRlpFormat,...)//写日志函数
{
va_listarg;
TCHARbuf[256];
if(hLogList!
=NULL)
{
va_start(arg,lpFormat);
wvsprintf(buf,lpFormat,arg);
va_end(arg);
SendMessage(hLogList,LB_ADDSTRING//增加字符串事件,0,(LPARAM)buf);
}
}
BOOLCALLBACKDialogProc(HWNDhDlg//对话框句柄,UINTuMsg,WPARAMwParam,LPARAMlParam)
{
TCHARstrText[MAX_TEXT];
WORDwID,wNotifyCode;
DWORDnIndex;
switch(uMsg)
{
caseWM_INITDIALOG:
//对话框初始化消息
SendMessage(GetDlgItem(hDlg,IDC_CKLOG)//根据对话框控件标识得到对话框上某控件的操作句柄,BM_CLICK//复选框单击事件,0,0);
SendMessage(GetDlgItem(hDlg,IDC_CHECK1),BM_CLICK,0,0);
OutputLog(_T("initializationdialogdone"));
break;
caseWM_CLOSE:
EndDialog(hDlg,0);
break;
caseWM_COMMAND:
wID=LOWORD(wParam);//控件标识
wNotifyCode=HIWORD(wParam);//控件事件标识
switch(wID)
{
caseIDC_CKLOG:
//IDC_CKLOG复选框的事件处理
if(wNotifyCode==BN_CLICKED)
{
if(SendMessage(GetDlgItem(hDlg,IDC_CKLOG),BM_GETCHECK,0,0)==BST_CHECKED//BST_CHECKED指的是IDC_CKLOG复选框处于被选中状态;如果被选中的话,使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(hLogList,FALSE);
hLogList=NULL;
}
break;
}
returnFALSE;
caseIDC_BTNCLEAR:
//IDC_BTNCLEAR按钮的事件处理
if(hLogList!
=NULL)
while(SendMessage(hLogList,LB_DELETESTRING//循环删除日志列表框的字符串,(WPARAM)0,0)!
=LB_ERR);
break;
caseIDC_LIST1:
//IDC_LIST列表框的事件处理
if(wNotifyCode==LBN_SELCHANGE)//列表框选择项发生变化事件处理
OutputLog(_T("选择第%d项"),SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_GETCURSEL,0,0));
elseif(wNotifyCode==LBN_DBLCLK)//列表框双击事件处理
OutputLog(_T("双击第%d项"),SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_GETCURSEL,0,0));
else
returnFALSE;
break;
caseIDC_BTNADD:
//IDC_BTNADD按钮事件处理
if(GetDlgItemText(hDlg,IDC_EDIT1,strText,MAX_TEXT)>0)//返回对话框子控件的文本
SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)strText);//将文本内容追加到IDC_LIST1列表框内
OutputLog(_T("单击Add按钮"));
break;
caseIDC_BTNDEL:
//IDC_BTNDEL按钮事件处理
nIndex=SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_GETCURSEL,0,0);
if(nIndex!
=LB_ERR)
SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_DELETESTRING,(WPARAM)nIndex,0);
OutputLog(_T("单击Delete按钮"));
break;
caseIDC_CHECK1:
//IDC_CHECK1复选框事件处理
if(wNotifyCode==BN_CLICKED)
{
BOOLbEnab=FALSE;
if(SendMessage(GetDlgItem(hDlg,IDC_CHECK1),BM_GETCHECK,0,0)==BST_CHECKED)
bEnab=TRUE;
EnableWindow(GetDlgItem(hDlg,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("Check1ischecked"));
else
OutputLog(_T("Check1isunchecked"));
break;
}
returnFALSE;
caseIDC_RADIO1:
caseIDC_RADIO2:
if(wNotifyCode==BN_CLICKED)
{
if(SendMessage(GetDlgItem(hDlg,IDC_RADIO1),BM_GETCHECK,0,0)==BST_CHECKED)
OutputLog(_T("Radio1ischecked"));
elseif(SendMessage(GetDlgItem(hDlg,IDC_RADIO2),BM_GETCHECK,0,0)==BST_CHECKED)
OutputLog(_T("Radio2ischecked"));
break;
}
returnFALSE;
caseIDC_EDIT2:
if(wNotifyCode==EN_CHANGE)
{
if(GetDlgItemText(hDlg,IDC_EDIT2,strText,MAX_TEXT)>0)
SetDlgItemText(hDlg,IDC_BUTTON1,strText);
break;
}
returnFALSE;
}
break;
default:
returnFALSE;
}
returnTRUE;
}