Saturday, February 19, 2011

Windows .Net Framework 2.0 : Disable Close Button

Objective:
1. Disable the red Close button on the top right of Windows Form


How?
1. We will need to make use of user32.dll to do so.
2. Importing the win32 functions and setting up defines
using namespace System; using namespace System::Runtime::InteropServices; #define SC_CLOSE 0xF060 #define MF_GRAYED 0x1 namespace SysWin32 { [DllImport("user32.dll", CharSet = CharSet::Unicode)] IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport("user32.dll", CharSet = CharSet::Unicode)] Int32 EnableMenuItem(IntPtr hMenu, int wIDEnableItem, int wEnable); };

3. Add the following codes for the Form Load event
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { SysWin32::EnableMenuItem(SysWin32::GetSystemMenu(this->Handle, false), SC_CLOSE, MF_GRAYED); }

4. However, the Close button will becoming enabled again during the Form Resize event, so we will have to do the same for the Form Resize event
private: System::Void Form1_Resize(System::Object^ sender, System::EventArgs^ e) { SysWin32::EnableMenuItem(SysWin32::GetSystemMenu(this->Handle, false), SC_CLOSE, MF_GRAYED); }

5. Windows Form with Close button disabled

No comments: