Creating a List Box
9/9/2008
A listagem não ociosa é uma janela que exibe uma lista de seqüências de caracteres caractere. Um usuário seleciona um seqüência de caracteres da lista tocando-lo com a caneta. Quando um seqüência de caracteres estiver selecionada, ela estará realçado. Caixas de listagem são colocadas geralmente no diálogo caixas, mas eles também podem ser colocados em uma janela normal especificando a classe janela ListBox na Boolean parâmetro da CreateWindow função ou a CreateWindowEx função.
Para criar um controle caixa lista em uma caixa diálogo
Adicione o seguinte ListBox recurso-declaração definição para o Dialog recurso.
LISTBOX id, x, y, width, height [[, style [[, extended-style]]]]
Aqui, ID é o valor que identifica a caixa lista. O upper-left corner do controle está posicionado no coordenadas x, y, e sua dimensão é determinado pelos valores largura e altura. Ambos estilo e estendido-estilo Determine a aparência da caixa de lista. The Microsoft Win32® API fornece dois tipos de caixas lista: simples - seleção, que é o tipo usar como padrão e múltiplo - seleção. Em um único-caixa lista seleção, um usuário pode selecionar somente um item por um tempo. Em um múltiplo-caixa lista seleção, um usuário pode selecionar more than um item por um tempo. Para criar um múltiplo-caixa lista seleção, especificar o estilo LBS_MULTIPLESEL ou o estilo LBS_EXTENDEDSEL.
Observação
Windows Embedded CE suporta o estilo LBS_EX_CONSTSTRINGDATA, que salva memória RAM quando uma tabela grande de seqüências de caracteres na ROM é inserida em uma caixa lista.
Lista todas as caixas em Windows Embedded CE têm o estilo LBS_HASSTRINGS Por padrão. Windows Embedded CE faz não caixas lista suporte Owner-drawn. Para um completo listagem de com suporte estilos, consulte Janela e estilos de controle. Se o estilo janela WS_EX_LAYOUTRTL estiver definido, a caixa lista terá a ser espelhado. A ordem de leitura pode ser também ser controlado pelo estilo janela WS_EX_RTLREADING.
O seguinte instantâneo mostra uma caixa lista.
Porque são caixas lista vazio Por padrão, você deve inicializar ou preencher a caixa lista com dados quando a caixa diálogo que contém o caixa de listagem é exibida. Cada tempo que uma caixa diálogo é ativada, o sistema envia uma mensagem WM_INITDIALOG para o procedimento janela para a caixa diálogo. O procedimento janela para uma caixa diálogo é responsável pela inicialização e monitoração suas janelas filho, incluindo caixas de lista. O procedimento janela para caixa de diálogo se comunica com a caixa lista enviando mensagens para ele e pelo processamento de notificação mensagens que são enviadas pelo caixa de lista. Para inicializar o caixa de listagem, modificar seu procedimento janela para caixa de diálogo adicionando uma maiúsculas e minúsculas para a Switch declaração no procedimento. O seguinte exemplo de código mostra como inicializar uma caixa lista.
#define IDC_FONTLIST 1000 // Control identifier of the list box
int iNumOfFonts = 0; // The total number of fonts
int iCurrItem = -1; // The index of newly selected or
// added font name in the list box
BOOL CALLBACK FontListDlgProc (HWND hwndDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
int index = 1,
iFontIndex; // Font list index
TCHAR szFontName[80], // For the currently enumerated font name
szFontNamePrev[80]; // For the previously enumerated font name
HWND hwndFontListCtrl; // Window handle to the font list box
// Get the window handle to the font list box control in the dialog
// box.
hwndFontListCtrl = GetDlgItem (hwndDlg, IDC_FONTLIST);
switch (uMsg)
{
case WM_INITDIALOG:
// Need to find the total number of fonts, iNumOfFonts, prior to
// the following code.
for (iFontIndex = 0; iFontIndex < iNumOfFonts; ++iFontIndex)
{
// Insert code here to retrieve the name of each font, and then
// put the font name in szFontName.
// ...
// Add the font name to the list control.
iCurrItem = SendMessage (hwndFontListCtrl, LB_ADDSTRING, 0,
(LPARAM)(LPCTSTR) szFontName);
// Set a 32-bit value, (LPARAM) iFontIndex, that is associated
// with the newly added item in the list control.
SendMessage (hwndFontListCtrl, LB_SETITEMDATA,
(WPARAM) iCurrItem, (LPARAM) iFontIndex);
}
// Select the first font name in the list control.
SendMessage (hwndFontListCtrl, LB_SETCURSEL, 0, 0);
return TRUE;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
// Retrieve the index of the currently selected font.
if ((iCurrItem = SendMessage (hwndFontListCtrl, LB_GETCURSEL,
0, 0)) != LB_ERR)
{
iFontIndex = SendMessage (hwndFontListCtrl, LB_GETITEMDATA,
iCurrItem, 0);
// Get the currently selected font from the index.
CurrLogFont = g_lpEnumLogFont[iFontIndex].elfLogFont;
EndDialog (hwndDlg, 0);
return TRUE;
}
case IDCANCEL:
iCurrItem = -1;
EndDialog (hwndDlg, 0);
return TRUE;
}
break;
}
return FALSE;
}