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