新: 作品简介: 本文演示了通过在显示的表单视图中选择各种选项,在运行时创建不同样式窗口的技术 特点: 您可以创建以下类型的窗口 重叠 孩子 弹出 标准对话框 您还可以选择创建菜单 窗口也可以创建 最小化 Maxmiized 规模 窗口可以有以下按钮 最大化 最小化 系统菜单 你可以用默认的大小和默认的位置创建窗口,或者指定左边,顶部的值,以及指定的宽度和高度 注意: 如果您继续单击“创建窗口”按钮,窗口将创建一个在另一个多次,您继续单击,并将不得不关闭每个窗口,通过单击关闭按钮多次 关于代码: 隐藏,收缩,复制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); }
让我们看看在您选择了必要的选项并单击“创建窗口”按钮之后,在运行时创建窗口的代码 隐藏,收缩,复制Code
// // 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 "); 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); </code>
窗口快乐! ! 本文转载于:http://www.diyabc.com/frontweb/news8341.html