ComboBox в IE ToolBar
От: RK-DVR Россия  
Дата: 15.10.05 20:04
Оценка:
Привет всем!
Простите, что повторяюсь (тема весьма избитая), но ну никак не могу понять почему не хочет работать BackSpace в MS IExplorer ToolBar
В общем, сам тулбар я создаю так:

сначала родительское окно:

RECT rc;
    GetClientRect(hParent, &rc);
    m_hOurWindow=CreateWindow(_myWndClass, NULL, WS_CHILD, 0, 0, rc.right,
                                rc.bottom, hParent, NULL, g_hThisModule, this);

WNDCLASS стиль при этом: wc.style=CS_GLOBALCLASS;
Потом создаём child-окна:
m_hSearchStrComboBox=CreateWindow(TEXT("COMBOBOX"), NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWN
                        | CBS_OWNERDRAWFIXED | CBS_SORT | CBS_HASSTRINGS,
                        0, 0, 0, 0, m_hOurWindow, (HMENU)IDC_COMBOBOX, g_hThisModule, NULL);
m_hSSLBut=CreateWindow(TEXT("BUTTON"), NULL, WS_CHILD | WS_VISIBLE |BS_BITMAP, 0, 0, 0, 0, m_hOurWindow,
                    (HMENU)IDC_SSLBUTTON, g_hThisModule, NULL);

Стиль у ComboBox CBS_OWNERDRAWFIXED для того, чтобы в будущем отрисовывать в списке иконки.
Интерфейс IInputObject наследуется, только вот окну с хэндлом m_hOurWindow никак не приходит WM_SETFOCUS...
Естес-но смотрел тут
Автор: kocmoc
Дата: 20.08.03
но так и не понял, мне что, создавать с помощью вызова CreateToolbarEx свой тулбар на родительскои окне и уже на него помещать свои контролы?
Как мне узнать что в ComboBox юзер вводит что-то, что у ComboBox фокус ввода?

P.S. Пробовал subclassing для своего ComboBox, но ни WM_KEYDOWN/UP ни тем более WM_CHAR не приходят, когда редактируется текст в Edit ComboBox.
Re: ComboBox в IE ToolBar
От: kero Россия  
Дата: 15.10.05 20:59
Оценка:
Здравствуйте, RK-DVR, Вы писали:

RD>Как мне узнать что в ComboBox юзер вводит что-то, что у ComboBox фокус ввода?


0) Spy++.
1) WM_COMMAND, CBN_() для комбобокса, WM_COMMAND, EN_() для эдита в комбобоксе
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[2]: ComboBox в IE ToolBar
От: Аноним  
Дата: 17.10.05 20:38
Оценка:
Здравствуйте, kero, Вы писали:

K>0) Spy++.

K>1) WM_COMMAND, CBN_() для комбобокса, WM_COMMAND, EN_() для эдита в комбобоксе

kero, спасибо огромное за совет!!
Только теперь ещё появилась побочная проблема: при попытке набрать русские символы в строке редактирования вместо них появляются какие-то коды..
Вот исходник TranslateAcceleratorIO:
STDMETHODIMP IMyIEExtention::TranslateAcceleratorIO(LPMSG pMsg)
{
    //MessageBox(NULL, "TranslateIO", "dsaf", MB_OK);
    int nVirtKey = (int)(pMsg->wParam);
    if (VK_BACK == nVirtKey)
    {        
        // обработка нажатия BackSpace
        return S_OK;
    }
    else if(VK_RETURN == nVirtKey) 
    {
            // обаботка нажатия Enter
        return S_OK;
    }

    TranslateMessage(pMsg);
      DispatchMessage(pMsg);
      return S_OK;    
}

по идее все остальные сообщения кроме тех, что содержат в себе BackSpace и Enter, передаются стандартному обработчику.. Или это не так? И как восстановить в таком случае русский язык в ComboBox?
Re: ComboBox в IE ToolBar
От: RK-DVR Россия  
Дата: 18.10.05 17:32
Оценка:
Короче, проблема решилась, как и советовал kero, ловлей фокуса в WM_COMMAND — CBN_SETFOCUS, за что ему большое спасибо
вот если кому интересно код обработки нажатия backspace:
STDMETHODIMP IMyIEExtention::TranslateAcceleratorIO(LPMSG pMsg)
{    
    int nVirtKey = (int)(pMsg->wParam);
    if (VK_BACK == nVirtKey)
    {
        TranslateMessage(pMsg);
        DispatchMessage(pMsg);
        return S_OK;
    }    
    return S_FALSE;    
}
Re[2]: ComboBox в IE ToolBar
От: Аноним  
Дата: 13.12.05 18:05
Оценка:
Здравствуйте, RK-DVR, Вы писали:

RD>Короче, проблема решилась, как и советовал kero, ловлей фокуса в WM_COMMAND — CBN_SETFOCUS, за что ему большое спасибо

RD>вот если кому интересно код обработки нажатия backspace:
RD>
RD>STDMETHODIMP IMyIEExtention::TranslateAcceleratorIO(LPMSG pMsg)
RD>{    
RD>    int nVirtKey = (int)(pMsg->wParam);
RD>    if (VK_BACK == nVirtKey)
RD>    {
RD>        TranslateMessage(pMsg);
RD>        DispatchMessage(pMsg);
RD>        return S_OK;
RD>    }    
RD>    return S_FALSE;    
RD>}
RD>


ты не представляешь, как интересно — я 3 часа пытался убрать проблемы с русским шрифтом, оказалось надо просто
TranslateMessage(pMsg);
DispatchMessage(pMsg);
поместить внутрь условия if (VK_BACK == nVirtKey) {...}. В общем, заработало.
Спасибо =))
Re[3]: ComboBox в IE ToolBar
От: Аноним  
Дата: 08.08.06 10:50
Оценка:
А>Только теперь ещё появилась побочная проблема: при попытке набрать русские символы в строке редактирования вместо них появляются какие-то коды..

Надо использовать DispatchMessageW(pMsg) а не DispatchMessage(pMsg).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.