BOOL CGuiControlBar::IsLegal(UINT uAlin) { m_First=GetFirstPos(); // if (IsFloating()) return FALSE; switch(uAlin) { case HTLEFT: if (IsHorz() && m_pos >0 && (m_pos != m_Last && m_pos != m_First)) return TRUE; if (IsVert() && m_pos <= m_Last && IsRight() ) return TRUE; return FALSE; break; case HTTOP: if (m_pos != m_First && IsVert()) return TRUE; if (IsHorz() && m_pos <= m_Last && IsBottom() ) return TRUE; return FALSE; break; case HTRIGHT: if (m_pos <= m_Last && IsVert() && IsLeft() ) return TRUE; if (IsHorz() && m_pos >0 && m_pos != m_Last) return TRUE; return FALSE; case HTBOTTOM: if ((m_pos != m_Last && m_pos != m_First) && IsHorz() && IsBottom()) return TRUE; if (m_pos <= m_Last && IsHorz() && IsTop()) return TRUE; //if (IsVert() && m_pos >0 ) return TRUE; return FALSE; break; } return FALSE; }
void CXTPSkinObjectTab::FillClient(CDC* pDC, CRect rc) { FillBackground(pDC, rc); if (GetStyle() & TCS_BUTTONS) return; CXTPSkinManagerClass* pClass = GetSkinClass(); CRect rcClient(rc); CRect rcHeader = GetHeaderRect(); DWORD dwStyle = GetStyle(); if (IsRight(dwStyle)) { rcClient.right = rcHeader.left; } else if (IsLeft(dwStyle)) { rcClient.left = rcHeader.right; } else if (IsBottom(dwStyle)) { rcClient.bottom = rcHeader.top; } else { rcClient.top = rcHeader.bottom; } pClass->DrawThemeBackground(pDC, TABP_PANE, 0, &rcClient); }
CRect CXTPSkinObjectTab::GetHeaderRect() { CRect rcHeader; GetClientRect(&rcHeader); CTabCtrl* pTabCtrl = (CTabCtrl*)this; // get the selected tab item rect. CRect rcItem; pTabCtrl->GetItemRect(pTabCtrl->GetCurSel(), &rcItem); DWORD dwStyle = GetStyle(); if (IsRight(dwStyle)) { rcHeader.left = rcItem.left; } else if (IsLeft(dwStyle)) { rcHeader.right = rcItem.right; } else if (IsBottom(dwStyle)) { rcHeader.top = rcItem.top; } else { rcHeader.bottom = (rcHeader.top + rcItem.Height()) * pTabCtrl->GetRowCount() + GetMetrics()->m_cyEdge; } return rcHeader; }
CRect CGuiControlBar::GetDockRect() { CRect rcWin; if (IsVert()) if (IsLeft()) m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_LEFT)->GetWindowRect(rcWin); else m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_RIGHT)->GetWindowRect(rcWin); else if(IsBottom()) m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_BOTTOM)->GetWindowRect(rcWin); else m_pDockSite->GetControlBar(AFX_IDW_DOCKBAR_TOP)->GetWindowRect(rcWin); return rcWin; }
void CRussiaRectView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default switch(nChar) { case 'A': //A 左移一格 RectArrow(LEFT); break; case 'D': //D 右移一格 RectArrow(RIGHT); break; case 'W': //W 方块变形 RectChange(); break; case 'S': //S 下移一格 RectArrow(DOWN); break; case VK_SPACE: //SPACE 直接下落到底部 while(!IsBottom()) RectDown(); break; //双人模式 case VK_LEFT: //LEFT 左移一格 if(!m_bOnePlayer) RectArrow2(LEFT2); break; case VK_RIGHT: //RIGHT 右移一格 if(!m_bOnePlayer) RectArrow2(RIGHT2); break; case VK_UP: //UP 方块变形 if(!m_bOnePlayer) RectChange2(); break; case VK_DOWN: //DOWN 下移一格 if(!m_bOnePlayer) RectArrow2(DOWN2); break; case VK_NUMPAD0: //Number 0 直接下落到底部 if(!m_bOnePlayer) while(!IsBottom2()) RectDown2(); break; } CView::OnKeyDown(nChar, nRepCnt, nFlags); }
void CXTPSkinObjectTab::OnDraw(CDC* pDC) { CRect rc = GetHeaderRect(); DWORD dwStyle = GetStyle(); if (IsRight(dwStyle)) { rc.left -= 2; } else if (IsLeft(dwStyle)) { rc.right += 2; } else if (IsBottom(dwStyle)) { rc.top -= 2; } else { rc.bottom += 2; } CXTPBufferDC dcMem(*pDC, rc); FillClient(&dcMem, CXTPClientRect(this)); if (m_bActiveX) { m_bPaint = TRUE; CXTPBufferDC dcMem2(*pDC, rc); DefWindowProc(WM_PAINT, (WPARAM)dcMem2.GetSafeHdc(), 0); dcMem2.Discard(); m_bPaint = FALSE; } CTabCtrl* pTabCtrl = (CTabCtrl*)this; CXTPFontDC font(&dcMem, GetFont()); dcMem.SetBkMode(TRANSPARENT); for (int iItem = 0; iItem < pTabCtrl->GetItemCount(); ++iItem) { DrawTab(&dcMem, iItem); } DrawTab(&dcMem, pTabCtrl->GetCurSel()); }
////////////////////////////// //void RectDown() //左边方块下移函数 void CRussiaRectView::RectDown() { //查看是否到达底部 m_isBottom = IsBottom(); //1.若没有到达底部,便可以下移 if (!m_isBottom) { //m_isBottom = false; //1.1 清除以前的方块 ShapeInMap(m_iCurrentShape,0); //1.2 方块下落 position.x++; //1.3 更新新的地图数组 ShapeInMap(m_iCurrentShape,1); //1.4 显示新的图像 InvalidateCurrent(); } }
void CGuiControlBar::OnInvertTracker(const CRect& rect) { ASSERT_VALID(this); ASSERT(!rect.IsRectEmpty()); CRect rcWin=GetDockRect(); CDC *pDC = m_pDockSite->GetDCEx(NULL, DCX_WINDOW|DCX_CACHE|DCX_LOCKWINDOWUPDATE); CRect rcBar; GetWindowRect(rcBar); if (IsVert()) //el sentido de las barras es vertical { if (m_SideMove==HTLEFT || m_SideMove==HTRIGHT) //el mouse esta en el borde izquierdo o derecho { rcWin.OffsetRect(-rect.left,-rect.top); rcWin.top+=10; rcWin.left=rect.left+2; rcWin.right=rect.right+2; } else //el mouse esta el borde de arriba pero de una barra vertical { rcBar.OffsetRect(-rect.TopLeft()); rcWin=rcBar; if (IsLeft() || IsRight()) //a la izquierda { rcWin.top=rect.top-2; rcWin.bottom=rect.bottom-2; } // } } else //el sentido de las barras es horizontal { if (m_SideMove==HTTOP || m_SideMove==HTBOTTOM) //el mouse esta en el borde de arriba o abajo { rcWin.OffsetRect(-rect.left,-rect.top); rcWin.top=rect.top-2; rcWin.bottom=rect.bottom-2; } else //el mouse esta en el borde derecho { rcBar.OffsetRect(-rect.TopLeft()); rcWin=rcBar; if (IsBottom() || IsTop()) //abajo { rcWin.left=rect.left+2; rcWin.right=rect.right+2; } } } ClientToScreen(&rcWin); GetParentFrame()->ScreenToClient(&rcWin); // invert the brush pattern (looks just like frame window sizing) CBrush* pBrush = CDC::GetHalftoneBrush(); HBRUSH hOldBrush = NULL; if (pBrush != NULL) hOldBrush = (HBRUSH)SelectObject(pDC->m_hDC, pBrush->m_hObject); pDC->PatBlt(rcWin.left, rcWin.top, rcWin.Width(), rcWin.Height(), PATINVERT); if (hOldBrush != NULL) SelectObject(pDC->m_hDC, hOldBrush); m_pDockSite->ReleaseDC(pDC); }
BOOL CGuiControlBar::IsHorz() { if (IsTop() || IsBottom()) return TRUE; return FALSE; }
/////////////////////////////////////////// //void OnTimer(UINT nIDEvent) //计时器函数,为程序中所有的时钟动作提供驱动 void CRussiaRectView::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default //1. 如果原来的方块已到底或游戏刚开始 if (m_isBottom) { //1 将当前的方块位置保存到地图数组中 ShapeInMap(m_iCurrentShape,1); //2 获得减少的行数和分数 m_iTotalRow += GetDecreaseRow(); //2.3 得到此时方块累积的高度 m_iRectHeight = GetHeight(); //3. 将当前方块用下一个方块代替 m_iCurrentShape = m_iNextShape; //4. 随机得到下一次的方块样式 m_iNextShape = Random(19); //5. 初始化当前新方块的初始化位置 position.x = m_iStartPositionX; position.y = m_iStartPositionY; //2.6 显示该图像 InvalidateCurrent(); //6. 若到达底部 if(IsBottom()) { //2.4 若方块的最高累积高度超过了窗口的顶部 if(m_iRectHeight >= m_iRow -1) { //2.5 游戏结束 GameOver(); } } RectDown(); } //2.否则没有到达底部 else { //2.1方块下降 RectDown(); } //右边:如果原来的方块已到底或游戏刚开始,则掉下一个新的方块 if(!m_bOnePlayer) { //1. 如果原来的方块已到底或游戏刚开始 if (m_isBottom2) { //1 将当前的方块位置保存到地图数组中 ShapeInMap2(m_iCurrentShape2,1); //2 获得减少的行数和分数 m_iTotalRow2 += GetDecreaseRow2(); //2.3 得到此时方块累积的高度 m_iRectHeight2 = GetHeight2(); //3. 将当前方块用下一个方块代替 m_iCurrentShape2 = m_iNextShape2; //4. 随机得到下一次的方块样式 m_iNextShape2 = Random(19); //5. 初始化当前新方块的初始化位置 position2.x = m_iStartPositionX; position2.y = m_iStartPositionY; //2.6 显示该图像 InvalidateCurrent2(); //6. 若到达底部 if(IsBottom2()) { //2.4 若方块的最高累积高度超过了窗口的顶部 if(m_iRectHeight2 >= m_iRow -1) { //2.5 游戏结束 GameOver(); } } RectDown2(); } //2. 否则,当前方块下降 else { RectDown2(); } } CView::OnTimer(nIDEvent); }
AFX_INLINE BOOL IsHorz(DWORD dwStyle) { return (IsTop(dwStyle) || IsBottom(dwStyle)); }
BOOL CGuiToolBarWnd::IsHorz() { if (IsTop() || IsBottom()) return TRUE; return FALSE; }