1. 程式人生 > >VC對話方塊child、popup模式之間切換

VC對話方塊child、popup模式之間切換

1、首先將該對話方塊模式屬性,style設定成child、border設定成none      該類標頭檔案中增加以下屬性和方法

bool m_bIsChildWindow;            //是否為子視窗    
HWND m_hParentWnd;    
char m_szTitle[256];    
void SetChildWindow(bool bIsChildWindow,HWND hParentWnd,char *pTitle=NULL);

    該類實現檔案中增加以下屬性和方法

	CXXXDialog::CXXXDialog()
	{
		m_bIsChildWindow = true;
		m_hParentWnd = NULL;
		memset(m_szTitle, 0, sizeof(m_szTitle));
	}
	
void CXXXDialog::SetChildWindow(bool bIsChildWindow, HWND hParentWnd,char *pTitle)
{
	m_bIsChildWindow = bIsChildWindow;
	m_hParentWnd = hParentWnd;
	if (pTitle != NULL)
	{
		strcpy_s(m_szTitle, pTitle);
	}
}

2、新增WM_CREATE訊息事件  

int CXXXDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此新增您專用的建立程式碼
	if (m_bIsChildWindow)
	{
		/*
		ModifyStyle(WS_POPUPWINDOW | WS_DLGFRAME, WS_CHILDWINDOW);
		CWnd * hWndParent = CWnd::FromHandle(m_hParentWnd);
		SetParent(hWndParent);
		*/
	}
	else
	{
		ModifyStyle(WS_CHILDWINDOW, WS_POPUPWINDOW | WS_DLGFRAME);
		SetParent(NULL);
		SetWindowText(m_szTitle);
	}

	return 0;
}

3、呼叫方法 1)、popup模式示例

	CAttributeDialog dlg;
	dlg.SetChildWindow(false,NULL,"popup");
	dlg.DoModal();

     2)、child模式示例  

CRect rectTab;
	m_tabCtrl.GetClientRect(&rectTab);
	//新增控制元件按鈕名稱
	m_tabCtrl.InsertItem(0, _T("1"));
	m_tabCtrl.InsertItem(1, _T("2"));
	//對話方塊頁面
	m_dlgAttribute.SetChildWindow(true, GetDlgItem(IDC_TAB1)->GetSafeHwnd());
	m_dlgAttribute.Create(IDD_DIALOG1, GetDlgItem(IDC_TAB1));
	//顯示第一個頁面
	m_dlgAttribute.ShowWindow(SW_SHOW);
	m_tabCtrl.SetCurSel(0);
	m_dlgAttribute.MoveWindow(rectTab.left, rectTab.top+30, rectTab.Width(), rectTab.Height()-30);