void CPictureView::SetScrollSizes() { //得到客户区的大小 CRect rcClient; GetClientRect(&rcClient); CSize szPage = rcClient.Size(); //得到图片显示的大小 CSize szTotal(m_PictDisplaySize); CSize szLine = szPage; szLine.cx /= 10; szLine.cy /= 10; CScrollView::SetScrollSizes(MM_TEXT, szTotal, szPage, szLine); Invalidate(); }
//绘制按钮,只有菜单按钮才需要该函数 //图标按钮不是自画方式,使用系统函数进行绘制 void CIconBut::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your message handler code here and/or call default //CButton::OnDrawItem(nIDCtl, lpDrawItemStruct); if( ( GetStyle( ) & BS_OWNERDRAW ) == BS_OWNERDRAW ) { //该控件为自画方式 //if(m_bStayDown&&m_bLockDown) return; CRect rect(lpDrawItemStruct->rcItem); CDC* pDC=CDC::FromHandle(lpDrawItemStruct->hDC); UINT state=lpDrawItemStruct->itemState; UINT action=lpDrawItemStruct->itemAction; //得到系统的按钮各部分颜色 HBRUSH hbrText=GetSysColorBrush(COLOR_BTNTEXT); HBRUSH hbrFace=GetSysColorBrush(COLOR_3DFACE); HBRUSH hOldBrush=(HBRUSH)SelectObject(pDC->m_hDC,hbrFace); //绘制边界 CRect edgeRect(rect); pDC->Rectangle(rect); if(state&ODS_FOCUS) edgeRect.InflateRect(-1,-1); //绘制按钮体 /*if((state&ODS_SELECTED)&&(action&ODA_SELECT)&&(state&ODS_FOCUS)) { //按钮被选中 CPen pen(PS_SOLID,1,GetSysColor(COLOR_3DSHADOW)); CPen* pOldPen=pDC->SelectObject(&pen); pDC->Rectangle(edgeRect); pDC->SelectObject(pOldPen); } else*/ pDC->DrawEdge(edgeRect,EDGE_RAISED,BF_RECT|BF_SOFT); //m_bStayDown=FALSE; } //绘制按钮文字标题 CSize szTri=pDC->GetOutputTextExtent(_T("M"),1); CString text; GetWindowText(text); CSize szText=pDC->GetOutputTextExtent(text,text.GetLength()); CSize szTotal(szText); szTotal.cx+=szTri.cx; CRect textRect=rect; textRect.InflateRect(-((rect.Width()-szTotal.cx)/2), -((rect.Height()-szTotal.cy)/2)); textRect.top--; CRect triRect=textRect; triRect.left=textRect.right-szTri.cx; triRect.InflateRect(0,-((textRect.Height()-szTri.cy)/2)); pDC->SetBkMode(TRANSPARENT); if(state&ODS_SELECTED) textRect.OffsetRect(1,1); pDC->DrawText(text,textRect,DT_SINGLELINE|DT_LEFT); SelectObject(pDC->m_hDC,hbrText); CPoint ptTri(textRect.left+szText.cx,textRect.top+3); DrawTriangle(pDC,ptTri,10); if(state&ODS_FOCUS) { CRect fRect(rect); fRect.InflateRect(-4,-4); pDC->DrawFocusRect(fRect); } SelectObject(pDC->m_hDC,hOldBrush); if((action&ODA_SELECT)&& (state&ODS_FOCUS)&&(state&ODS_SELECTED)) DisplayMenu(); } }