void CKofDlgImpl::OnNcActivate( BOOL& bActive ) { //---------------------------------------- // Stay active if WF_STAYACTIVE bit is on: //---------------------------------------- if (m_Dlg.m_nFlags & WF_STAYACTIVE) { bActive = TRUE; } //-------------------------------------------------- // But do not stay active if the window is disabled: //-------------------------------------------------- if (!m_Dlg.IsWindowEnabled ()) { bActive = FALSE; } if (IsOwnerDrawCaption ()) { CMFCVisualManager::GetInstance()->OnNcActivate(&m_Dlg, bActive); m_Dlg.RedrawWindow (CRect (0, 0, 0, 0), NULL, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW | RDW_NOCHILDREN); } }
//**************************************************************************************** void CBCGPDlgImpl::OnActivate(UINT nState, CWnd* pWndOther) { m_Dlg.m_nFlags &= ~WF_STAYACTIVE; //-------------------------------------------------- // Determine if this window should be active or not: //-------------------------------------------------- CWnd* pWndActive = (nState == WA_INACTIVE) ? pWndOther : &m_Dlg; if (pWndActive != NULL) { BOOL bStayActive = (pWndActive->GetSafeHwnd () == m_Dlg.GetSafeHwnd () || pWndActive->SendMessage (WM_FLOATSTATUS, FS_SYNCACTIVE)); if (bStayActive) { m_Dlg.m_nFlags |= WF_STAYACTIVE; } } else { //------------------------------------------ // Force painting on our non-client area.... //------------------------------------------ m_Dlg.SendMessage (WM_NCPAINT, 1); } if (nState == WA_INACTIVE && IsOwnerDrawCaption ()) { m_Dlg.RedrawWindow(NULL, NULL, RDW_FRAME | RDW_UPDATENOW); } }
BOOL CKofDlgImpl::OnNcCalcSize( BOOL /*bCalcValidRects*/, NCCALCSIZE_PARAMS FAR* lpncsp ) { ASSERT (lpncsp != NULL); if ((m_Dlg.GetStyle () & WS_CAPTION) == 0) { m_bVisualManagerNCArea = FALSE; } if (IsOwnerDrawCaption ()) { lpncsp->rgrc[0].top += GetCaptionHeight (); } return (m_Dlg.GetStyle () & WS_MAXIMIZE) == WS_MAXIMIZE && IsOwnerDrawCaption (); }
void CKofDlgImpl::OnActivate( UINT nState, CWnd* pWndOther ) { pWndOther; if (nState == WA_INACTIVE && IsOwnerDrawCaption ()) { m_Dlg.RedrawWindow(NULL, NULL, RDW_FRAME | RDW_UPDATENOW); } }
//********************************************************************************************************* BOOL CBCGPDlgImpl::OnNcPaint () { #ifndef _BCGSUITE_ if (globalData.m_bInSettingsChange || !IsOwnerDrawCaption ()) { return FALSE; } #else if (!IsOwnerDrawCaption ()) { return FALSE; } #endif return visualManagerMFC->OnNcPaint (&m_Dlg, m_lstCaptionSysButtons, m_rectRedraw); }
BOOL CKofDlgImpl::OnNcPaint() { if (!IsOwnerDrawCaption()) { return FALSE; } return CKofStyleHelper::GetInstance()->OnNcPaint(&m_Dlg, m_lstCaptionSysButtons, m_rectRedraw); }
//************************************************************************* void CBCGPDlgImpl::OnNcMouseMove(UINT /*nHitTest*/, CPoint point) { if (!IsOwnerDrawCaption ()) { return; } OnTrackCaptionButtons (point); }
void CKofDlgImpl::OnNcMouseMove( UINT nHitTest, CPoint point ) { nHitTest; if (!IsOwnerDrawCaption()) { return; } OnTrackCaptionButtons(point); }
void CKofDlgImpl::OnMouseMove( CPoint point ) { if (!IsOwnerDrawCaption ()) { return; } CPoint ptScreen = point; m_Dlg.ClientToScreen (&ptScreen); OnTrackCaptionButtons (ptScreen); }
//************************************************************************* void CBCGPDlgImpl::OnLButtonUp(CPoint /*point*/) { if (!IsOwnerDrawCaption ()) { return; } switch (m_nHitSysButton) { case HTCLOSE_BCG: case HTMAXBUTTON_BCG: case HTMINBUTTON_BCG: #ifndef _BCGSUITE_ case HTHELPBUTTON_BCG: #endif { UINT nHot = m_nHotSysButton; UINT nHit = m_nHitSysButton; StopCaptionButtonsTracking (); if (nHot == nHit) { UINT nSysCmd = 0; switch (nHot) { case HTCLOSE_BCG: nSysCmd = SC_CLOSE; break; case HTMAXBUTTON_BCG: nSysCmd = (m_Dlg.GetStyle () & WS_MAXIMIZE) == WS_MAXIMIZE ? SC_RESTORE : SC_MAXIMIZE; break; case HTMINBUTTON_BCG: nSysCmd = m_Dlg.IsIconic () ? SC_RESTORE : SC_MINIMIZE; break; #ifndef _BCGSUITE_ case HTHELPBUTTON_BCG: nSysCmd = SC_CONTEXTHELP; break; #endif } m_Dlg.PostMessage (WM_SYSCOMMAND, nSysCmd); } } } }
//******************************************************************************** void CBCGPDlgImpl::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) { if (m_bWindowPosChanging) { return; } if (((lpwndpos->flags & SWP_NOSIZE) == 0 || (lpwndpos->flags & SWP_FRAMECHANGED)) && (IsOwnerDrawCaption ())) { m_bWindowPosChanging = TRUE; m_bIsWindowRgn = visualManagerMFC->OnSetWindowRegion ( &m_Dlg, CSize (lpwndpos->cx, lpwndpos->cy)); m_bWindowPosChanging = FALSE; } }
void CKofDlgImpl::OnWindowPosChanged( WINDOWPOS FAR* lpwndpos ) { if (m_bWindowPosChanging) { return; } if (((lpwndpos->flags & SWP_NOSIZE) == 0 || (lpwndpos->flags & SWP_FRAMECHANGED)) && (IsOwnerDrawCaption ())) { m_bWindowPosChanging = TRUE; m_bIsWindowRgn = CKofStyleHelper::GetInstance()->OnSetWindowRegion ( &m_Dlg, CSize (lpwndpos->cx, lpwndpos->cy)); m_bWindowPosChanging = FALSE; } }
BOOL CKofDlgImpl::PreTranslateMessage( MSG* pMsg ) { switch (pMsg->message) { case WM_NCRBUTTONUP: if (pMsg->message == WM_NCRBUTTONUP && pMsg->hwnd == m_Dlg.GetSafeHwnd () && IsOwnerDrawCaption ()) { CPoint pt (AFX_GET_X_LPARAM(pMsg->lParam), AFX_GET_Y_LPARAM(pMsg->lParam)); UINT nHit = OnNcHitTest (pt); if (nHit == HTCAPTION || nHit == HTSYSMENU) { CMenu* pMenu = m_Dlg.GetSystemMenu (FALSE); if (pMenu->GetSafeHmenu () != NULL && ::IsMenu (pMenu->GetSafeHmenu ())) { /*UINT uiRes = ::TrackPopupMenu (pMenu->GetSafeHmenu(), TPM_LEFTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, m_Dlg.GetSafeHwnd (), NULL);*/ UINT uiRes = 0; if (((CWinAppEx*)AfxGetApp())->GetContextMenuManager() != NULL) { ((CWinAppEx*)AfxGetApp())->GetContextMenuManager()->ShowPopupMenu(pMenu->GetSafeHmenu(), pt.x, pt.y, &m_Dlg, TRUE); } else { uiRes = ::TrackPopupMenu (pMenu->GetSafeHmenu(), TPM_LEFTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, m_Dlg.GetSafeHwnd (), NULL); } if (uiRes != 0) { m_Dlg.SendMessage (WM_SYSCOMMAND, uiRes); return TRUE; } } } } break; } return FALSE; }
void CKofDlgImpl::OnChangeVisualManager() { if (m_Dlg.GetSafeHwnd () == NULL) { return; } CRect rectWindow; m_Dlg.GetWindowRect (rectWindow); BOOL bZoomed = m_Dlg.IsZoomed (); if (IsOwnerDrawCaption ()) { BOOL bChangeBorder = FALSE; if ((m_Dlg.GetStyle () & WS_BORDER) == WS_BORDER && m_bHasBorder) { bChangeBorder = TRUE; m_bWindowPosChanging = TRUE; m_Dlg.ModifyStyle (WS_BORDER, 0, SWP_FRAMECHANGED); m_bWindowPosChanging = FALSE; } m_bIsWindowRgn = CKofStyleHelper::GetInstance()->OnSetWindowRegion ( &m_Dlg, rectWindow.Size ()); if (bZoomed && bChangeBorder) { m_Dlg.ShowWindow (SW_MINIMIZE); m_Dlg.ShowWindow (SW_MAXIMIZE); } } else { BOOL bChangeBorder = FALSE; if ((m_Dlg.GetStyle () & WS_BORDER) == 0 && m_bHasBorder) { bChangeBorder = TRUE; m_bWindowPosChanging = TRUE; m_Dlg.ModifyStyle (0, WS_BORDER, SWP_FRAMECHANGED); m_bWindowPosChanging = FALSE; } if (m_bIsWindowRgn) { m_bIsWindowRgn = FALSE; m_Dlg.SetWindowRgn (NULL, TRUE); } if (bZoomed && bChangeBorder) { NCCALCSIZE_PARAMS params; ZeroMemory(¶ms, sizeof (NCCALCSIZE_PARAMS)); params.rgrc[0].left = rectWindow.left; params.rgrc[0].top = rectWindow.top; params.rgrc[0].right = rectWindow.right; params.rgrc[0].bottom = rectWindow.bottom; m_Dlg.CalcWindowRect (¶ms.rgrc[0], CFrameWnd::adjustBorder); if ((m_Dlg.GetStyle () & WS_CAPTION) == WS_CAPTION) { params.rgrc[0].top += GetCaptionHeight (); } m_Dlg.SetWindowPos (NULL, params.rgrc[0].left, params.rgrc[0].top, params.rgrc[0].right - params.rgrc[0].left, params.rgrc[0].bottom - params.rgrc[0].top, SWP_NOACTIVATE | SWP_NOZORDER); } else { m_Dlg.SetWindowPos (NULL, -1, -1, rectWindow.Width () + 1, rectWindow.Height () + 1, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); m_Dlg.SetWindowPos (NULL, -1, -1, rectWindow.Width (), rectWindow.Height (), SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); } } UpdateCaption (); UpdateCaptionButtons(); }
//******************************************************************************** int CBCGPDlgImpl::OnCreate() { if (m_pLayout == NULL) { return 0; } ASSERT_VALID(m_pLayout); if (!m_pLayout->Create(&m_Dlg)) { delete m_pLayout; m_pLayout = NULL; return -1; } if (globalData.m_bIsRTL) { m_Dlg.ModifyStyleEx (0, WS_EX_LAYOUTRTL); } const DWORD dwStyle = m_Dlg.GetStyle (); if (dwStyle & WS_CHILD) { m_bResizeBox = FALSE; } CBCGPDialog* pDialog = DYNAMIC_DOWNCAST(CBCGPDialog, &m_Dlg); CBCGPPropertySheet* pPropSheet = DYNAMIC_DOWNCAST(CBCGPPropertySheet, &m_Dlg); if (pDialog != NULL || pPropSheet != NULL) { if ((dwStyle & WS_CHILD) != WS_CHILD) { CRect rect; m_Dlg.GetClientRect(&rect); m_Dlg.ModifyStyle(DS_MODALFRAME, WS_POPUP | WS_THICKFRAME); ::AdjustWindowRectEx(&rect, m_Dlg.GetStyle (), ::IsMenu(m_Dlg.GetMenu()->GetSafeHmenu()), m_Dlg.GetExStyle ()); if (m_bVisualManagerNCArea && IsOwnerDrawCaption() && !globalData.DwmIsCompositionEnabled ()) { int nHeight = ::GetSystemMetrics (SM_CYCAPTION); rect.top -= nHeight / 2; rect.bottom += nHeight - nHeight / 2; } m_Dlg.SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(), SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER); if (pPropSheet == NULL) { m_Dlg.GetWindowRect (rect); m_LayoutMMI.ptMinTrackSize.x = rect.Width (); m_LayoutMMI.ptMinTrackSize.y = rect.Height (); } } } if (pPropSheet == NULL && DYNAMIC_DOWNCAST(CBCGPPropertyPage, &m_Dlg) == NULL) { CRect rect; m_Dlg.GetClientRect (rect); m_pLayout->SetMinSize (rect.Size ()); } return 0; }
UINT CKofDlgImpl::OnNcHitTest( CPoint point ) { m_Dlg.ScreenToClient (&point); if (!m_rectResizeBox.IsRectEmpty ()) { if (m_rectResizeBox.PtInRect(point)) { BOOL bRTL = m_Dlg.GetExStyle() & WS_EX_LAYOUTRTL; return bRTL ? HTBOTTOMLEFT : HTBOTTOMRIGHT; } } if (!IsOwnerDrawCaption ()) { return HTNOWHERE; } const CSize szSystemBorder(::GetSystemMetrics (SM_CXSIZEFRAME), ::GetSystemMetrics (SM_CYSIZEFRAME)); int cxOffset = szSystemBorder.cx; int cyOffset = szSystemBorder.cy; if (!m_Dlg.IsIconic ()) { cyOffset += GetCaptionHeight (); } if (m_Dlg.IsZoomed ()) { cxOffset -= szSystemBorder.cx; cyOffset -= szSystemBorder.cy; } point.Offset (cxOffset, cyOffset); for (POSITION pos = m_lstCaptionSysButtons.GetHeadPosition (); pos != NULL;) { CMFCCaptionButtonEx* pButton = (CMFCCaptionButtonEx*) m_lstCaptionSysButtons.GetNext (pos); ASSERT_VALID (pButton); if (pButton->GetRect ().PtInRect (point)) { return pButton->m_nHit; } } CRect rectCaption = GetCaptionRect (); if (rectCaption.PtInRect (point)) { if ((m_Dlg.GetExStyle () & WS_EX_TOOLWINDOW) == 0) { CRect rectSysMenu = rectCaption; rectSysMenu.right = rectSysMenu.left + ::GetSystemMetrics (SM_CXSMICON) + 2 + (m_Dlg.IsZoomed () ? szSystemBorder.cx : 0); return rectSysMenu.PtInRect (point) ? HTSYSMENU : HTCAPTION; } return HTCAPTION; } return HTNOWHERE; }
//************************************************************************************** BOOL CBCGPDlgImpl::PreTranslateMessage(MSG* pMsg) { switch (pMsg->message) { case WM_SYSKEYDOWN: case WM_CONTEXTMENU: if (CBCGPPopupMenu::GetActiveMenu() != NULL && ::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd) && pMsg->wParam == VK_MENU) { CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_CLOSE); return TRUE; } break; case WM_SYSKEYUP: if (CBCGPPopupMenu::GetActiveMenu() != NULL && ::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd)) { return TRUE; // To prevent system menu opening } break; case WM_KEYDOWN: //----------------------------------------- // Pass keyboard action to the active menu: //----------------------------------------- if (CBCGPPopupMenu::GetActiveMenu() != NULL && ::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd)) { CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_KEYDOWN, (int) pMsg->wParam); return TRUE; } #ifndef BCGP_EXCLUDE_RIBBON #ifndef _BCGSUITE_ if (m_bBackstageMode && (pMsg->wParam == VK_HOME || pMsg->wParam == VK_ESCAPE)) { for (CWnd* pWndParent = m_Dlg.GetParent(); pWndParent != NULL; pWndParent = pWndParent->GetParent()) { CBCGPRibbonBackstageView* pView = DYNAMIC_DOWNCAST(CBCGPRibbonBackstageView, pWndParent); if (pView != NULL) { if (pMsg->wParam == VK_HOME) { #define MAX_CLASS_NAME 255 #define EDIT_CLASS _T("Edit") TCHAR lpszClassName [MAX_CLASS_NAME + 1]; if (CWnd::GetFocus()->GetSafeHwnd() != NULL) { ::GetClassName (CWnd::GetFocus()->GetSafeHwnd (), lpszClassName, MAX_CLASS_NAME); CString strClass = lpszClassName; if (strClass == EDIT_CLASS) { return FALSE; } } pView->SetFocus(); } else // Escape { pView->SendMessage(WM_CLOSE); } return TRUE; } } return TRUE; } #endif #endif break; case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: { CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam)); CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd); if (pWnd != NULL && ::IsWindow (pMsg->hwnd)) { pWnd->ClientToScreen (&pt); } if (ProcessMouseClick (pt)) { return TRUE; } if (!::IsWindow (pMsg->hwnd)) { return TRUE; } } break; case WM_NCLBUTTONDOWN: case WM_NCLBUTTONUP: case WM_NCRBUTTONDOWN: case WM_NCRBUTTONUP: case WM_NCMBUTTONDOWN: case WM_NCMBUTTONUP: if (ProcessMouseClick (CPoint (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam)))) { return TRUE; } if (pMsg->message == WM_NCRBUTTONUP && pMsg->hwnd == m_Dlg.GetSafeHwnd () && IsOwnerDrawCaption ()) { CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam)); UINT nHit = OnNcHitTest (pt); if (nHit == HTCAPTION || nHit == HTSYSMENU) { CMenu* pMenu = m_Dlg.GetSystemMenu (FALSE); if (pMenu->GetSafeHmenu () != NULL && ::IsMenu (pMenu->GetSafeHmenu ())) { UINT uiRes = ::TrackPopupMenu (pMenu->GetSafeHmenu(), TPM_LEFTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, m_Dlg.GetSafeHwnd (), NULL); if (uiRes != 0) { m_Dlg.SendMessage (WM_SYSCOMMAND, uiRes); return TRUE; } } } } break; case WM_MOUSEWHEEL: if (CBCGPPopupMenu::GetActiveMenu() != NULL && ::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd) && CBCGPPopupMenu::GetActiveMenu()->IsScrollable ()) { CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_MOUSEWHEEL, pMsg->wParam, pMsg->lParam); } #ifndef BCGP_EXCLUDE_RIBBON #ifndef _BCGSUITE_ else { CPoint ptCursor; ::GetCursorPos (&ptCursor); CWnd* pWnd = CWnd::WindowFromPoint(ptCursor); CBCGPRibbonGalleryCtrl* pGalleryCtrl = DYNAMIC_DOWNCAST(CBCGPRibbonGalleryCtrl, pWnd); if (pGalleryCtrl != NULL) { pGalleryCtrl->SendMessage (WM_MOUSEWHEEL, pMsg->wParam, pMsg->lParam); return TRUE; } } #endif #endif break; case WM_MOUSEMOVE: { CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam)); CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd); if (pWnd != NULL) { pWnd->ClientToScreen (&pt); } if (ProcessMouseMove (pt)) { return TRUE; } } } return FALSE; }
void CKofDlgImpl::UpdateCaption() { if (!IsOwnerDrawCaption ()) { return; } if (m_lstCaptionSysButtons.IsEmpty ()) { //------------------------ // Create caption buttons: //------------------------ const DWORD dwStyle = m_Dlg.GetStyle (); HMENU hSysMenu = NULL; CMenu* pSysMenu = m_Dlg.GetSystemMenu (FALSE); if (pSysMenu != NULL && ::IsMenu (pSysMenu->m_hMenu)) { hSysMenu = pSysMenu->GetSafeHmenu (); if (!::IsMenu (hSysMenu) || (m_Dlg.GetStyle () & WS_SYSMENU) == 0) { hSysMenu = NULL; } } if (hSysMenu != NULL) { m_lstCaptionSysButtons.AddTail (new CMFCCaptionButtonEx (AFX_HTCLOSE)); if ((dwStyle & WS_MAXIMIZEBOX) == WS_MAXIMIZEBOX) { m_lstCaptionSysButtons.AddTail (new CMFCCaptionButtonEx (AFX_HTMAXBUTTON)); } if ((dwStyle & WS_MINIMIZEBOX) == WS_MINIMIZEBOX) { m_lstCaptionSysButtons.AddTail (new CMFCCaptionButtonEx (AFX_HTMINBUTTON)); } if ((dwStyle & DS_CONTEXTHELP) == DS_CONTEXTHELP) { if (!m_Dlg.IsKindOf (RUNTIME_CLASS (CPropertySheet))) { m_lstCaptionSysButtons.AddTail (new CMFCCaptionButtonEx (AFX_HTMINBUTTON + 1)); } } } } CRect rectCaption = GetCaptionRect (); { CSize sizeButton = CMFCVisualManager::GetInstance()->GetNcBtnSize (FALSE); sizeButton.cy = min (sizeButton.cy, rectCaption.Height () - 2); int x = rectCaption.right - sizeButton.cx; int y = rectCaption.top + max (0, (rectCaption.Height () - sizeButton.cy) / 2); for (POSITION pos = m_lstCaptionSysButtons.GetHeadPosition (); pos != NULL;) { CMFCCaptionButtonEx* pButton = (CMFCCaptionButtonEx*) m_lstCaptionSysButtons.GetNext (pos); ASSERT_VALID (pButton); pButton->SetRect (CRect (CPoint (x, y), sizeButton)); x -= sizeButton.cx; } } m_Dlg.RedrawWindow (NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW | RDW_NOCHILDREN); }
//************************************************************************* void CBCGPDlgImpl::UpdateCaption () { if (!IsOwnerDrawCaption ()) { return; } if (m_lstCaptionSysButtons.IsEmpty ()) { //------------------------ // Create caption buttons: //------------------------ const DWORD dwStyle = m_Dlg.GetStyle (); HMENU hSysMenu = NULL; CMenu* pSysMenu = m_Dlg.GetSystemMenu (FALSE); if (pSysMenu != NULL && ::IsMenu (pSysMenu->m_hMenu)) { hSysMenu = pSysMenu->GetSafeHmenu (); if (!::IsMenu (hSysMenu) || (m_Dlg.GetStyle () & WS_SYSMENU) == 0) { hSysMenu = NULL; } } if (hSysMenu != NULL) { m_lstCaptionSysButtons.AddTail (new CBCGPFrameCaptionButton (HTCLOSE_BCG)); if ((dwStyle & WS_MAXIMIZEBOX) == WS_MAXIMIZEBOX) { m_lstCaptionSysButtons.AddTail (new CBCGPFrameCaptionButton (HTMAXBUTTON_BCG)); } if ((dwStyle & WS_MINIMIZEBOX) == WS_MINIMIZEBOX) { m_lstCaptionSysButtons.AddTail (new CBCGPFrameCaptionButton (HTMINBUTTON_BCG)); } #ifndef _BCGSUITE_ if ((dwStyle & DS_CONTEXTHELP) == DS_CONTEXTHELP) { if (!m_Dlg.IsKindOf (RUNTIME_CLASS (CPropertySheet))) { m_lstCaptionSysButtons.AddTail (new CBCGPFrameCaptionButton (HTHELPBUTTON_BCG)); } } #endif } } CRect rectCaption = GetCaptionRect (); #ifndef _BCGSUITE_ if (!visualManagerMFC->OnUpdateNcButtons(&m_Dlg, m_lstCaptionSysButtons, rectCaption)) #endif { CSize sizeButton = visualManagerMFC->GetNcBtnSize (FALSE); sizeButton.cy = min (sizeButton.cy, rectCaption.Height () - 2); int x = rectCaption.right - sizeButton.cx; int y = rectCaption.top + max (0, (rectCaption.Height () - sizeButton.cy) / 2); for (POSITION pos = m_lstCaptionSysButtons.GetHeadPosition (); pos != NULL;) { CBCGPFrameCaptionButton* pButton = (CBCGPFrameCaptionButton*) m_lstCaptionSysButtons.GetNext (pos); ASSERT_VALID (pButton); pButton->SetRect (CRect (CPoint (x, y), sizeButton)); x -= sizeButton.cx; } } #ifndef _BCGSUITE_ m_Dlg.SendMessage (BCGM_ONAFTERUPDATECAPTION); #endif m_Dlg.RedrawWindow (NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW | RDW_NOCHILDREN); }