Дочерняя форма не мигает при нажатии на родительское окно

Я разрабатываю пользовательскую форму, которая предоставляет больше возможностей для настройки внешнего вида формы.

Для этого я вывел класс из 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);
            }
       }

Я понятия не имею, где я ошибся. Поэтому, пожалуйста, дайте мне предложение

1 ответ

Вы должны установить родителя "формы" в родительскую форму

Другие вопросы по тегам