Hodnota ComboBoxu, tedy text ktery je prave vybran ziskas poslanim zpravy CB_GETCURSEL. Dostanes index, pomoci ktereho pak zpravou CB_GETLBTEXT dostanes vlastni text. Pri zmene vyberu se navic posila notifikace CBN_SELCHANGE, takze lze zmenu snadno zpracovat.
Kód: Vybrat vše
char * ComboText = NULL; //globalne definovana promena pro ulozeni vybraneho textu z comboboxu
...
//ve funkci pro zpracovani zprav dialogu
...
case WM_COMMAND:
switch(LOWORD(wParam))
{
...
case 1002: //ID ComboBoxu
switch(HIWORD(wParam))
{
int CurIndex, TxtLen;
case CBN_SELCHANGE: //vybrana polozka v comboboxu
CurIndex = SendMessage((HWND) lParam, CB_GETCURSEL, 0, 0); //ziska index aktualni polozky
if(ComboText) delete [] ComboText; //smaze stary text
TxtLen = SendMessage((HWND) lParam, CB_GETLBTEXTLEN, CurIndex, 0); //ziska delku textu
ComboText = new char[TxtLen + 1]; //vytvori novy text ziskane delky
SendMessage((HWND) lParam, CB_GETLBTEXT, CurIndex, (LPARAM) ComboText); //nacte novy text
break;
}
...
}
S tim listboxem k textu to bude jednodussi, kdyz si ho vytvoris jako samostatne okno se stylem WS_POPUP, nejak takhle:
Kód: Vybrat vše
RECT tmpRect;
GetWindowRect(GetDlgItem(hwnd, 1002), &tmpRect);
hwndList = CreateWindow("LISTBOX", "ListBox", WS_POPUP | LBS_STANDARD, tmpRect.left, tmpRect.bottom, 200, 100, hwnd, 0, hThisInstance, NULL);
Tenhle kod vytvori samostatny listbox vznasejici se nad dialogem. Pokud s nim budes spravne zachazet (tzn nepisu text->schovat, pisu text->nacist do listboxu podobna slova a zobrazit), bude se to chovat stejne jako ten v exploreru. Jinak zpracovani zprav od ListBoxu je vicemene stejne jako od ComboBoxu, akorat misto CB_ je tam LB_,