void CActiveXUI::SetPos(RECT rc, bool bNeedInvalidate) { CControlUI::SetPos(rc, bNeedInvalidate); if( !m_bCreated ) DoCreateControl(); if( m_pUnk == NULL ) return; if( m_pControl == NULL ) return; SIZEL hmSize = { 0 }; SIZEL pxSize = { 0 }; pxSize.cx = m_rcItem.right - m_rcItem.left; pxSize.cy = m_rcItem.bottom - m_rcItem.top; PixelToHiMetric(&pxSize, &hmSize); if( m_pUnk != NULL ) { m_pUnk->SetExtent(DVASPECT_CONTENT, &hmSize); } if( m_pControl->m_pInPlaceObject != NULL ) { CDuiRect rcItem = m_rcItem; if( !m_pControl->m_bWindowless ) rcItem.ResetOffset(); m_pControl->m_pInPlaceObject->SetObjectRects(&rcItem, &rcItem); } if( !m_pControl->m_bWindowless ) { ASSERT(m_pControl->m_pWindow); ::MoveWindow(*m_pControl->m_pWindow, m_rcItem.left, m_rcItem.top, m_rcItem.right - m_rcItem.left, m_rcItem.bottom - m_rcItem.top, TRUE); } }
void CGroupBoxUI::PaintText(HDC hDC) { CDuiString sText = GetText(); if( sText.IsEmpty() ) { return; } if( m_dwTextColor == 0 ) m_dwTextColor = m_pManager->GetDefaultFontColor(); if( m_dwDisabledTextColor == 0 ) m_dwDisabledTextColor = m_pManager->GetDefaultDisabledColor(); if( sText.IsEmpty() ) return; CDuiRect rcText = m_rcItem; rcText.Deflate(5,5); SIZE szAvailable = { rcText.right - rcText.left, rcText.bottom - rcText.top }; SIZE sz = CalcrectSize(szAvailable); //¼ÆËãÎÄ×ÖÇøÓò rcText.left = rcText.left + 15; rcText.top = rcText.top - 5; rcText.right = rcText.left + sz.cx; rcText.bottom = rcText.top + sz.cy; if( IsEnabled() ) { CRenderEngine::DrawText(hDC, m_pManager, rcText, sText, m_dwTextColor, m_iFont, m_uTextStyle, GetAdjustColor(m_dwBackColor), FALSE); } else { CRenderEngine::DrawText(hDC, m_pManager, rcText, sText, m_dwDisabledTextColor, m_iFont, m_uTextStyle, GetAdjustColor(m_dwBackColor), FALSE); } }
STDMETHODIMP CActiveXCtrl::OnInPlaceActivateEx(BOOL* pfNoRedraw, DWORD dwFlags) { DUITRACE(_T("AX: CActiveXCtrl::OnInPlaceActivateEx")); ASSERT(m_pInPlaceObject==NULL); if( m_pOwner == NULL ) return E_UNEXPECTED; if( m_pOwner->m_pUnk == NULL ) return E_UNEXPECTED; ::OleLockRunning(m_pOwner->m_pUnk, TRUE, FALSE); HWND hWndFrame = m_pOwner->GetManager()->GetPaintWindow(); HRESULT Hr = E_FAIL; if( (dwFlags & ACTIVATE_WINDOWLESS) != 0 ) { m_bWindowless = true; Hr = m_pOwner->m_pUnk->QueryInterface(IID_IOleInPlaceObjectWindowless, (LPVOID*) &m_pInPlaceObject); m_pOwner->m_hwndHost = hWndFrame; m_pOwner->GetManager()->AddMessageFilter(m_pOwner); } if( FAILED(Hr) ) { m_bWindowless = false; Hr = CreateActiveXWnd(); if( FAILED(Hr) ) return Hr; Hr = m_pOwner->m_pUnk->QueryInterface(IID_IOleInPlaceObject, (LPVOID*) &m_pInPlaceObject); } if( m_pInPlaceObject != NULL ) { CDuiRect rcItem = m_pOwner->m_rcItem; if( !m_bWindowless ) rcItem.ResetOffset(); m_pInPlaceObject->SetObjectRects(&rcItem, &rcItem); } m_bInPlaceActive = SUCCEEDED(Hr); return Hr; }
LRESULT WindowImplBase::OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { LPRECT pRect=NULL; if ( wParam == TRUE) { LPNCCALCSIZE_PARAMS pParam = (LPNCCALCSIZE_PARAMS)lParam; pRect=&pParam->rgrc[0]; } else { pRect=(LPRECT)lParam; } if ( ::IsZoomed(m_hWnd)) { // 最大化时,计算当前显示器最适合宽高度 MONITORINFO oMonitor = {}; oMonitor.cbSize = sizeof(oMonitor); ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTONEAREST), &oMonitor); CDuiRect rcWork = oMonitor.rcWork; CDuiRect rcMonitor = oMonitor.rcMonitor; rcWork.Offset(-oMonitor.rcMonitor.left, -oMonitor.rcMonitor.top); pRect->right = pRect->left + rcWork.GetWidth(); pRect->bottom = pRect->top + rcWork.GetHeight(); return WVR_REDRAW; } return 0; }
RECT CEditWnd::CalPos() { CDuiRect rcPos = m_pOwner->GetPos(); RECT rcInset = m_pOwner->GetTextPadding(); rcPos.left += rcInset.left; rcPos.top += rcInset.top; rcPos.right -= rcInset.right; rcPos.bottom -= rcInset.bottom; LONG lEditHeight = m_pOwner->GetManager()->GetFontInfo(m_pOwner->GetFont())->tm.tmHeight; if( lEditHeight < rcPos.GetHeight() ) { rcPos.top += (rcPos.GetHeight() - lEditHeight) / 2; rcPos.bottom = rcPos.top + lEditHeight; } CControlUI* pParent = m_pOwner; RECT rcParent; while( pParent = pParent->GetParent() ) { if( !pParent->IsVisible() ) { rcPos.left = rcPos.top = rcPos.right = rcPos.bottom = 0; break; } rcParent = pParent->GetClientPos(); if( !::IntersectRect(&rcPos, &rcPos, &rcParent) ) { rcPos.left = rcPos.top = rcPos.right = rcPos.bottom = 0; break; } } return rcPos; }
LRESULT WindowImplBase::OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { LPMINMAXINFO lpMMI = (LPMINMAXINFO) lParam; MONITORINFO oMonitor = {}; oMonitor.cbSize = sizeof(oMonitor); ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTONEAREST), &oMonitor); CDuiRect rcWork = oMonitor.rcWork; CDuiRect rcMonitor = oMonitor.rcMonitor; rcWork.Offset(-oMonitor.rcMonitor.left, -oMonitor.rcMonitor.top); // 计算最大化时,正确的原点坐标 lpMMI->ptMaxPosition.x = rcWork.left; lpMMI->ptMaxPosition.y = rcWork.top; lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x = rcWork.GetWidth(); lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y = rcWork.GetHeight(); if (m_PaintManager.GetMaxInfo().cx != 0) { lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x = m_PaintManager.GetMaxInfo().cx; } if (m_PaintManager.GetMaxInfo().cy != 0) { lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y = m_PaintManager.GetMaxInfo().cy; } lpMMI->ptMinTrackSize.x =m_PaintManager.GetMinInfo().cx; lpMMI->ptMinTrackSize.y =m_PaintManager.GetMinInfo().cy; bHandled = TRUE; return 0; }
void CComboBoxUI::PaintStatusImage(HDC hDC) { if (m_sArrowImage.IsEmpty()) CComboUI::PaintStatusImage(hDC); else { // get index if( IsFocused() ) m_uButtonState |= UISTATE_FOCUSED; else m_uButtonState &= ~ UISTATE_FOCUSED; if( !IsEnabled() ) m_uButtonState |= UISTATE_DISABLED; else m_uButtonState &= ~ UISTATE_DISABLED; int nIndex = 0; if ((m_uButtonState & UISTATE_DISABLED) != 0) nIndex = 4; else if ((m_uButtonState & UISTATE_PUSHED) != 0) nIndex = 2; else if ((m_uButtonState & UISTATE_HOT) != 0) nIndex = 1; else if ((m_uButtonState & UISTATE_FOCUSED) != 0) nIndex = 3; // make modify string CDuiString sModify = m_sArrowImage; int nPos1 = sModify.Find(_T("source")); int nPos2 = sModify.Find(_T("'"), nPos1 + 7); if (nPos2 == -1) return; //first int nPos3 = sModify.Find(_T("'"), nPos2 + 1); if (nPos3 == -1) return; //second CDuiRect rcBmpPart; LPTSTR lpszValue = NULL; rcBmpPart.left = _tcstol(sModify.GetData() + nPos2 + 1, &lpszValue, 10); ASSERT(lpszValue); rcBmpPart.top = _tcstol(lpszValue + 1, &lpszValue, 10); ASSERT(lpszValue); rcBmpPart.right = _tcstol(lpszValue + 1, &lpszValue, 10); ASSERT(lpszValue); rcBmpPart.bottom = _tcstol(lpszValue + 1, &lpszValue, 10); ASSERT(lpszValue); m_nArrowWidth = rcBmpPart.GetWidth() / 5; rcBmpPart.left += nIndex * m_nArrowWidth; rcBmpPart.right = rcBmpPart.left + m_nArrowWidth; CDuiRect rcDest(0, 0, m_rcItem.right - m_rcItem.left, m_rcItem.bottom - m_rcItem.top); rcDest.Deflate(GetBorderSize(), GetBorderSize()); rcDest.left = rcDest.right - m_nArrowWidth; CDuiString sSource = sModify.Mid(nPos1, nPos3 + 1 - nPos1); CDuiString sReplace; sReplace.SmallFormat(_T("source='%d,%d,%d,%d' dest='%d,%d,%d,%d'"), rcBmpPart.left, rcBmpPart.top, rcBmpPart.right, rcBmpPart.bottom, rcDest.left, rcDest.top, rcDest.right, rcDest.bottom); sModify.Replace(sSource, sReplace); // draw image if (!DrawImage(hDC, m_sArrowImage, sModify)) m_sNormalImage.Empty(); } }
LRESULT CWkeWebkitWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); m_pWebView->resize(rcWnd.GetWidth(), rcWnd.GetHeight()); m_pWebView->tick(); ::InvalidateRect(m_hWnd, NULL, FALSE); return 0; }
void CControlUI::SetPos(RECT rc, bool bNeedInvalidate) { if( rc.right < rc.left ) rc.right = rc.left; if( rc.bottom < rc.top ) rc.bottom = rc.top; CDuiRect invalidateRc = m_rcItem; if( ::IsRectEmpty(&invalidateRc) ) invalidateRc = rc; if( m_bFloat ) { CControlUI* pParent = GetParent(); /*if( pParent != NULL ) { RECT rcParentPos = pParent->GetPos(); RECT rcCtrl = {rcParentPos.left + rc.left, rcParentPos.top + rc.top, rcParentPos.left + rc.right, rcParentPos.top + rc.bottom}; m_rcItem = rcCtrl; LONG width = rcParentPos.right - rcParentPos.left; LONG height = rcParentPos.bottom - rcParentPos.top; RECT rcPercent = {(LONG)(width*m_piFloatPercent.left), (LONG)(height*m_piFloatPercent.top), (LONG)(width*m_piFloatPercent.right), (LONG)(height*m_piFloatPercent.bottom)}; m_cXY.cx = rc.left - rcPercent.left; m_cXY.cy = rc.top - rcPercent.top; m_cxyFixed.cx = rc.right - rcPercent.right - m_cXY.cx; m_cxyFixed.cy = rc.bottom - rcPercent.bottom - m_cXY.cy; }*/ } else { m_rcItem = rc; } m_rcItem = rc; if( m_pManager == NULL ) return; if( !m_bSetPos ) { m_bSetPos = true; if( OnSize ) OnSize(this); m_bSetPos = false; } m_bUpdateNeeded = false; if( bNeedInvalidate && IsVisible() ) { invalidateRc.Join(m_rcItem); CControlUI* pParent = this; RECT rcTemp; RECT rcParent; while( pParent = pParent->GetParent() ) { if( !pParent->IsVisible() ) return; rcTemp = invalidateRc; rcParent = pParent->GetPos(); if( !::IntersectRect(&invalidateRc, &rcTemp, &rcParent) ) return; } m_pManager->Invalidate(invalidateRc); } }
STDMETHODIMP CActiveXCtrl::GetDC(LPCRECT pRect, DWORD grfFlags, HDC* phDC) { DUITRACE(_T("AX: CActiveXCtrl::GetDC")); if( phDC == NULL ) return E_POINTER; if( m_pOwner == NULL ) return E_UNEXPECTED; *phDC = ::GetDC(m_pOwner->m_hwndHost); if( (grfFlags & OLEDC_PAINTBKGND) != 0 ) { CDuiRect rcItem = m_pOwner->GetPos(); if( !m_bWindowless ) rcItem.ResetOffset(); ::FillRect(*phDC, &rcItem, (HBRUSH) (COLOR_WINDOW + 1)); } return S_OK; }
RECT CEditWnd::CalPos() { CDuiRect rcPos = m_pOwner->GetPos(); RECT rcInset = m_pOwner->GetTextPadding(); rcPos.left += rcInset.left; rcPos.top += rcInset.top; rcPos.right -= rcInset.right; rcPos.bottom -= rcInset.bottom; LONG lEditHeight = m_pOwner->GetManager()->GetFontInfo(m_pOwner->GetFont())->tm.tmHeight; if( lEditHeight < rcPos.GetHeight() ) { rcPos.top += (rcPos.GetHeight() - lEditHeight) / 2; rcPos.bottom = rcPos.top + lEditHeight; } return rcPos; }
LRESULT CMenuWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { SIZE szRoundCorner = m_pm.GetRoundCorner(); if( !::IsIconic(*this) ) { CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); rcWnd.Offset(-rcWnd.left, -rcWnd.top); rcWnd.right++; rcWnd.bottom++; HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy); ::SetWindowRgn(*this, hRgn, TRUE); ::DeleteObject(hRgn); } bHandled = FALSE; return 0; }
void CWindowWnd::FullScreen() { ::GetClientRect(m_hWnd,&m_RestoreRect); CPoint point; ::ClientToScreen(m_hWnd,&point); m_RestoreRect.left=point.x; m_RestoreRect.top=point.y; m_RestoreRect.right+=point.x; m_RestoreRect.bottom+=point.y; MONITORINFO oMonitor = {}; oMonitor.cbSize = sizeof(oMonitor); ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTONEAREST), &oMonitor); CDuiRect rcWork = oMonitor.rcWork; ::SetWindowPos( m_hWnd, NULL, rcWork.left, rcWork.top, rcWork.GetWidth(), rcWork.GetHeight(), SWP_SHOWWINDOW | SWP_NOZORDER ); }
LRESULT CHelloWorld::OnSize( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ) { SIZE szRoundCorner = m_pm.GetRoundCorner(); // GetRoundCorner用来获取xml中的Window标签中roundcorner属性值,该值指示圆角的长宽 if( !::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0) ) { CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); rcWnd.Offset(-rcWnd.left, -rcWnd.top); // rcWnd.right就成为了窗口的宽度了 rcWnd.right++; rcWnd.bottom++; HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy); ::SetWindowRgn(*this, hRgn, TRUE); // 窗口圆角化处理 ::DeleteObject(hRgn); } bHandled = FALSE; return 0; }
LRESULT imsdkDemoLogin::OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { MONITORINFO oMonitor = {}; oMonitor.cbSize = sizeof(oMonitor); ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor); CDuiRect rcWork = oMonitor.rcWork; rcWork.Offset(-oMonitor.rcMonitor.left, -oMonitor.rcMonitor.top); LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam; lpMMI->ptMaxPosition.x = rcWork.left; lpMMI->ptMaxPosition.y = rcWork.top; lpMMI->ptMaxSize.x = rcWork.right; lpMMI->ptMaxSize.y = rcWork.bottom; bHandled = FALSE; return 0; }
LRESULT WindowImplBase::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { SIZE szRoundCorner = m_PaintManager.GetRoundCorner(); #if defined(WIN32) && !defined(UNDER_CE) if( !::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0) ) { CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); rcWnd.Offset(-rcWnd.left, -rcWnd.top); rcWnd.right++; rcWnd.bottom++; HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy); ::SetWindowRgn(*this, hRgn, TRUE); ::DeleteObject(hRgn); } #endif bHandled = FALSE; return 0; }
HRGN CreateTransColorRgn(HDC dc,HWND hwnd,COLORREF TransColor) { COLORREF cl; CDuiRect cRect; HRGN wndRgn; ::GetWindowRect(hwnd,&cRect); wndRgn = ::CreateRectRgn(0,0,cRect.GetWidth(),cRect.GetHeight()); for(int x = 0,len = cRect.GetWidth(); x <= len; x++) { int y1,y2; int height = cRect.GetHeight(); for(y1 = 0; y1 <=height; y1++) { cl = ::GetPixel(dc,x,y1); if(cl == TransColor) { HRGN rgnTemp = ::CreateRectRgn(x, y1, x+1, y1+1); ::CombineRgn(wndRgn,wndRgn,rgnTemp,RGN_XOR); ::DeleteObject(rgnTemp); } else { break; } } for(y2 = height-1; y2 >= y1; y2--) { cl = ::GetPixel(dc,x, y2); if(cl == TransColor) { HRGN rgnTemp = ::CreateRectRgn(x, y2, x+1, y2+1); ::CombineRgn(wndRgn,wndRgn,rgnTemp, RGN_XOR); ::DeleteObject(rgnTemp); } else { break; } } } return wndRgn; }
LRESULT WindowImplBase::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if (m_bFrameWnd) { bHandled = FALSE; return 0; } SIZE szRoundCorner = m_PaintManager.GetRoundCorner(); #if defined(WIN32) && !defined(UNDER_CE) if( !::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0) ) { CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); rcWnd.Offset(-rcWnd.left, -rcWnd.top); rcWnd.right++; rcWnd.bottom++; HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy); ::SetWindowRgn(*this, hRgn, TRUE); ::DeleteObject(hRgn); } #endif if (wParam != m_dwWindowPosState && (wParam==SIZE_MAXIMIZED || wParam==SIZE_RESTORED) && GetManager()->GetRoot()) { CControlUI* btnmax = FindControl(_T("maxbtn")); CControlUI* btnrestore = FindControl(_T("restorebtn")); if (btnmax && btnrestore) { if (wParam == SIZE_MAXIMIZED) { btnmax->SetVisible(false); btnrestore->SetVisible(true); } else { btnmax->SetVisible(true); btnrestore->SetVisible(false); } } } m_dwWindowPosState = wParam; bHandled = FALSE; return 0; }
LRESULT WindowImplBase::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { SIZE szRoundCorner = m_PaintManager.GetRoundCorner(); if( !::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0) ) { CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); rcWnd.Offset(-rcWnd.left, -rcWnd.top); rcWnd.right++; rcWnd.bottom++; HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy); ::SetWindowRgn(*this, hRgn, TRUE); ::DeleteObject(hRgn); } CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); DUITRACE(_T("WinImplBase::OnSize(), width = %d, height = %d"), rcWnd.right - rcWnd.left, rcWnd.bottom - rcWnd.top); DUITRACE(_T("WinImplBase::OnSize(): %d, width = %d, height = %d"), wParam, LOWORD(lParam), HIWORD(lParam)); bHandled = FALSE; return 0; }
BOOL CWin::MoveWindowToPoint(LPPOINT lpPoint) { assert(lpPoint); assert(::IsWindow(m_hWnd)); RECT rcWnd; GetWindowRect(&rcWnd); const int nWidth = rcWnd.right - rcWnd.left; const int nHeight = rcWnd.bottom - rcWnd.top; rcWnd.left = lpPoint->x; rcWnd.top = lpPoint->y; rcWnd.right = rcWnd.left + nWidth; rcWnd.bottom = rcWnd.top + nHeight; MONITORINFO oMonitor = {0}; oMonitor.cbSize = sizeof(oMonitor); ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor); CDuiRect rcWork = oMonitor.rcWork; if( rcWnd.bottom > rcWork.bottom ) { if( nHeight >= rcWork.GetHeight() ) { rcWnd.top = 0; rcWnd.bottom = nHeight; } else { rcWnd.bottom = lpPoint->y;//rcWork.bottom; rcWnd.top = rcWnd.bottom - nHeight; } } if( rcWnd.right > rcWork.right ) { if( nWidth >= rcWork.GetWidth() ) { rcWnd.left = 0; rcWnd.right = nWidth; } else { rcWnd.right = lpPoint->x;//rcWork.right; rcWnd.left = rcWnd.right - nWidth; } } return SetWindowPos(NULL,&rcWnd,SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); }
void CControlUI::SetPos(const CDuiRect& rc) { m_rcItem = rc; if(m_rcItem.right < m_rcItem.left) m_rcItem.right = m_rcItem.left; if(m_rcItem.bottom< m_rcItem.top) m_rcItem.bottom = m_rcItem.top; SIZE tmpsz = {m_rcItem.GetWidth(), m_rcItem.GetHeight()}; SetPostSize(tmpsz); if(!IsWindow(m_hWnd) || m_rcItem.IsNull()) return; CDuiRect rct = m_rcItem; rct = m_rcItem; rct.left += m_rcInset.left; rct.top += m_rcInset.top; rct.right -= m_rcInset.right; rct.bottom -= m_rcInset.bottom; ::SetWindowPos(m_hWnd, 0, rct.left, rct.top, rct.GetWidth(), rct.GetHeight(), SWP_NOZORDER); }
void CInfoWindow::AdjustWindow(HWND hparent,POINT pt) { if(hparent) ::ClientToScreen(hparent,&pt); CDuiRect rtWnd; GetWindowRect(&rtWnd); const int nWidth = rtWnd.GetWidth(); const int nHeight = rtWnd.GetHeight(); rtWnd.left = pt.x; rtWnd.right = rtWnd.left + nWidth; rtWnd.bottom = pt.y;// - _ptOffsize.cy; rtWnd.top = rtWnd.bottom - nHeight; SetWindowPos(HWND_TOPMOST,&rtWnd,0); // { // CDuiRect rect; // GetWindowRect(&rect); // HDC dc = ::GetDC(m_hWnd); // HDC memdc = ::CreateCompatibleDC(dc); // COLORREF clr = RGB(255,0,255); // COLORREF clrOld = ::SetBkColor(memdc, clr); // ASSERT(clrOld != CLR_INVALID); // if(clrOld != CLR_INVALID) // { // ::ExtTextOut(memdc, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL); // ::SetBkColor(memdc, clrOld); // } // VERIFY(CRenderEngine::DrawImageString(memdc,GetPaintMgr(),rect,rect,GetPaintMgr()->GetRoot()->GetBkImage())); // HRGN hrgn = CreateTransColorRgn(memdc,m_hWnd,clr); // ASSERT(hrgn); // ::SetWindowRgn(m_hWnd,hrgn, true); // ::DeleteObject(hrgn); // ::DeleteDC(memdc); // ::ReleaseDC(m_hWnd,dc); // } Invalidate(FALSE); }
LRESULT CMenuWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if( !::IsIconic(*this) ) { CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); rcWnd.Offset(-rcWnd.left, -rcWnd.top); HRGN hRgn = ::CreateRectRgn(rcWnd.left + 8, rcWnd.top + 8, rcWnd.right - 8, rcWnd.bottom - 8); ::SetWindowRgn(*this, hRgn, TRUE); ::DeleteObject(hRgn); } if( m_pShadowWnd != NULL ) { RECT rcWnd = { 0 }; ::GetWindowRect(m_hWnd, &rcWnd ); ::SetWindowPos(*m_pShadowWnd, m_hWnd, rcWnd.left, rcWnd.top, rcWnd.right -rcWnd.left, rcWnd.bottom -rcWnd.top, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER); } bHandled = FALSE; return 0; }
LRESULT WindowImplBase::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { SIZE szRoundCorner = m_PaintManager.GetRoundCorner(); #if defined(WIN32) && !defined(UNDER_CE) if( !::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0) ) { CDuiRect rcWnd; ::GetWindowRect(*this, &rcWnd); rcWnd.Offset(-rcWnd.left, -rcWnd.top); rcWnd.right++; rcWnd.bottom++; HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy); ::SetWindowRgn(*this, hRgn, TRUE); ::DeleteObject(hRgn); } #endif // 切换最大化按钮和还原按钮的状态 if (wParam != m_dwWindowPosState && (wParam == SIZE_MAXIMIZED || wParam == SIZE_RESTORED) && GetPaintManager()->GetRoot()) { CControlUI* pbtnMax = static_cast<CControlUI*>(m_PaintManager.FindControl(_T("maxbtn"))); // 最大化按钮 CControlUI* pbtnRestore = static_cast<CControlUI*>(m_PaintManager.FindControl(_T("restorebtn"))); // 还原按钮 if (pbtnMax && pbtnRestore){ if (wParam == SIZE_MAXIMIZED){ pbtnMax->SetVisible(false); pbtnRestore->SetVisible(true); } else{ pbtnMax->SetVisible(true); pbtnRestore->SetVisible(false); } } } //m_dwWindowPosState来保存上一次的窗口状态, 只有当状态不同时才会切换按钮. m_dwWindowPosState = wParam; bHandled = FALSE; return 0; }
void CGroupBoxUI::PaintBorder(HDC hDC) { if( m_nBorderSize > 0 ) { CDuiRect rcItem = m_rcItem; rcItem.Deflate(5,5); if( m_cxyBorderRound.cx > 0 || m_cxyBorderRound.cy > 0 )//»Ô²½Ç±ß¿ò { if (IsFocused() && m_dwFocusBorderColor != 0) CRenderEngine::DrawRoundRect(hDC, rcItem, m_nBorderSize, m_cxyBorderRound.cx, m_cxyBorderRound.cy, GetAdjustColor(m_dwFocusBorderColor)); else CRenderEngine::DrawRoundRect(hDC, rcItem, m_nBorderSize, m_cxyBorderRound.cx, m_cxyBorderRound.cy, GetAdjustColor(m_dwBorderColor)); } else { if (IsFocused() && m_dwFocusBorderColor != 0) CRenderEngine::DrawRect(hDC, rcItem, m_nBorderSize, GetAdjustColor(m_dwFocusBorderColor)); else CRenderEngine::DrawRect(hDC, rcItem, m_nBorderSize, GetAdjustColor(m_dwBorderColor)); } } PaintText(hDC); }
void MainDialog::InitWindow() { MONITORINFO oMonitor = {}; oMonitor.cbSize = sizeof(oMonitor); ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor); CDuiRect rcWork = oMonitor.rcWork; CDuiRect rcWnd; GetWindowRect(m_hWnd, &rcWnd); int nWidth = rcWnd.GetWidth(); int nHeight = rcWnd.GetHeight(); #ifdef _DEBUG SetWindowPos(m_hWnd, 0, rcWork.GetWidth() - nWidth - 100, 100, 280, rcWork.GetHeight()-200, SWP_SHOWWINDOW); #else SetWindowPos(m_hWnd, HWND_TOPMOST, rcWork.GetWidth() - nWidth - 100, 100, 280, rcWork.GetHeight() - 200, SWP_SHOWWINDOW); #endif }
void CMenuWnd::ResizeMenu() { CControlUI* pRoot = m_pm.GetRoot(); #if defined(WIN32) && !defined(UNDER_CE) MONITORINFO oMonitor = {}; oMonitor.cbSize = sizeof(oMonitor); ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor); CDuiRect rcWork = oMonitor.rcWork; #else CDuiRect rcWork; GetWindowRect(m_pOwner->GetManager()->GetPaintWindow(), &rcWork); #endif SIZE szAvailable = { rcWork.right - rcWork.left, rcWork.bottom - rcWork.top }; szAvailable = pRoot->EstimateSize(szAvailable); m_pm.SetInitSize(szAvailable.cx, szAvailable.cy); //必须是Menu标签作为xml的根节点 CMenuUI *pMenuRoot = static_cast<CMenuUI*>(pRoot); ASSERT(pMenuRoot); SIZE szInit = m_pm.GetInitSize(); CDuiRect rc; CDuiPoint point = m_BasedPoint; rc.left = point.x; rc.top = point.y; rc.right = rc.left + szInit.cx; rc.bottom = rc.top + szInit.cy; int nWidth = rc.GetWidth(); int nHeight = rc.GetHeight(); if (m_dwAlignment & eMenuAlignment_Right) { rc.right = point.x; rc.left = rc.right - nWidth; } if (m_dwAlignment & eMenuAlignment_Bottom) { rc.bottom = point.y; rc.top = rc.bottom - nHeight; } SetForegroundWindow(m_hWnd); MoveWindow(m_hWnd, rc.left, rc.top, rc.GetWidth(), rc.GetHeight(), FALSE); SetWindowPos(m_hWnd, HWND_TOPMOST, rc.left, rc.top, rc.GetWidth(), rc.GetHeight() + pMenuRoot->GetInset().bottom + pMenuRoot->GetInset().top, SWP_SHOWWINDOW); }
void CMenuWnd::AdjustPostion() { CDuiRect rcWnd; GetWindowRect(m_hWnd, &rcWnd); int nWidth = rcWnd.GetWidth(); int nHeight = rcWnd.GetHeight(); rcWnd.left = m_ptPos.x; rcWnd.top = m_ptPos.y; rcWnd.right = rcWnd.left + nWidth; rcWnd.bottom = rcWnd.top + nHeight; MONITORINFO oMonitor = {}; oMonitor.cbSize = sizeof(oMonitor); ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor); CDuiRect rcWork = oMonitor.rcWork; if( rcWnd.bottom > rcWork.bottom ) { if( nHeight >= rcWork.GetHeight() ) { rcWnd.top = 0; rcWnd.bottom = nHeight; } else { rcWnd.bottom = rcWork.bottom; rcWnd.top = rcWnd.bottom - nHeight; } } if( rcWnd.right > rcWork.right ) { if( nWidth >= rcWork.GetWidth() ) { rcWnd.left = 0; rcWnd.right = nWidth; } else { rcWnd.right = rcWork.right; rcWnd.left = rcWnd.right - nWidth; } } ::SetWindowPos(m_hWnd, NULL, rcWnd.left, rcWnd.top, rcWnd.GetWidth(), rcWnd.GetHeight(), SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); }
void CHorizontalLayoutUI::DoEvent(TEventUI& event) { if( m_iSepWidth != 0 ) { if( event.Type == UIEVENT_BUTTONDOWN && IsEnabled() ) { RECT rcSeparator = GetThumbRect(false); if( ::PtInRect(&rcSeparator, event.ptMouse) ) { m_uButtonState |= UISTATE_CAPTURED; m_ptLastMouse = event.ptMouse; m_rcNewPos = m_rcItem; if( !m_bImmMode && m_pManager ) m_pManager->AddPostPaint(this); return; } } if( event.Type == UIEVENT_BUTTONUP ) { if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) { m_uButtonState &= ~UISTATE_CAPTURED; m_rcItem = m_rcNewPos; if( !m_bImmMode && m_pManager ) m_pManager->RemovePostPaint(this); NeedParentUpdate(); return; } } if( event.Type == UIEVENT_MOUSEMOVE ) { if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) { LONG cx = event.ptMouse.x - m_ptLastMouse.x; m_ptLastMouse = event.ptMouse; RECT rc = m_rcNewPos; if( m_iSepWidth >= 0 ) { if( cx > 0 && event.ptMouse.x < m_rcNewPos.right - m_iSepWidth ) return; if( cx < 0 && event.ptMouse.x > m_rcNewPos.right ) return; rc.right += cx; if( rc.right - rc.left <= GetMinWidth() ) { if( m_rcNewPos.right - m_rcNewPos.left <= GetMinWidth() ) return; rc.right = rc.left + GetMinWidth(); } if( rc.right - rc.left >= GetMaxWidth() ) { if( m_rcNewPos.right - m_rcNewPos.left >= GetMaxWidth() ) return; rc.right = rc.left + GetMaxWidth(); } } else { if( cx > 0 && event.ptMouse.x < m_rcNewPos.left ) return; if( cx < 0 && event.ptMouse.x > m_rcNewPos.left - m_iSepWidth ) return; rc.left += cx; if( rc.right - rc.left <= GetMinWidth() ) { if( m_rcNewPos.right - m_rcNewPos.left <= GetMinWidth() ) return; rc.left = rc.right - GetMinWidth(); } if( rc.right - rc.left >= GetMaxWidth() ) { if( m_rcNewPos.right - m_rcNewPos.left >= GetMaxWidth() ) return; rc.left = rc.right - GetMaxWidth(); } } CDuiRect rcInvalidate = GetThumbRect(true); m_rcNewPos = rc; m_cxyFixed.cx = m_rcNewPos.right - m_rcNewPos.left; if( m_bImmMode ) { m_rcItem = m_rcNewPos; NeedParentUpdate(); } else { rcInvalidate.Join(GetThumbRect(true)); rcInvalidate.Join(GetThumbRect(false)); if( m_pManager ) m_pManager->Invalidate(rcInvalidate); } return; } } if( event.Type == UIEVENT_SETCURSOR ) { RECT rcSeparator = GetThumbRect(false); if( IsEnabled() && ::PtInRect(&rcSeparator, event.ptMouse) ) { ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE))); return; } } } CContainerUI::DoEvent(event); }
void CVerticalLayoutUI::DoEvent(TEventUI& event) { if( m_iSepHeight != 0 ) { if( event.Type == UIEVENT_BUTTONDOWN && IsEnabled() ) { RECT rcSeparator = GetThumbRect(false); if( ::PtInRect(&rcSeparator, event.ptMouse) ) { m_uButtonState |= UISTATE_CAPTURED; ptLastMouse = event.ptMouse; m_rcNewPos = m_rcItem; if( !m_bImmMode && m_pManager ) m_pManager->AddPostPaint(this); return; } } if( event.Type == UIEVENT_BUTTONUP ) { if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) { m_uButtonState &= ~UISTATE_CAPTURED; m_rcItem = m_rcNewPos; if( !m_bImmMode && m_pManager ) m_pManager->RemovePostPaint(this); NeedParentUpdate(); return; } } if( event.Type == UIEVENT_MOUSEMOVE ) { if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) { LONG cy = event.ptMouse.y - ptLastMouse.y; ptLastMouse = event.ptMouse; RECT rc = m_rcNewPos; if( m_iSepHeight >= 0 ) { if( cy > 0 && event.ptMouse.y < m_rcNewPos.bottom + m_iSepHeight ) return; if( cy < 0 && event.ptMouse.y > m_rcNewPos.bottom ) return; rc.bottom += cy; if( rc.bottom - rc.top <= GetMinHeight() ) { if( m_rcNewPos.bottom - m_rcNewPos.top <= GetMinHeight() ) return; rc.bottom = rc.top + GetMinHeight(); } if( rc.bottom - rc.top >= GetMaxHeight() ) { if( m_rcNewPos.bottom - m_rcNewPos.top >= GetMaxHeight() ) return; rc.bottom = rc.top + GetMaxHeight(); } } else { if( cy > 0 && event.ptMouse.y < m_rcNewPos.top ) return; if( cy < 0 && event.ptMouse.y > m_rcNewPos.top + m_iSepHeight ) return; rc.top += cy; if( rc.bottom - rc.top <= GetMinHeight() ) { if( m_rcNewPos.bottom - m_rcNewPos.top <= GetMinHeight() ) return; rc.top = rc.bottom - GetMinHeight(); } if( rc.bottom - rc.top >= GetMaxHeight() ) { if( m_rcNewPos.bottom - m_rcNewPos.top >= GetMaxHeight() ) return; rc.top = rc.bottom - GetMaxHeight(); } } CDuiRect rcInvalidate = GetThumbRect(true); m_rcNewPos = rc; m_cxyFixed.cy = m_rcNewPos.bottom - m_rcNewPos.top; if( m_bImmMode ) { m_rcItem = m_rcNewPos; NeedParentUpdate(); } else { rcInvalidate.Join(GetThumbRect(true)); rcInvalidate.Join(GetThumbRect(false)); if( m_pManager ) m_pManager->Invalidate(rcInvalidate); } return; } } if( event.Type == UIEVENT_SETCURSOR ) { RECT rcSeparator = GetThumbRect(false); if( IsEnabled() && ::PtInRect(&rcSeparator, event.ptMouse) ) { ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS))); return; } } } CContainerUI::DoEvent(event); }