honeyashu Ответов: 0

Можете нарисовать прямоугольник, охватывающий бар Титал через форму MDI в Windows 10 развертывание


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

Что я делаю не так или что-то другое нужно сделать над Windows 10.

Пожалуйста, предложите.

Что я уже пробовал:

private void Main_OnNcPaint(ref Message m)
        {
            paintTitleBar = m;
            IntPtr hdc = GetWindowDC(m.HWnd);
            Graphics g = Graphics.FromHdc(hdc);
            RectangleF titleBarRectF = g.VisibleClipBounds;
            int formWidth = (int)titleBarRectF.Width;
            int CaptionHeight = Bounds.Height - ClientRectangle.Height;
            Size CloseButtonSize = SystemInformation.CaptionButtonSize;
            int X = formWidth - (CloseButtonSize.Width * 4) - 200;
            int Y = 4;
            int width = 200;
            int height = CaptionHeight - 10;
            string dateText;            
                dateText = DateTime.Now.ToString("dd MMM yyyy hh:mm:ss tt");          
            RectangleF timeDisplayRectF = new RectangleF(X, Y, width, height);
            g.FillRectangle(new SolidBrush(Color.Black), timeDisplayRectF);            
            Font font = new Font(Font.FontFamily, Font.Size + 2, FontStyle.Bold);
            g.DrawString(dateText, font, new SolidBrush(Color.White), timeDisplayRectF);
            g.Dispose();
            ReleaseDC(m.HWnd, hdc);
            m.Result = IntPtr.Zero;           
        }

Gerry Schmitz

Это бессмысленный "взлом". Придерживайтесь работы с элементами управления в клиентской области.

honeyashu

Спасибо, Джерри. Я согласен, но требование заключается в том, что я должен отобразить панель часов в верхнем углу моего приложения, так что взлом.

Gerry Schmitz

Проверьте свой окончательный рост. Не ожидайте, что Win 10 "defaults" всегда будет соответствовать Win 7/8.

"int height = CaptionHeight - 10;"

honeyashu

Пытался. Но не сработало.

0 Ответов