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