Vofka
Гость
|
|
« : 05-12-2005 15:53 » |
|
Люди, помогите пожалуйста! Ну никак не могу приделать combobox к диалогу. Вернее так: сам комбобокс вставил, добавил элементы через CB_ADDSTRING, а как теперь получить индекс элемента? Какое событие должно обрабатываться при выборе элемента комбобокса? CBN_DBLCLK тут не приделаешь - элемент-то выбирается одним кликом... Может я не понимаю чего?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 06-12-2005 10:09 » |
|
обрабатывать CBN_SELCHANGE, индекс: CComboBox* cbx=0; cbx=(CComboBox*)(GetDlgItem( ID )); if(!cbx) { //ошибка //return; }
int index=cbx->GetCurSel();
if(index<0) { //ошибка //return; }
ID - ИД комбы (можно, кстати, в обработчике достать так: ) CButton* cbx=(CComboBox*)GetDlgItem(GetCurrentMessage()->wParam); if(!cbx) { //ошибка //return; }
int index=cbx->GetCurSel();
if(index<0) { //ошибка //return; }
|
|
« Последнее редактирование: 06-12-2005 10:12 от Алексей1153 »
|
Записан
|
|
|
|
Vofka
Гость
|
|
« Ответ #2 : 06-12-2005 13:49 » |
|
У меня обработчик combobox'а вот так реализован: case WM_COMMAND: switch (LOWORD (wParam)) { case IDC_COMBO1: if(HIWORD(wParam)==CBN_SELCHANGE) sf.ParamSpaceSymb = SendDlgItemMessage(hDlg,IDC_COMBO1,CB_GETCURSEL,0,0); return 1;
Все хорошо, только в переменную ничего не передается Хотя на брекпойнте вываливается исправно, т.е. событие видит, но переменная как была с нулем, так и осталась...
|
|
« Последнее редактирование: 04-12-2007 20:26 от Алексей1153++ »
|
Записан
|
|
|
|
Malaja
|
|
« Ответ #3 : 06-12-2005 15:25 » |
|
Vofka, вот пример (на диалоге у тебя должен быть элемент с ид=IDC_COMBO1): void CCombo::OnSelchangeCombo1() { CString strCombo; int nSel = 0, nItemData = 0;
CComboBox * pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1);
// get selection index nSel = pCombo->GetCurSel(); // get selected text pCombo->GetLBText(nSel, strCombo); // show this text GetDlgItem(IDC_STATIC_COMBO)->SetWindowText(strCombo); // get item data (is unique value for each item in the combo box) nItemData = pCombo->GetItemData(nSel); }
BOOL CCombo::OnInitDialog() { CDialog::OnInitDialog(); // set values CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1); if (pCombo) { pCombo->AddString("test1"); pCombo->SetItemData(0, 10);
pCombo->AddString("test2"); pCombo->SetItemData(1, 20);
pCombo->AddString("test3"); pCombo->SetItemData(2, 30);
pCombo->SetCurSel(0); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
что неясно-спрашивай.
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
nikedeforest
|
|
« Ответ #4 : 06-12-2005 17:43 » |
|
Народ, Vofka на АПИ пишет. Вы его МФЦ убьете .
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 07-12-2005 05:27 » |
|
пусть переходит ЗЫ всё переводится
|
|
|
Записан
|
|
|
|
Vofka
Гость
|
|
« Ответ #6 : 07-12-2005 08:00 » |
|
Друзья, nikedeforest абсолютно прав - проект полностью на API, переписывать его на MFC заново - дубу даться (программа уже готова, я только вношу в нее изменения и добавления). Огромная благодарность и Алексею1153, и Malaja, но может кто-то сможет подсказать, как реализовать combobox только на API? Люди добрые, помогите, кто чем может
|
|
|
Записан
|
|
|
|
Vofka
Гость
|
|
« Ответ #7 : 07-12-2005 13:07 » |
|
Уф! Спасибо всем - разобрался! Проблема была в двух местах: case IDC_COMBO1: if(HIWORD(wParam)==CBN_SELCHANGE) {hwndComboBox = GetDlgItem(hDlg, IDC_COMBO1); sf.ParamSpaceSymb = SendMessage(hwndComboBox, CB_GETCURSEL, 0, 0);} return 1;
А главная проблема была вообще в другом месте - в отображение текущего выбора: я написал так: SendDlgItemMessage(hDlg, IDC_COMBO1, CB_SETCURSEL, 0,"текст№1");
а нужно было: SendDlgItemMessage(hDlg, IDC_COMBO1, CB_SETCURSEL, sf.ParamSpaceSymb, 0);
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 19-01-2009 10:16 » |
|
(вопрос снова по комбе, поэтому тут) не могу понять, как программно свернуть и развернуть выпадающий список. Вот это не работает ::SendMessage(m_comboH,CB_SHOWDROPDOWN,(WPARAM)0,(LPARAM)0);//свернуть
а больше ничего похожего не нашёл. Также не помогает даже ::SetFocus(0); хотя, если фокус перемещён мышкой, то список сворачивается
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #9 : 19-01-2009 10:43 » |
|
А m_comboH это у тебя чего?
Если объект, то лучше делай так
m_cmb1.SendMessage(CB_SHOWDROPDOWN, (WPARAM)TRUE,(LPARAM)0); Sleep(3000); m_cmb1.SendMessage(CB_SHOWDROPDOWN, (WPARAM)FALSE,(LPARAM)0);
в крайнем случае так:
::SendMessage(m_cmb1.GetSafeHwnd(), CB_SHOWDROPDOWN, (WPARAM)TRUE,(LPARAM)0); Sleep(3000); ::SendMessage(m_cmb1.GetSafeHwnd(), CB_SHOWDROPDOWN, (WPARAM)FALSE,(LPARAM)0);
Всё работает
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 19-01-2009 12:34 » |
|
неа, не работает Не вижу реакции вообще ::SendMessage(pcbx->GetSafeHwnd(), CB_SHOWDROPDOWN, (WPARAM)1,(LPARAM)0); ::SendMessage(pcbx->GetSafeHwnd(), CB_SHOWDROPDOWN, (WPARAM)0,(LPARAM)0); слип, кстати, тут ни при чём А может это изза того, что элемент расположен на тулбаре ?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #11 : 19-01-2009 13:18 » |
|
Я этот слип встроил чтобы посмотреть программное закрытие. А иначе он закрывается по KillFocus. Попробуй тоже самое на диалоге и ищи проблему в другом месте.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 19-01-2009 18:30 » |
|
хм, странно, щас попробовал, работает. Завтра на работе буду разбираться, что там у меня не так
|
|
|
Записан
|
|
|
|
|