以下示例演示了对话框过程如何创建一个简单的列表框,并使用垒球队中的人员名称填充它。选择列表中的名称后,对话框中将显示有关播放器的其他信息。下图显示对话框。
列表框具有LBS_STANDARD样式,LBS_SORT,LBS_NOTIFY,WS_VSCROLL和WS_BORDER的组合。代码在处理WM_INITDIALOG消息时初始化对话框。对于出现在列表框中的每个名称,代码将向列表框发送一个LB_ADDSTRING消息。通过处理LBN_SELCHANGE通知消息,代码还会跟踪选择何时更改。
#define BUFFER MAX_PATH
#define NAMELENGTH 15
#define POSITIONLENGTH 20
#定义团队规模15
typedef struct {en
TCHAR tchName[NAMELENGTH];
TCHAR tchPosition[POSITIONLENGTH];
int nGamesPlayed;
int nInningsPlayed;
double xBattingAverage;
TCHAR tchFoodName[NAMELENGTH];
} Player;
Player Roster[] = {
{“皮特”,“速动”,26,90,.608,“鲁塔巴加”},
{“Suzanna”,“catcher”,16,53,.286,“Toast”},
{“杰克”,“投手”,27,110,.542,“动物饼干”},
{“卡伦”,“第二基地”,26,140,.238,“佩茨”},
{“Dave”,“first base”,28,138,.508,“Suds”},
{“温迪”,“第三基地”,25,154,.493,“汉姆”},
{“Matt”,“shortstop”,24,112,.579,“燕麦”},
{“珍妮”,“右场”,22,101,.509,“土豆泥”},
{“Seth”,“left-center field”,20,76,.407,“Otter Pop”},
{“Kathie”,“左场”,26,127,.353,“Baba Ganouj”},
{“Colin”,“pitcher”,26,96,.456,“Lefse”},
{“Penny”,“right field”,24,112,.393,“Zotz”},
{“艺术”,“左中心”,17,56,.375,“Cannelloni”},
{“辛迪”,“第二基地”,13,58,.207,“龙舌兰酒”},
{“David”,“center field”,18,101,.612,“Bok Choy”}
};
/*
*功能:DlgTeamProc(HWND,无符号,UINT,LONG)
*
*目的:“BFG垒球统计”对话框
*/
BOOL APIENTRY DlgTeamProc(
HWND hDlg,/ *对话框的窗口句柄* /
UINT消息,/ *消息类型* /
UINT wParam,/ *消息特定信息* /
LONG lParam)/ *消息特定信息* /
{
TCHAR tchBuffer[BUFFER];
int nItem;
int i;
HWND hwndList;
switch(message){
case WM_INITDIALOG:
{
hwndList = GetDlgItem(hDlg, IDL_SOFTBALL);
/ *初始化列表框(填写播放器名称)。*/
for (i = 0; i < TEAMSIZE; i++) {
SendMessage(hwndList,LB_ADDSTRING,0,
(LPARAM) Roster[i].tchName);
SendMessage(hwndList, LB_SETITEMDATA, i, (LPARAM) i);
}
SetFocus(hwndList);
return FALSE;
}
case WM_COMMAND:
开关(LOWORD(wParam)){
case IDL_SOFTBALL:
开关(HIWORD(wParam)){
case LBN_SELCHANGE:
/ *显示所选播放器的统计信息。*/
hwndList = GetDlgItem(hDlg, IDL_SOFTBALL);
nItem = SendMessage(hwndList, LB_GETCURSEL,
0, 0);
i = SendMessage(hwndList, LB_GETITEMDATA,
nItem, 0);
SetDlgItemText(hDlg,IDS_POS,
Roster[i].tchPosition);
SetDlgItemText(hDlg,IDS_GAME,
_itoa(Roster[i].nGamesPlayed,
tchBuffer, 10));
SetDlgItemText(hDlg,IDS_INN,
_itoa(Roster[i].nInningsPlayed,
tchBuffer, 10));
SetDlgItemText(hDlg,IDS_BA,
_gcvt(Roster[i].xBattingAverage,
3, tchBuffer));
SetDlgItemText(hDlg,IDS_FOOD,
Roster[i].tchFoodName);
return TRUE;
}
break;
case IDOK:
case IDCANCEL:
/ *销毁对话框。*/
EndDialog(hDlg, TRUE);
return TRUE;
默认:
return FALSE;
}
默认:
return FALSE;
}
}