Как сделать, чтобы детская форма мерцала? - PullRequest
0 голосов
/ 06 февраля 2019

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

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        CustomForm form = new CustomForm();
        form.ShowDialog();
    }
}

Я обработал On_Wm_NcActivate с помощью следующего кода. Я думаю, что он не обрабатывает 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);
    }
}

Я обработал On_Wm_NcPaint с помощью следующего кода, чтобы настроить строку заголовка, а также границу и фон переопределенногоform.

private void On_Wm_NcPaint(ref Message m)
        {
            var rect = new NativePaint.RECT();
            NativeMethods.GetWindowRect(m.HWnd, ref rect);
            var deviceContext = NativeMethods.GetWindowDC(m.HWnd);
            if (deviceContext != IntPtr.Zero)
            {
                var bufferDeviceContext = NativeMethods.CreateCompatibleDC(deviceContext);
                if (bufferDeviceContext != IntPtr.Zero)
                {
                    IntPtr bmp = NativeMethods.CreateCompatibleBitmap(deviceContext, rect.Width, rect.Height);

                    if (bmp != IntPtr.Zero)
                    {
                        if (style == null)
                        {
                            return;
                        }

                        int borderThickness = 1;
                        var oldBmp = NativeMethods.SelectObject(bufferDeviceContext, bmp);
                        using (Graphics graphics = Graphics.FromHdc(bufferDeviceContext))
                        {
                            //To clip the client area from painting based on the border thickness and title bar height.
                            var top = GetCaptionBarHeight() + (int)borderThickness + 5;
                            var left = (int)borderThickness;
                            var right = rect.Width - (int)borderThickness;
                            var bottom = rect.Height - (int)borderThickness;
                            if (FormBorderStyle != FormBorderStyle.None)
                                DrawFrame(graphics, rect);

                            if (FormBorderStyle == FormBorderStyle.None)
                            {
                                top = 0;
                                left = 0;
                                right = Width;
                                bottom = Height;
                            }

                            //Clip the client region from the window rectangle.
                            if (this.WindowState != FormWindowState.Minimized)
                                NativeMethods.ExcludeClipRect(deviceContext, left + 1, top, right - 1, bottom - 1);

                            NativeMethods.BitBlt(deviceContext, 0, 0, rect.Width, rect.Height, bufferDeviceContext, 0, 0, WindowMessages.SRCCOPY);
                            NativeMethods.SelectObject(bufferDeviceContext, oldBmp);
                            NativeMethods.DeleteObject(bmp);
                            NativeMethods.DeleteObject(oldBmp);
                            NativeMethods.DeleteDC(deviceContext);
                            NativeMethods.DeleteObject(bufferDeviceContext);
                        }
                    }
                }
            }
        }

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

Примечание. Значок на панели задач мигает, но пользовательская форма не мигает

1 Ответ

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

Я не понимаю,

Но вы можете заполнить форму Master, Child, используя MDI (Multiple Document Interface)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...