Привет всем!
Простите, что повторяюсь (тема весьма избитая), но ну никак не могу понять почему не хочет работать 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.
Здравствуйте, 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?
Короче, проблема решилась, как и советовал 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;
}
Здравствуйте, 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) {...}. В общем, заработало.
Спасибо =))