WinApi в C# или как избавиться от мерцания формы при перерисовке
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



WinApi в C# или как избавиться от мерцания... Expand / Collapse
Автор
Сообщение
30.03.2003 22:41
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 04.04.2003 23:08
Сообщ.: 3, Visits: 34
В С# как можно до api добраться? У меня при перерисовке форма моргает - просто ужаSS. WM_EraseBckgrnd как нибудь можно выдернуть? или в С# где то в другом месте копать нужно??
Сообщ. #778170
31.03.2003 13:57
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 03.03.2006 19:03
Сообщ.: 1 908, Visits: 21 011
WM_EraseBckgrnd можно выдернуть в процедуре WndProc, надо унаследовать нужный контрол, и в нем написать что-то типа:

const int WM_ERASEBKGND = 0x0014;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if(m.Msg == WM_ERASEBKGND)
{
//что-то сделать
} else {
//вызвать обработку по-умолчанию
base.WndProc(ref m);
}
}

А вообще-то проблемы с перерисовкой формы обычно решаются с помощью вызова Application.DoEvents() непосредственно перед долговыполняющейся функции, которая мешает форме сразу же перерисоваться и форма ждет, когда закончится выполнение этой функции, чтобы перерисоваться (обычно это бывает, когда в событии OnLoad прописывается что-то долгое). Если это так (событие OnLoad), то правильнее будет перенести код из этого события в отдельный метод и вызывать его до показа формы, типа:

Form form=new Form();
form.LongMethod();
form.Show();
Сообщ. #778230
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 1:11