Коллеги, подскажите, пожалуйста, как можно решить следующую проблему.
Есть окошко - frame, на нём кнопка (назовём её Родительская кнопка). При нажатии на Родительскую кнопку создаётся и открывается в модальном режиме окошко - диалог. Примерно таким образом:
StartFrame* startFrame = new StartFrame(0);
startFrame->ShowModal();
startFrame->Destroy();
В дочернем этом окошке тоже имеется кнопка (назовём её Дочерняя кнопка), и расположена она аккурат на том же самом месте, что и кнопка в родительском окне (в смысле размер и координаты на экране такие же). И всё хорошо работает, если нажимать на Родительскую кнопку один раз. Но проблема в том, что создание дочернего окошка требует определённого времени, и нетерпеливые пользователи начинают тыркать мышкой Родительскую кнопку ещё и ещё раз. И в итоге после открытия дочернего окошка сразу же нажимается Дочерняя кнопка, что совершенно не нужно. Порекомендуйте, в каком направлении копать?
Сбросить mouse events при открытии нов
Сбросить mouse events при открытии нов
Last edited by Soliton on Fri Sep 19, 2008 10:40 am, edited 1 time in total.
Проблема решена. Если кому интересно - следующим образом:
1. Создан mouse hook, перехватывающий и блокирующий все мышинные события
2. Созданы глобальные функции блокировки и разблокирования мыши:
1. Создан mouse hook, перехватывающий и блокирующий все мышинные события
Code: Select all
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if((nCode == HC_ACTION)) return -1;
else return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}
3. В родительском окне в обработчике нажатия на кнопку мыша блокируется://disable mouse
void disableMouse()
{
hMouseHook = SetWindowsHookEx(WH_MOUSE, &MouseProc, NULL, GetCurrentThreadId());
}
//enable mouse
void enableMouse()
{
UnhookWindowsHookEx(hMouseHook);
}
4. В дочернем окне создаётся обработчик события OnPaintdisableMouse();
StartFrame* startFrame = new StartFrame(0);
startFrame->ShowModal();
startFrame->Destroy();
Code: Select all
void StartFrame::OnPaint(wxPaintEvent &event)
{
enableMouse();
event.Skip();
}
OS: Windows XP
Compiler: MSVC++
wxWidgets: 2.8.7
Compiler: MSVC++
wxWidgets: 2.8.7