Я работаю над приложением C # .Net, в котором есть несколько раздражающая ошибка. В главном окне есть несколько вкладок, каждая из которых имеет сетку. При переключении с одной вкладки на другую или выборе другой строки в сетке выполняется некоторая фоновая обработка, и во время этого меню мигает по мере перерисовки (пункты меню «Файл», «Справка» и т. Д., А также значок и заголовок окна).
Сначала я попытался отключить перерисовку окна при переключении вкладок / строк (сообщение WM_SETREDRAW). В одном случае это работает отлично. С другой стороны, это решает непосредственную ошибку (мерцание заголовка / меню), но между отключением перерисовки и повторным включением окно «прозрачно» для щелчков мыши - есть небольшое окно (<1 сек), в котором я могу нажать и он, скажем, выделит значок на моем рабочем столе, как будто приложения там вообще не было. Если у меня что-то еще работает в фоновом режиме (скажем, в Firefox), оно на самом деле получит фокус при нажатии (и нарисует часть браузера, скажем, адресную строку). </p>
Вот код, который я добавил.
m = new Message();
m.HWnd = System.Windows.Forms.Application.OpenForms[0].Handle; //top level
m.WParam = (IntPtr)0; //disable redraw
m.LParam = (IntPtr)0; //unused
m.Msg = 11; //wm_setredraw
WndProc(ref m);
- Приложение игнорирует щелчки в этом разделе (в одном случае)
m = new Message();
m.HWnd = System.Windows.Forms.Application.OpenForms[0].Handle; //top level
m.WParam = (IntPtr)1; //enable
m.LParam = (IntPtr)0; //unused
m.Msg = 11; //wm_setredraw
WndProc(ref m);
System.Windows.Forms.Application.OpenForms[0].Refresh();
Кто-нибудь знает, если а) есть способ исправить проблему с прозрачным приложением здесь, или б) если я делаю это неправильно в первую очередь, и это нужно исправить каким-то другим способом?