Дочерняя форма не мигает при нажатии на родительское окно - PullRequest
0 голосов
/ 01 февраля 2019

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

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

0 голосов
/ 01 февраля 2019

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

...