VC對話方塊child、popup模式之間切換
阿新 • • 發佈:2018-12-21
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);