Есть ли способ исправить проблему с текстом в настройках пользовательского меню в WinForm C ++ при переходе с одного монитора на другой?

Я много занимался поиском и поиском и не нашел ответа на свой вопрос, поэтому … Я создал пользовательское меню, используя WinForm C ++, где мы переопределяем методы Renderer и OnPaint.
Наше приложение может переходить с одного монитора на другой, и когда мы делаем это, тексты опций в моем меню искажаются.
Я понятия не имею или не знаю, есть ли решение. Я буду очень благодарен, если кто-нибудь сможет мне помочь.

Вот меню справа:
правильное меню

И Жук
Текст поврежден

MyRenderer.h

    ref class MyRenderer: ToolStripProfessionalRenderer
{

protected:

virtual void OnRenderToolStripBorder(System::Windows::Forms::ToolStripRenderEventArgs ^e) override
{

System::Drawing::SolidBrush^ brush = gcnew System::Drawing::SolidBrush(Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(0)), static_cast<System::Int32>(static_cast<System::Byte>(60)),static_cast<System::Int32>(static_cast<System::Byte>(107))));

e->Graphics->FillRectangle(brush, e->ConnectedArea);
Drawing::Rectangle rectBorder = Drawing::Rectangle(0, 1, e->AffectedBounds.Width-1, e->AffectedBounds.Height-2);

Pen^ pen = gcnew Pen(brush, 2);

e->Graphics->DrawRectangle(pen, rectBorder);
}
};

MenuHover.h

    public ref class MenuHover: ToolStripMenuItem
{
protected:
virtual void OnPaint(PaintEventArgs ^e) override
{
if (this->Visible)
{
System::Drawing::SolidBrush^ brush = gcnew             System::Drawing::SolidBrush(Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(0)), static_cast<System::Int32>(static_cast<System::Byte>(60)),
static_cast<System::Int32>(static_cast<System::Byte>(107))));

e->Graphics->FillRectangle(brush, e->ClipRectangle.X, e->ClipRectangle.Y, e->ClipRectangle.Width, e->ClipRectangle.Height+34);

Drawing::Rectangle rect = Drawing::Rectangle(e->ClipRectangle.X, e->ClipRectangle.Y+5, e->ClipRectangle.Width, e->ClipRectangle.Height+34);
StringFormat^ sf = gcnew StringFormat();
sf->Alignment = StringAlignment::Center;

e->Graphics->DrawString(this->Text, this->Font, Brushes::White, rect, sf);
}

if (this->Selected || this->Pressed)
{
System::Drawing::SolidBrush^ brush = gcnew System::Drawing::SolidBrush(Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(0)), static_cast<System::Int32>(static_cast<System::Byte>(42)),
static_cast<System::Int32>(static_cast<System::Byte>(82))));

e->Graphics->FillRectangle(brush, e->ClipRectangle.X, e->ClipRectangle.Y, e->ClipRectangle.Width, e->ClipRectangle.Height);

Drawing::Rectangle rect = Drawing::Rectangle(e->ClipRectangle.X, e->ClipRectangle.Y+5, e->ClipRectangle.Width, e->ClipRectangle.Height);

StringFormat^ sf = gcnew StringFormat();
sf->Alignment = StringAlignment::Center;

e->Graphics->DrawString(this->Text, this->Font, Brushes::White, rect, sf);
}
}
};

MenuHoverItem.h

    ref class MenuHoverItem: ToolStripMenuItem
{
protected:
virtual void OnPaint(PaintEventArgs ^e) override
{
if (this->Visible)
{
System::Drawing::SolidBrush^ brush = gcnew System::Drawing::SolidBrush(Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(0)), static_cast<System::Int32>(static_cast<System::Byte>(42)),
static_cast<System::Int32>(static_cast<System::Byte>(82))));

e->Graphics->FillRectangle(brush, e->ClipRectangle.X, e->ClipRectangle.Y, e->ClipRectangle.Width, e->ClipRectangle.Height);
Drawing::Rectangle rect = Drawing::Rectangle(e->ClipRectangle.X+14, e->ClipRectangle.Y+1, e->ClipRectangle.Width, e->ClipRectangle.Height);
StringFormat^ sf = gcnew StringFormat();
sf->LineAlignment = StringAlignment::Center;

e->Graphics->DrawString(this->Text, this->Font, Brushes::White, rect, sf);
}

if (this->Selected || this->Pressed)
{
System::Drawing::SolidBrush^ brush = gcnew System::Drawing::SolidBrush(Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(0)), static_cast<System::Int32>(static_cast<System::Byte>(60)),
static_cast<System::Int32>(static_cast<System::Byte>(107))));

e->Graphics->FillRectangle(brush, e->ClipRectangle.X, e->ClipRectangle.Y, e->ClipRectangle.Width, e->ClipRectangle.Height-1);
Drawing::Rectangle rect = Drawing::Rectangle(e->ClipRectangle.X+14, e->ClipRectangle.Y+1, e->ClipRectangle.Width, e->ClipRectangle.Height);

StringFormat^ sf = gcnew StringFormat();
sf->LineAlignment = StringAlignment::Center;
e->Graphics->DrawString(this->Text, this->Font, Brushes::White, rect, sf);
}
}
};

Если есть такой вопрос, пожалуйста, пришлите мне ссылку, и я прошу прощения, если есть что-то не так, спасибо за помощь

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]