ClientWndProc (C++)
Contents
Description
This example shows the overriding of the ClientWndProc method. To test the method bellow, create a VCL forms application ( Start > New > VCL Forms Application - Delphi ). Then set the FormStyle property from Object Inspector as fsMDIForm
and override the ClientWndProc method of the TForm1 class. Also declare the global variable FDefClientProc
of type TFarProc.
The method result is that the background color of the MDI parent form is changed into white.
Code
// From ClientWndProc.h:
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
protected:
void __fastcall ClientWndProc(Messages::TMessage &Message);/* override */
};
// From ClientWndProc.cpp:
TForm1 *Form1;
void *FNewDefClientProc;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientWndProc(Messages::TMessage &Message)
{
switch (Message.Msg)
{
// Erase the background at the location of an MDI client window
case WM_ERASEBKGND:
Message.Result = CallWindowProc(
(long(__stdcall*)(HWND__*, unsigned int, unsigned int, long)) FNewDefClientProc, Form1->Handle,
Message.Msg, Message.WParam, Message.LParam);
Color = clWhite;
Message.Result = 1;
break;
//Ensure the client area is redrawn by calling InvalidateRect }
case WM_VSCROLL, WM_HSCROLL:
Message.Result = CallWindowProc(
(long(__stdcall*)(HWND__*, unsigned int, unsigned int, long)) FNewDefClientProc, Form1->Handle,
Message.Msg, Message.WParam, Message.LParam);
InvalidateRect(ClientHandle, NULL, True);
break;
default:
// Call the original window procedure
Message.Result = CallWindowProc(
(long(__stdcall*)(HWND__*, unsigned int, unsigned int, long)) FNewDefClientProc, Form1->Handle,
Message.Msg, Message.WParam, Message.LParam);
break;
}
TForm::ClientWndProc(Message);
}
Uses
- Vcl.Forms.TCustomForm.ClientWndProc ( fr | de | ja )
- Vcl.Forms.TCustomForm.ClientHandle ( fr | de | ja )
- Vcl.Controls.TWinControl.Handle ( fr | de | ja )
- Winapi.Messages.TMessage ( fr | de | ja )
- CallWindowProc MSDN
- InvalidateRect MSDN