创建简单列表框

【勇芳软件工作室】汉化HomePreviousNext

以下示例演示了对话框过程如何创建一个简单的列表框,并使用垒球队中的人员名称填充它。选择列表中的名称后,对话框中将显示有关播放器的其他信息。下图显示对话框。

列表框具有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;

}

}