Control.WndProc Method
Processes Windows messages.
[Visual Basic] Protected Overridable Sub WndProc( _ ByRef m As Message _ ) [C#] protected virtual void WndProc( ref Message m ); [C++] protected: virtual void WndProc( Message* m ); [JScript] protected function WndProc( m : Message );
Parameters
- m
- The Windows Message to process.
Remarks
All messages are sent to the WndProc method after getting filtered through the PreProcessMessage method.
The WndProc method corresponds exactly to the Windows WindowProc function. For more information about processing Windows messages, see the WindowProc function documentation in the Windows Platform SDK reference located in the MSDN Library.
Notes to Inheritors: Inheriting controls should call the base class's WndProc method to process any messages that they do not handle.
Example
[Visual Basic, C#, C++] The following example demonstrates overriding the WndProc method to handle operating system messages identified in the Message structure. The WM_ACTIVATEAPP operating system message is handled in this example to know when another application is becoming active. Refer to the Platform SDK documentation reference located in the MSDN Library to understand the available Message.Msg, Message.LParam, and Message.WParam values. Actual constant values can be found in the windows.h header file included in the Platform SDK (Core SDK section) download, which is also available on MSDN.
[Visual Basic] Imports System 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 'Main 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 [C#] 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); } } [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] 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); } } } [C++] using namespace System; using namespace System::Drawing; using namespace System::Windows::Forms; namespace csTempWindowsApplication1 { public __gc class Form1 : public System::Windows::Forms::Form { private: // Constant value was found in the S"windows.h" header file. const static Int32 WM_ACTIVATEAPP = 0x001C; Boolean appActive; public: Form1() { appActive = true; this->Size = System::Drawing::Size(300, 300); this->Text = S"Form1"; this->Font = new System::Drawing::Font(S"Microsoft Sans Serif", 18.0F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, ((System::Byte)(0))); } protected: 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(S"Application is active", this->Font, SystemBrushes::ActiveCaptionText, 20, 20); } else { e->Graphics->FillRectangle(SystemBrushes::InactiveCaption, 20, 20, 260, 50); e->Graphics->DrawString(S"Application is Inactive", this->Font, SystemBrushes::ActiveCaptionText, 20, 20); } } [System::Security::Permissions::PermissionSet(System::Security::Permissions::SecurityAction::Demand, Name="FullTrust")] void WndProc(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; } Form::WndProc(m); } }; } [STAThread] int main() { Application::Run(new csTempWindowsApplication1::Form1()); }
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
.NET Framework Security:
- SecurityPermission for inheriting classes to call unmanaged code. Associated enumeration: SecurityPermissionFlag.UnmanagedCode
- SecurityPermission for the immediate caller to call unmanaged code. Associated enumeration: SecurityPermissionFlag.UnmanagedCode
See Also
Control Class | Control Members | System.Windows.Forms Namespace | PreProcessMessage | DefWndProc