Дочерняя форма не мигает при нажатии на родительское окно
Я разрабатываю пользовательскую форму, которая предоставляет больше возможностей для настройки внешнего вида формы.
Для этого я вывел класс из System.Windows.Forms.Form
класс и переопределить WndProc(ref Message m)
метод.
Я обработал необходимые сообщения окна (WM_NCPAINT
, WM_NCCALCSIZE
и т. д.), чтобы настроить форму.
Я показал форму пользовательской формы следующим кодом, чтобы показать дочернюю форму нажатием кнопки.
CustomForm form = new CustomForm();
form.ShowDialog();
при щелчке по родительской форме дочерняя форма не мигает. Но в форме Microsoft происходит мерцание.
Я обработал сообщение окна WM_NCCALCSIZE, чтобы указать размер клиентской области моей формы, как указано ниже.
void On_WM_NcCalcSize(ref Message m)
{
rect.Top += borderThickness + titleBarHeight;
rect.Left += borderThickness;
rect.Right -= borderThickness;
rect.Bottom -= borderThickness;
m.Result = IntPtr.Zero;
Marshal.StructureToPtr(rect, m.LParam, true);
}
И я обработал WM_NCPAINT, чтобы нарисовать пользовательский заголовок и рамку и другие настройки.
Я также обработал On_Wm_NcActivate через следующий код.
private void On_Wm_NcActivate(ref Message m)
{
if (!this.IsMdiContainer)
NativeMethods.LockWindowUpdate(this.Handle);
base.WndProc(ref m);
NativeMethods.LockWindowUpdate(IntPtr.Zero);
if (Style != null)
{
var msg = new Message();
msg.Msg = WindowMessages.WM_NCPAINT;
msg.HWnd = m.HWnd;
msg.WParam = (IntPtr)1;
msg.LParam = (IntPtr)0;
On_Wm_NcPaint(ref msg);
}
}
Я понятия не имею, где я ошибся. Поэтому, пожалуйста, дайте мне предложение