窗口样式

新: 作品简介: 本文演示了通过在显示的表单视图中选择各种选项,在运行时创建不同样式窗口的技术 特点: 您可以创建以下类型的窗口 重叠 孩子 弹出 标准对话框 您还可以选择创建菜单 窗口也可以创建 最小化 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

原文地址:https://www.cnblogs.com/Dincat/p/13467765.html