Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Проблемы с контролами CEdit и CListBox.


Автор: Vitaly_ 4.9.2007, 08:22
1)
У меня есть функция :
Код

BOOL SetProcessIP( void ){
    int Index;
    Index = m_list.GetCurSel();
    CString str;
    if ( Index != -1 )
        str.Format(_T("%d"), ProcessID[Index]);
    else
    {
        str = _T("Error!");
        return FALSE;
    }
    m_Edit.SetWindowText( str );
    return TRUE;
}



Вопрос: Почему когда выполняется даная функция контрол типа CEdit не перерисовуется если например переменная str = "12".

2) Как мне словить соощение в WM_COMMAND на выбор того или иного елемента в контроле типа CListBox.

Код

......
case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    switch (wmId)
        {
        case IDС_LISTBOX:
                   // ЧТО НАДА ТУТ НАПИСАТЬ ЧТО БЫ СЛОВИТЬ СООБЩЕНИЕ КГДА ПОЛЬЗОВТЕЛЬ ВЫБИРАЕТ ТОТ ИЛИ ИНОЙ ЕЛЕМЕНТ В CListBox.
                break;
                .....
                }
break;
......

Автор: Earnest 4.9.2007, 10:24
1) Например, ты переходишь в ветвь "return FALSE". Или переменная m_Edit не связана ни с каким реальным контролом. Или еще где-нибудь криво. 

2) Чтобы поймать изменение выбора в листбоксе, на диалоге напиши обработчик с сигнатурой void (void), и вставь его в карту сообщений: ON_LBN_SELCHANGE (IDC_LISTBOX, <твой обработчик>).

Автор: abdyla_v 5.9.2007, 08:29
Цитата

2) Чтобы поймать изменение выбора в листбоксе, на диалоге напиши обработчик с сигнатурой void (void), и вставь его в карту сообщений: ON_LBN_SELCHANGE (IDC_LISTBOX, <твой обработчик>).


На сколько я понимаю там нету такого понятия как карта сообщения - это не диалоговое окно! Я создал простой проект Visual C++ => Win32 Project => Windows Application. Тоесть это есть простое Win32API приложение. Может я и ошиаюсь....

Добавлено через 4 минуты и 27 секунд
Цитата

2) Чтобы поймать изменение выбора в листбоксе, на диалоге напиши обработчик с сигнатурой void (void), и вставь его в карту сообщений: ON_LBN_SELCHANGE (IDC_LISTBOX, <твой обработчик>).


На сколько я понимаю там нету такого понятия как карта сообщения - это не диалоговое окно! Я создал простой проект Visual C++ => Win32 Project => Windows Application. Тоесть это есть простое Win32API приложение. Может я и ошиаюсь....

Добавлено через 5 минут и 6 секунд
Цитата

2) Чтобы поймать изменение выбора в листбоксе, на диалоге напиши обработчик с сигнатурой void (void), и вставь его в карту сообщений: ON_LBN_SELCHANGE (IDC_LISTBOX, <твой обработчик>).


На сколько я понимаю там нету такого понятия как карта сообщения - это не диалоговое окно! Я создал простой проект Visual C++ => Win32 Project => Windows Application. Тоесть это есть простое Win32API приложение. Может я и ошиаюсь....


Автор: Vitaly_ 5.9.2007, 08:35
Цитата

2) Чтобы поймать изменение выбора в листбоксе, на диалоге напиши обработчик с сигнатурой void (void), и вставь его в карту сообщений: ON_LBN_SELCHANGE (IDC_LISTBOX, <твой обработчик>).


На сколько я понимаю там нету такого понятия как карта сообщения - это не диалоговое окно! Я создал простой проект Visual C++ => Win32 Project => Windows Application. Тоесть это есть простое Win32API приложение. Может я и ошиаюсь....


Автор: Earnest 5.9.2007, 15:12
Ты как-нибудь определись: либо MFC + CEdit \ CListBox, либо голый WinAPI и никаких Це-эдитов...
Если у тебя не MFC-проект, то оконные классы работать не будут - их поддерживает оболочка.В API ловишь команду как ты написал, код уведомления LBN_SELCHANGE.

Автор: Vitaly_ 5.9.2007, 17:43
CEdit \ CListBox - это контролы с WTL

Автор: SenkraD 5.9.2007, 17:53
Vitaly_,  а ты от всех нужных интерфейсов унаследовался?
Все нужные "мапы" и их поля есть?

Автор: Vitaly_ 6.9.2007, 17:06
Спасиба за всё! Я уже сделал по другому!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)