Здраствуйте!
Вобщем делаю обработчик бэкспейса, чтобы он работал как бекспейс в окне Edit Combobox.
На компьютере, где собирается длл тулбара, где собственно стоит визуал студия, все работает ок, т.е. при бекспейсе символы удаляются (удаляю я кстати в ручную :( )
Но при установке тулбара на другой комп, бекспейс не работает как нужно, т.е. не удаляет символы в окне edit :(
В чем трабл может быть?
Просто я пробовал обычным методом, прочитав пару тем про проблемы бекспейса в тулбаре, но никак не получается перехватывать фокусы и собственно обрабатывать нажатие клавиш :(, поэтому и с табом так же проблему не решил, т.е. при нажатии на таб нужно менять фокус с текущего окна тулбара на следующее, но в любом случае фокус падает на адресную строку IE.
Вот вырезки из кода:
кривовато и кустарно конечно, но подругом не смог :(
там где lParam==917505, я не знаю что это такое, скорее всего состояние клавиши, т.е. на нажатие, если его убрать удаляться будет не по одному, а по нескольку символов
...
POINT pt;
pt.x = 1;
pt.y = 1;
hwndEd1 = ChildWindowFromPoint(hwndCombo1, pt);
hwndEd2 = ChildWindowFromPoint(hwndCombo2, pt);
hook1 = new CLockKeybrdHook(hwndEd1);
hook2 = new CLockKeybrdHook(hwndEd2);
....
class CLockKeybrdHook
{
private:
HWND hWnd;
HHOOK hHook;
static LRESULT WINAPI KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
public:
CLockKeybrdHook(HWND hWnd_)
{
hWnd = hWnd_;
hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, (HINSTANCE)NULL, GetCurrentThreadId());
};
~CLockKeybrdHook()
{
UnhookWindowsHookEx(hHook);
};
};
CLockKeybrdHook *hook1(NULL);
CLockKeybrdHook *hook2(NULL);
LRESULT WINAPI CLockKeybrdHook::KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HWND result;
HHOOK hHookCur;
HWND hWndCur;
hWndCur=GetFocus();
if(hWndCur==hwndEd1)
hHookCur=hook1->hHook;
else
{
if(hWndCur==hwndEd2)
hHookCur=hook2->hHook;
}
}
if(hWndCur==hwndEd1 ||hWndCur==hwndEd2 )
{
if (nCode < 0)
return CallNextHookEx(hHookCur, nCode, wParam, lParam);
switch (nCode)
{
case HC_ACTION:
{
switch (wParam)
{
case VK_BACK:
if((hWndCur==hwndEd1 || hWndCur== hwndEd2) && lParam==917505)
{
DWORD start_pos;
SendMessage(hWndCur, EM_GETSEL, (WPARAM) &start_pos,NULL);
if(start_pos!=0)
{
SendMessage(hWndCur,EM_SETSEL,(WPARAM) start_pos-1,(WPARAM) start_pos);
SendMessage(hWndCur,WM_CLEAR,0,0);
}
}
break;
...
}
}
return 0;
}