Я много занимался поиском и поиском и не нашел ответа на свой вопрос, поэтому … Я создал пользовательское меню, используя 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);
}
}
};
Если есть такой вопрос, пожалуйста, пришлите мне ссылку, и я прошу прощения, если есть что-то не так, спасибо за помощь
Задача ещё не решена.
Других решений пока нет …