Window Styles






3.35/5 (13 votes)
Aug 9, 2002

104293

1259
Window Styles
What's New:
Introduction:
This Article demonstrates the technique of creating different style Windows at run-time, by selecting various options on the displayed form view
Features:
- Overlapped
- Child
- Popup
- Standard Dialog
You can create the following type of Windows
You have the option of creating a Menu also
- Minimized
- Maxmiized
- To Size
Windows can be created either
- Maximize
- Minimize
- System Menu
Windows can have the following buttons
You can create the Window with default sizes and at the default position or specify the Left, Top Values and also the specify Width and Height
Note:
If you continue clicking on the "Create Window" button , Windows will be created one over the other as many times as you go on clicking , and will have to close each Window by clicking on the Close button as many times
About The Code:
// // Depending on the Type of Window to be created // we enable of disble various options as below // // If you select the Overlapped Window option // the following checkboxes are Enabled / Disabled void CMainForm::SetOverlappedProperties() { GetDlgItem(IDC_DIALOGFRAME)->EnableWindow(FALSE); GetDlgItem(IDC_MINIMIZE_BOX)->EnableWindow(TRUE); GetDlgItem(IDC_MAXIMIZE_BOX)->EnableWindow(TRUE); GetDlgItem(IDC_SYSTEM_MENU)->EnableWindow(TRUE); GetDlgItem(IDC_DEFAULT_TOPLEFT)->EnableWindow(TRUE); GetDlgItem(IDC_DEFAULT_WIDTHHEIGHT)->EnableWindow(TRUE); GetDlgItem(IDC_TOP)->EnableWindow(FALSE); GetDlgItem(IDC_LEFT)->EnableWindow(FALSE); GetDlgItem(IDC_WIDTH)->EnableWindow(FALSE); GetDlgItem(IDC_HEIGHT)->EnableWindow(FALSE); m_DefaultTopLeft = m_DefaultWidthHeight = TRUE; m_MinimizeBox = m_MaximizeBox = m_SystemMenu = m_Overlapped = TRUE; m_ToSize = TRUE; m_Popup = m_Child = FALSE; UpdateData(FALSE); } // // If you select the Child Window option // the following checkboxes are Enabled / Disabled // void CMainForm::SetChildProperties() { m_MinimizeBox = m_MaximizeBox = m_SystemMenu = m_Overlapped = m_Popup = FALSE; m_ToSize = TRUE; m_Child = TRUE; GetDlgItem(IDC_DIALOGFRAME)->EnableWindow(TRUE); GetDlgItem(IDC_MINIMIZE_BOX)->EnableWindow(FALSE); GetDlgItem(IDC_MAXIMIZE_BOX)->EnableWindow(FALSE); GetDlgItem(IDC_SYSTEM_MENU)->EnableWindow(FALSE); GetDlgItem(IDC_CAPTION)->EnableWindow(TRUE); m_Caption = FALSE; UpdateData(FALSE); } // // If you select the Popup Window option // the following checkboxes are Enabled / Disabled // void CMainForm::SetPopupProperties() { m_MinimizeBox = m_MaximizeBox = m_SystemMenu = m_Overlapped = m_Child = FALSE; m_Popup = TRUE; m_ToSize = TRUE; m_SystemMenu = TRUE; GetDlgItem(IDC_MINIMIZE_BOX)->EnableWindow(TRUE); GetDlgItem(IDC_MAXIMIZE_BOX)->EnableWindow(TRUE); GetDlgItem(IDC_SYSTEM_MENU)->EnableWindow(TRUE); GetDlgItem(IDC_CAPTION)->EnableWindow(TRUE); m_Caption = FALSE; UpdateData(FALSE); } // // If you select the Standard Window option // the following checkboxes are Enabled / Disabled // void CMainForm::SetStandardDialogProperties() { CheckDlgButton(IDC_CAPTION, 1); GetDlgItem(IDC_CAPTION)->EnableWindow(TRUE); CheckDlgButton(IDC_SYSTEM_MENU,1); GetDlgItem(IDC_SYSTEM_MENU)->EnableWindow(TRUE); GetDlgItem(IDC_MINIMIZE_BOX)->EnableWindow(TRUE); GetDlgItem(IDC_MAXIMIZE_BOX)->EnableWindow(TRUE); GetDlgItem(IDC_SYSTEM_MENU)->EnableWindow(TRUE); CheckDlgButton(IDC_MAXIMIZE_BOX, 0); CheckDlgButton(IDC_MINIMIZE_BOX, 0); CheckDlgButton(IDC_MODAL_DIALOG_FRAME, 1); GetDlgItem(IDC_DEFAULT_WIDTHHEIGHT)->EnableWindow(FALSE); GetDlgItem(IDC_DEFAULT_TOPLEFT)->EnableWindow(FALSE); GetDlgItem(IDC_WIDTH)->EnableWindow(TRUE); GetDlgItem(IDC_HEIGHT)->EnableWindow(TRUE); GetDlgItem(IDC_TOP)->EnableWindow(TRUE); GetDlgItem(IDC_LEFT)->EnableWindow(TRUE); UpdateData(TRUE); }
Lets take a look at the coding that goes into creating the Window at run-time after you have selected the necessary options and clicked on the "Create Window" button
// // First of all we have to register the class // the name of the Class is specified as a String // Name of the class is passed to the my member // function eg RegisterClass("MyWindowStyles") // // BOOL CMainForm::RegisterClass(CString stringClass) { WNDCLASS wndclass; wndclass.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = AfxGetInstanceHandle(); wndclass.hIcon = LoadIcon(NULL, _T("")); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW ); wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = stringClass; if( !AfxRegisterClass( &wndclass )) { AfxMessageBox("Error Registering Class\n"); return FALSE; } return TRUE; } // // Since the Window created at run-time cannot have its // Messages in the Message Map of the Application , we // have the following procedure , which takes care // of the messages in the newly created Window // // Note : WndProc is passed as the Windows procedure // to the above Registered Class as // // wndclass.lpfnWndProc = WndProc; // // This procedure allows us to Destroy the Created // Window which would otherwise not be possible LRESULT FAR PASCAL WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { if(Message == WM_COMMAND) { DestroyWindow(hWnd); } return (DefWindowProc(hWnd, Message, wParam, lParam)); } // // If the Class was registered successfully // we proceed with creating the Window // With the CreateWindowEx function as below // // The following variables passed to CreateWindowEx // contain information as selected on the Formview // dExtendedStyle = Extended Window Styles // m_EditCaption = Window Caption // dStyle = Style of The Window // x = Left Position of the Window // y = Top Position of the WIndow // nWidth = Width of the Window // nHeight = Height of the Window // hMenu = Menu (if Checked) // (Menu is created in the Resources) // hWndMain = CreateWindowEx( dExtendedStyle, szClassName, m_EditCaption, dStyle, x, y, nWidth, nHeight, this->m_hWnd, hMenu, AfxGetInstanceHandle(), NULL); if(!hWndMain) { AfxMessageBox("Error Creating Window"); return; } // // // We create a button on the newly // created Window , to enable us to close // the Window in case the created Window // did not have the Menu option enabled or // Window cannot have a Menu as a Standard // // HWND hwndBtn = CreateWindow(_T("BUTTON"), _T("&Close"), WS_VISIBLE| WS_CHILD| BS_DEFPUSHBUTTON, 30,20,90,30, hWndMain, (HMENU)ID_CLOSE_BUTTON, NULL, NULL); // // Finally we Display the Window as shown below // ::ShowWindow(hWndMain, SW_SHOW);
Happy Windowing !!!!!