MenuStrip.WndProc(Message) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Processa mensagens do Windows.
protected:
override void WndProc(System::Windows::Forms::Message % m);
protected override void WndProc (ref System.Windows.Forms.Message m);
override this.WndProc : Message -> unit
Protected Overrides Sub WndProc (ByRef m As Message)
Parâmetros
Exemplos
O exemplo de código a seguir demonstra a substituição do WndProc método para lidar com mensagens do sistema operacional identificadas na Message estrutura . A mensagem WM_ACTIVATEAPP sistema operacional é tratada neste exemplo para saber quando outro aplicativo está se tornando ativo. Consulte a referência de documentação do SDK de Plataforma localizada em https://video2.skills-academy.com para entender os valores disponíveis Message.Msg, Message.LParame Message.WParam . Os valores constantes reais podem ser encontrados no arquivo de cabeçalho windows.h incluído no download do SDK da Plataforma (seção Core SDK), que também está disponível no Docs.
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Security::Permissions;
namespace csTempWindowsApplication1
{
public ref class Form1: public System::Windows::Forms::Form
{
private:
// Constant value was found in the "windows.h" header file.
static const Int32 WM_ACTIVATEAPP = 0x001C;
Boolean appActive;
public:
Form1()
{
appActive = true;
this->Size = System::Drawing::Size( 300, 300 );
this->Text = "Form1";
this->Font = gcnew System::Drawing::Font( "Microsoft Sans Serif",18.0F,System::Drawing::FontStyle::Bold,System::Drawing::GraphicsUnit::Point,((System::Byte)(0)) );
}
protected:
virtual void OnPaint( PaintEventArgs^ e ) override
{
// Paint a string in different styles depending on whether the
// application is active.
if ( appActive )
{
e->Graphics->FillRectangle( SystemBrushes::ActiveCaption, 20, 20, 260, 50 );
e->Graphics->DrawString( "Application is active", this->Font, SystemBrushes::ActiveCaptionText, 20, 20 );
}
else
{
e->Graphics->FillRectangle( SystemBrushes::InactiveCaption, 20, 20, 260, 50 );
e->Graphics->DrawString( "Application is Inactive", this->Font, SystemBrushes::ActiveCaptionText, 20, 20 );
}
}
[SecurityPermission(SecurityAction::Demand, Flags=SecurityPermissionFlag::UnmanagedCode)]
virtual void WndProc( Message% m ) override
{
// Listen for operating system messages.
switch ( m.Msg )
{
case WM_ACTIVATEAPP:
// The WParam value identifies what is occurring.
appActive = (int)m.WParam != 0;
// Invalidate to get new text painted.
this->Invalidate();
break;
}
Form::WndProc( m );
}
};
}
[STAThread]
int main()
{
Application::Run( gcnew csTempWindowsApplication1::Form1 );
}
using System;
using System.Drawing;
using System.Windows.Forms;
namespace csTempWindowsApplication1
{
public class Form1 : System.Windows.Forms.Form
{
// Constant value was found in the "windows.h" header file.
private const int WM_ACTIVATEAPP = 0x001C;
private bool appActive = true;
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
public Form1()
{
this.Size = new System.Drawing.Size(300,300);
this.Text = "Form1";
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
}
protected override void OnPaint(PaintEventArgs e)
{
// Paint a string in different styles depending on whether the
// application is active.
if (appActive)
{
e.Graphics.FillRectangle(SystemBrushes.ActiveCaption,20,20,260,50);
e.Graphics.DrawString("Application is active", this.Font, SystemBrushes.ActiveCaptionText, 20,20);
}
else
{
e.Graphics.FillRectangle(SystemBrushes.InactiveCaption,20,20,260,50);
e.Graphics.DrawString("Application is Inactive", this.Font, SystemBrushes.ActiveCaptionText, 20,20);
}
}
protected override void WndProc(ref Message m)
{
// Listen for operating system messages.
switch (m.Msg)
{
// The WM_ACTIVATEAPP message occurs when the application
// becomes the active application or becomes inactive.
case WM_ACTIVATEAPP:
// The WParam value identifies what is occurring.
appActive = (((int)m.WParam != 0));
// Invalidate to get new text painted.
this.Invalidate();
break;
}
base.WndProc(ref m);
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Namespace csTempWindowsApplication1
Public Class Form1
Inherits System.Windows.Forms.Form
' Constant value was found in the "windows.h" header file.
Private Const WM_ACTIVATEAPP As Integer = &H1C
Private appActive As Boolean = True
<STAThread()> _
Shared Sub Main()
Application.Run(New Form1())
End Sub
Public Sub New()
MyBase.New()
Me.Size = New System.Drawing.Size(300, 300)
Me.Text = "Form1"
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
' Paint a string in different styles depending on whether the
' application is active.
If (appActive) Then
e.Graphics.FillRectangle(SystemBrushes.ActiveCaption, 20, 20, 260, 50)
e.Graphics.DrawString("Application is active", Me.Font, SystemBrushes.ActiveCaptionText, 20, 20)
Else
e.Graphics.FillRectangle(SystemBrushes.InactiveCaption, 20, 20, 260, 50)
e.Graphics.DrawString("Application is Inactive", Me.Font, SystemBrushes.ActiveCaptionText, 20, 20)
End If
End Sub
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Protected Overrides Sub WndProc(ByRef m As Message)
' Listen for operating system messages
Select Case (m.Msg)
' The WM_ACTIVATEAPP message occurs when the application
' becomes the active application or becomes inactive.
Case WM_ACTIVATEAPP
' The WParam value identifies what is occurring.
appActive = (m.WParam.ToInt32() <> 0)
' Invalidate to get new text painted.
Me.Invalidate()
End Select
MyBase.WndProc(m)
End Sub
End Class
End Namespace
Comentários
Todas as mensagens são enviadas para o WndProc método depois de serem filtradas por meio do PreProcessMessage método .
O WndProc método corresponde exatamente à função do Windows WindowProc
. Para obter mais informações sobre como processar mensagens do Windows, consulte Função de retorno de chamada WindowProc.
Notas aos Herdeiros
Herdar controles deve chamar o método da WndProc(Message) classe base para processar todas as mensagens que eles não manipulam.