CdDcdZoneXy CDcdTargetOnPaint::getDrawableZone() 
{
	CdDcdZoneXy	xyzoneRv ;
	RECT	LRect = m_pPaintstruct->rcPaint ;
	xyzoneRv.setX( CdDcdZone( LRect.left , LRect.right - LRect.left ) )
			.setY( CdDcdZone( LRect.top , LRect.bottom - LRect.top ) ) ;
	return ( xyzoneRv ) ;
}
CdDcdZoneXy CDcdTargetOnPaint::getZone() 
{
	CdDcdZoneXy	xyzoneRv ;
	RECT	LRect ;
	GetClientRect( m_hWnd , &LRect ) ;
	xyzoneRv.setX( CdDcdZone( LRect.left , LRect.right - LRect.left ) )
			.setY( CdDcdZone( LRect.top , LRect.bottom - LRect.top ) ) ;
	return ( xyzoneRv ) ;
}
Exemple #3
0
	// ********************************
	//@name 操作
	// ********************************
bool CaDcdGrid_PageSelector::DcDraw() 
{
	bool bRv = 0 ;
	
	
	int iXColumnNumberTail = m_pCDcdGrid->getXColumnCount() - 1 ;
	if ( m_iXPage < (int)m_contiXFixafterColumnNumber.size() - 1 ){
		iXColumnNumberTail = m_contiXFixafterColumnNumber[ m_iXPage + 1 ] - 1 ;
	}
	int iYColumnNumberTail = m_pCDcdGrid->getYColumnCount() - 1 ;
	if ( m_iYPage < (int)m_contiYFixafterColumnNumber.size() - 1 ){
		iYColumnNumberTail = m_contiYFixafterColumnNumber[ m_iYPage + 1 ] - 1 ;
	}
	//iXColumnNumberTail =
	//	完全に表示できている最も右の列番号
	//iYColumnNUmberTail = 
	//	完全に表示できている最も下の列番号
	
	CdDcdZone	zoneXColumnNumberTail ; 
	CdDcdZone	zoneYColumnNumberTail ; 
	zoneXColumnNumberTail = 
		m_pCDcdGrid->getXColumnBorderZone( m_pIfDcdTarget , iXColumnNumberTail ) ;
	zoneYColumnNumberTail = 
		m_pCDcdGrid->getYColumnBorderZone( m_pIfDcdTarget , iYColumnNumberTail ) ;
	//zoneXColumnNumberTail = 完全に表示できている最も右の列の罫線位置
	//zoneYColumnNumberTail = 完全に表示できている最も下の列の罫線位置
	
	CdDcdZoneXy	zonexyClip = m_pIfDcdTarget->getZone() ;
	{
		CdDcdZone	zoneClip = zonexyClip.getX() ;
		zoneClip.setSize( 
			zoneXColumnNumberTail.getEndPos() - zoneClip.getPos() ) ;
		zonexyClip.setX( zoneClip ) ;
	}
	{
		CdDcdZone	zoneClip = zonexyClip.getY() ;
		zoneClip.setSize( 
			zoneYColumnNumberTail.getEndPos() - zoneClip.getPos() ) ;
		zonexyClip.setY( zoneClip ) ;
	}
	//zonexyClip = クリッピング領域とします。
	
	CaDcdTargetClip	aCaDcdTargetClip( m_pIfDcdTarget , zonexyClip ) ;
	aCaDcdTargetClip.validate() ;
	bRv = m_pCDcdGrid->DcDraw( &aCaDcdTargetClip ) ;
	
	return ( bRv ) ;
};
Exemple #4
0
// ********************************
//	IfDcDraw
// ********************************
bool CDcdFillrect::DcDraw( IfDcdTarget* pIfDcdTarget ) 
{
	int		iRv = 0 ;
	bool	bRv = false ;
	
	// --------------------------------
	//	ブラシの生成
	// --------------------------------
	Ou<CGdiHBrushHolder>	pCGdiHBrushHolder ;
	if ( iRv >= 0 ){
		pCGdiHBrushHolder = pIfDcdTarget->createGdiHBrushHolder( m_CdBrushProp ) ;
		if ( pCGdiHBrushHolder == NULL ){
			iRv = -1 ;	//	ペンの作成に失敗しました。
		}
	}
	HBRUSH		hBrushSid = NULL ;
	if ( iRv >= 0 ){
		hBrushSid = (HBRUSH)SelectObject( pIfDcdTarget->getHdc() , pCGdiHBrushHolder->getHBrush() ) ;
	}

	// --------------------------------
	//	描画
	// --------------------------------
	if ( iRv >= 0 ){
		CdDcdZoneXy	aCdDcdZoneXy = pIfDcdTarget->getZone() ;
		RECT	LRect ;
		LRect.left   = aCdDcdZoneXy.getX().getPos() ;
		LRect.top    = aCdDcdZoneXy.getY().getPos() ;
		LRect.right  = aCdDcdZoneXy.getX().getEndPos() ;
		LRect.bottom = aCdDcdZoneXy.getY().getEndPos() ;
		
		FillRect( pIfDcdTarget->getHdc() , &LRect , pCGdiHBrushHolder->getHBrush() ) ;
		
	}
	if ( iRv >= 0 ){
		bRv = true ;
	}
	// --------------------------------
	if ( hBrushSid != NULL )
	{
		SelectObject( pIfDcdTarget->getHdc() , hBrushSid ) ;
		hBrushSid = NULL ;
	}
	return ( bRv ) ;
}
Exemple #5
0
// ********************************
//	IfDcDraw
// ********************************
bool CDcdRectangle::DcDraw( IfDcdTarget* pIfDcdTarget ) 
{
	int		iRv = 0 ;
	bool	bRv = false ;
	

	// --------------------------------
	//	ペン・ブラシの生成
	// --------------------------------
	Ou<CGdiHPenHolder>	pHPenHolder  ;
	if ( iRv >= 0 ){
		pHPenHolder = pIfDcdTarget->createGdiHPenHolder( m_CdPenProp ) ;
		if ( pHPenHolder == NULL ){
			iRv = -1 ;	//	ペンの作成に失敗しました。
		}
	}
	Ou<CGdiHBrushHolder>	pHBrushHolder ;
	if ( iRv >= 0 ){
		pHBrushHolder = pIfDcdTarget->createGdiHBrushHolder( m_CdBrushProp ) ;
		if ( pHBrushHolder == NULL ){
			iRv = -2 ;	//	ブラシの作成に失敗しました。
		}
	}
	HBRUSH		hBrushSid = NULL ;
	if ( iRv >= 0 ){
		hBrushSid = (HBRUSH)SelectObject( pIfDcdTarget->getHdc() , pHBrushHolder->getHBrush() ) ;
	}
	HPEN		hPenSid = NULL ;
	if ( iRv >= 0 ){
		hPenSid = (HPEN)SelectObject( pIfDcdTarget->getHdc() , pHPenHolder->getHPen() ) ;
	}
	int iBkModeSid = -1 ;
	if ( iRv >= 0 ){
		 iBkModeSid = SetBkMode( pIfDcdTarget->getHdc() , TRANSPARENT ) ;
	}
	// --------------------------------
	//	描画
	// --------------------------------
	if ( iRv >= 0 ){
		CdDcdZoneXy	aCdDcdZoneXy = pIfDcdTarget->getZone() ;
		RECT	LRect ;
		LRect.left   = aCdDcdZoneXy.getX().getPos() + 
					m_CdPenProp.getLogicalunitWidth() / 2 ;
		LRect.top    = aCdDcdZoneXy.getY().getPos() +
					m_CdPenProp.getLogicalunitWidth() / 2 ;
		LRect.right  = aCdDcdZoneXy.getX().getEndPos() -
					m_CdPenProp.getLogicalunitWidth() / 2 ;
		LRect.bottom = aCdDcdZoneXy.getY().getEndPos() -
					m_CdPenProp.getLogicalunitWidth() / 2 ;
		
		Rectangle( pIfDcdTarget->getHdc() , 
			LRect.left , LRect.top , LRect.right , LRect.bottom ) ;
		
	}
	if ( iRv >= 0 ){
		bRv = true ;
	}
	// --------------------------------
	if ( iBkModeSid != -1 ) {
		SetBkMode( pIfDcdTarget->getHdc() , iBkModeSid ) ;
	}
	if ( hBrushSid != NULL ){
		SelectObject( pIfDcdTarget->getHdc() , hBrushSid ) ;
		hBrushSid = NULL ;
	}
	if ( hPenSid != NULL ){
		SelectObject( pIfDcdTarget->getHdc() , hPenSid ) ;
		hPenSid = NULL ;
	}
	return ( bRv ) ;
}
Exemple #6
0
void CEkiView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
{
	LogMsg( L"CEkiView::OnPrint() " ) ;
	LogMsg( CDcdTargetMfcPrintInfo::stringOf( pInfo ).c_str() ) ;

	// --------------------------------
	//	描画面を作成
	// --------------------------------
	CDcdTargetMfcPrintInfo	aCDcdTargetMfcPrintInfo( pDC, pInfo ) ;

	// --------------------------------
	//	余白を除いた領域を作成
	// --------------------------------
	CaDcdTargetItemPosition	aTargetInnerMargin( &aCDcdTargetMfcPrintInfo , 
		CdDcdZoneXy() ) ;
	{
		LogMsg( DeviceCapsToString( 
			aCDcdTargetMfcPrintInfo.getPrinterHdc() ).c_str() ) ;
	
		CconvCdPrintPageProp aCconvCdPrintPageProp ;
		CdDcdZoneXy	zonexyInneraMargin = 
			aCconvCdPrintPageProp.calcZoneInnerMargin( 
				getCDiagramEditApp()->getCdPrintPageProp() , 
				aCDcdTargetMfcPrintInfo.getPrinterHdc() ) ;
		if ( zonexyInneraMargin.getX().getSize() <= 0 ){
			zonexyInneraMargin.setX( 
				aCDcdTargetMfcPrintInfo.getZone().getX() ) ;
		}
		if ( zonexyInneraMargin.getY().getSize() <= 0 ){
			zonexyInneraMargin.setY( 
				aCDcdTargetMfcPrintInfo.getZone().getY() ) ;
		}

		aTargetInnerMargin.setZone( zonexyInneraMargin ) ;

	}

	//aTargetInnerMargin = 余白部分を除いた描画領域。
	//	単位はプリンタのピクセルです。

	// --------------------------------
	//	論理座標を設定
	// --------------------------------
	CaDcdTargetZoomDisplay	aCaDcdTargetZoomDisplay( 
		&aTargetInnerMargin , 
		aCDcdTargetMfcPrintInfo.getPrinterHdc() ) ;
	//aCaDcdTargetZoomDisplay = 余白部分を除いた描画領域。
	//	単位は、画面上の1ピクセル相当になりました。

	// --------------------------------
	//	キャプションとページ番号の部品を作成
	// --------------------------------
	Ou<CDcdText>	pdcdCaption ;
	Ou<CDcdText>	pdcdPage ;
	{
		const CentDedRosen* pCentDedRosen = 
			getCDiagramEditDoc()->getCDedRosenFileData()->getCentDedRosen() ;
		CJikokuhyouDoc* pCJikokuhyouDoc = (CJikokuhyouDoc*)GetDocument() ;

		wstring	strText ;
		//	路線名
		if ( !pCentDedRosen->getName().empty() ){
			strText += pCentDedRosen->getName() ;
			strText += L" " ;

			CString	aString ;
			aString.LoadString( IDS_WORD_EKI ) ;
			strText += (LPCTSTR)aString ;
		}
		pdcdCaption = OuNew<CDcdText>( new CDcdText( 
			strText , getCdDrawTextPropStandard() ) ) ;
	}
	// --------------------------------
	{
		CdDrawTextProp	aProp = getCdDrawTextPropStandard() ;
		CdDrawTextFormat	aFormat = aProp.getCdDrawTextFormat() ;
		aFormat.setHorizontal( aFormat.H_CENTER ) ;
		aProp.setCdDrawTextFormat( aFormat ) ;
		pdcdPage = OuNew<CDcdText>( new CDcdText( L"" ,aProp , L"99" ) ) ;
	}

	// --------------------------------
	//	キャプションとページ番号の部品・
	//	グリッドのレイアウトを決める	
	// --------------------------------
	Ou<IfDcdTarget>	pTargetCaption ;
	Ou<IfDcdTarget>	pTargetGrid ;
	Ou<IfDcdTarget>	pTargetPage ;
	{
		CdDcdZoneXy	zoneGrid = aCaDcdTargetZoomDisplay.getZone() ;
		CdDcdSizeXy	aSize ;

		pdcdCaption->getItemSize( &aCaDcdTargetZoomDisplay , &aSize ) ;
		CdDcdZoneXy zoneCaption( zoneGrid.getX() , 
			CdDcdZone( zoneGrid.getY().getPos() , aSize.getY() ) ) ;
		zoneGrid.setY( CdDcdZone().setBeginEndPos( 
			zoneCaption.getY().getEndPos() , zoneGrid.getY().getEndPos() ) ) ;
		//zoneCaption = 全領域の上部を、キャプション用に割り当てています。
		//zoneGrid = 全領域から、上部のキャプション領域を除いた領域です。

		pdcdPage->getItemSize( &aCaDcdTargetZoomDisplay , &aSize ) ;
		CdDcdZoneXy zonePage( zoneGrid.getX() , 
			CdDcdZone( zoneGrid.getY().getEndPos() - aSize.getY() , aSize.getY() ) ) ;
		zoneGrid.setY( CdDcdZone().setBeginEndPos( 
			zoneCaption.getY().getEndPos() , zonePage.getY().getPos() ) ) ;
		//zonePage = 全領域の下部を、ページ用に割り当てています。
		//zoneGrid = 上部のキャプションに続いて、下部のページ領域も除いた領域です。


		pTargetCaption = OuNew<CaDcdTargetItemPosition>( 
			new CaDcdTargetItemPosition( &aCaDcdTargetZoomDisplay , zoneCaption ) ) ;
		pTargetGrid = OuNew<CaDcdTargetItemPosition>( 
			new CaDcdTargetItemPosition( &aCaDcdTargetZoomDisplay , zoneGrid ) ) ;
		pTargetPage = OuNew<CaDcdTargetItemPosition>(
			new CaDcdTargetItemPosition( &aCaDcdTargetZoomDisplay , zonePage ) ) ;
	}
	// --------------------------------
	//	グリッドを描画
	// --------------------------------
	int iPage = 0 ;
	{
		CDcdGrid*	pCDcdGrid = m_pCWndDcdGrid->getCXDcdGrid() ;
		CaDcdGrid_PageSelector	aCaDcdGrid_PageSelector( pCDcdGrid , pTargetGrid ) ;
		aCaDcdGrid_PageSelector.setPage( pInfo->m_nCurPage - 1 ) ;
		aCaDcdGrid_PageSelector.DcDraw() ;

		if ( (int)pInfo->m_nCurPage >= aCaDcdGrid_PageSelector.getPageCount() ){
			//最終ページを印刷したら、印刷ループを終わります。
			//OnPrint() で 
			//pInfo->SetMaxPage( aCaDcdGrid_PageSelector.getPageCount() ) ;
			//	をしても効果はありません。

			pInfo->m_bContinuePrinting = false ;
		}	else	{
			pInfo->m_bContinuePrinting = true ;
		}
		
		iPage = aCaDcdGrid_PageSelector.getPage() ;
	}
	// --------------------------------
	//	キャプションとページ番号のテキストを作成
	// --------------------------------
	{
		//ページ番号を決定
		{
			wstring	strPage = wstringOf( iPage + 1) ;
			pdcdPage->setText( strPage ) ;
		}
	}
	// --------------------------------
	//	キャプションとページ番号を描画
	// --------------------------------
	{
			pdcdCaption->DcDraw( pTargetCaption ) ;
			pdcdPage->DcDraw( pTargetPage ) ;
	}
}
Exemple #7
0
// ********************************
//@name IfDcDraw
// ********************************
bool CDcdDiagram::DcDraw( IfDcdTarget* pIfDcdTarget ) 
{
	bool bRv = false ;

	CdDcdFreeLineProp	linepropDot( 1 , m_colorDiaJikuColor , LINESTYLE_DOT2 ) ;
	CdDcdFreeLineProp	linepropNormal( 1 , m_colorDiaJikuColor ) ;
	CdDcdFreeLineProp	linepropBold( 2 , m_colorDiaJikuColor ) ;

	// --------------------------------
	//	DcdTargetの領域に
	//	クリッピングを行います。			
	// --------------------------------
	CaDcdTargetClip*	pTargetClip = NULL ;
	{
		CdDcdZoneXy	zonexyCentDedDgrDia = getCentDedDgrDia()->getZone() ;
		//zonexyCentDedDgrDia = ダイヤグラムの範囲を、
		//	『ダイヤグラムエンティティ座標系』で保持します。
		//	X座標は24時間分、Y座標は起点から終点までを表します。
		
		CdDcdZoneXy	zonexyDcd_CentDedDgrDia = 
			DgrToDcd( pIfDcdTarget , zonexyCentDedDgrDia ) ;
		//zonexyDcd_CentDedDgrDia = 
		//	ダイヤグラムの範囲を、『DcDraw座標系』で保持します。
		//	但し、この値をクリップ領域にすると、
		//	EndPosはクリップ領域に含まれません。
		zonexyDcd_CentDedDgrDia.setX( 
			CdDcdZone( 
				zonexyDcd_CentDedDgrDia.getX().getPos() ,
				zonexyDcd_CentDedDgrDia.getX().getSize() 
					+ DIAGRAM_SIZE_MARGIN_DCD ) ) ;
		zonexyDcd_CentDedDgrDia.setY( 
			CdDcdZone( 
				zonexyDcd_CentDedDgrDia.getY().getPos() ,
				zonexyDcd_CentDedDgrDia.getY().getSize() 
					+ DIAGRAM_SIZE_MARGIN_DCD ) ) ;
		//zonexyDcd_CentDedDgrDia = ダイヤグラムの範囲を
		//	『DcDraw座標系』で保持します。
		
		//クリップ領域は、
		//	IfDcdTargetの領域と
		//	ダイヤグラムの範囲の交差領域です。
		CdDcdZoneXy	zonexyClip = 
			pIfDcdTarget->getZone().CrossZone( zonexyDcd_CentDedDgrDia ) ;

		pTargetClip = new CaDcdTargetClip( pIfDcdTarget , zonexyClip ) ;
		pTargetClip->validate() ;
	}
	// --------------------------------
	//	描画を行う領域の計算	
	// --------------------------------
	CdDcdZoneXy	zonexyCentDedDgrDia = m_pCentDedDgrDia->getZone() ;
	//zonexyCentDedDgrDia = ダイヤグラムの範囲を、
	//	『ダイヤグラムエンティティ座標系』で保持します。
	//	X座標は24時間分、Y座標は起点から終点までを表します。
	// --------------------------------
	//	縦罫線を描画します。
	// --------------------------------
	{

		//	縦罫線は、ダイヤグラム起点時刻の次の、縦罫線描画時刻から開始
		//	(4:01で2分目なら4:02、1分目なら4:01、10分目なら4:10)
		DcdPos posDgrXVlineOrg = zonexyCentDedDgrDia.getX().getPos() ;
		{
			int iMod = zonexyCentDedDgrDia.getX().getPos() % getVlinePitch() ; 
			if ( iMod > 0 )
			{
				posDgrXVlineOrg += getVlinePitch()  - iMod ;
			}
		}
		//posDgrXVlineOrg = 時刻表示の開始位置
		//	ダイヤグラム起点時刻の次の正時から開始(4:59なら5:00、5:00なら5:00)

		for ( DcdPos posDgrX = posDgrXVlineOrg ; 
				posDgrX <= zonexyCentDedDgrDia.getX().getEndPos() ; 
				posDgrX += getVlinePitch() )
		{
			//posDgrX = ダイヤグラムエンティティ座標での、
			//	縦罫線の位置
			CDcdFreeLine	aCDcdFreeLine ;
			if ( posDgrX % getVlineBoldPitch() == 0 )
			{
				aCDcdFreeLine.setCdLineProp( linepropBold ) ;
			}
			else if ( posDgrX % getVlineMiddlePitch() == 0 )
			{
				aCDcdFreeLine.setCdLineProp( linepropNormal ) ;
			}
			else
			{
				aCDcdFreeLine.setCdLineProp( linepropDot ) ;
			}
			//	座標を、Dgr→Dcdに変換
			DcdPos posDcdX = XDgrToDcd( pTargetClip , posDgrX ) ;
			CdDcdZone	zoneDcdY = 
				YDgrToDcd( pTargetClip , zonexyCentDedDgrDia.getY() ) ;
			if ( pTargetClip->getZone().getX().getPos() - 1 <= posDcdX &&
				posDcdX < pTargetClip->getZone().getX().getEndPos() + 1 )
			{
				aCDcdFreeLine.setOrg( CdDcdPosXy( 
					posDcdX , 
					zoneDcdY.getPos() ) ) ;
				aCDcdFreeLine.setDst( CdDcdPosXy( 
					posDcdX , 
					zoneDcdY.getEndPos() ) ) ;
				aCDcdFreeLine.DcDraw( pTargetClip ) ;

				bRv = true ;
			}
		}
	}
	// --------------------------------
	//	横罫線を描画します。
	// --------------------------------
	{
		const Mu<CentDedDgrEki>* pCentDedDgrEkiCont = 
			m_pCentDedDgrDia->getCentDedDgrEkiCont() ;
		for ( int iEkiIndex = 0 ; 
				iEkiIndex < pCentDedDgrEkiCont->size() ; 
				iEkiIndex ++ )
		{
			CentDedDgrEki	aCentDedDgrEki = 
				pCentDedDgrEkiCont->get( iEkiIndex ) ;
			DcdPos posDgrY = m_pCentDedDgrDia->getDgrYPosOfEki( iEkiIndex ) ;
			CDcdFreeLine	aCDcdFreeLine ;
			if ( aCentDedDgrEki.getIsSyuyoueki() )
			{
				aCDcdFreeLine.setCdLineProp( linepropBold ) ;
			}
			else
			{
				aCDcdFreeLine.setCdLineProp( linepropNormal ) ;
			}
			//	座標を、Dgr→Dcdに変換
			DcdPos	posDcdY = YDgrToDcd( pTargetClip , posDgrY ) ;
			CdDcdZone	zoneDcdX = 
				XDgrToDcd( pTargetClip , zonexyCentDedDgrDia.getX() ) ;
			if ( pTargetClip->getZone().getY().getPos() - 1 <= posDcdY &&
				 posDcdY < pTargetClip->getZone().getY().getEndPos() + 1 )
			{
				aCDcdFreeLine.setOrg( CdDcdPosXy( 
					zoneDcdX.getPos() , 
					posDcdY ) ) ;
				aCDcdFreeLine.setDst( CdDcdPosXy( 
					zoneDcdX.getEndPos() , 
					posDcdY ) ) ;
				aCDcdFreeLine.DcDraw( pTargetClip ) ;
			}
		}
		
		
	}
	// --------------------------------
	//	列車線を描画します。
	// --------------------------------
	{
		CRessyasenDraw	aCRessyasenDraw( this , pTargetClip , 
			m_bDisplayRessyasenKudari , m_bDisplayRessyasenNobori ) ;
		aCRessyasenDraw.execute() ;
	}
	// --------------------------------
	//	列車情報を描画します。
	// --------------------------------
	{
		CRessyajouhouDraw	aCRessyajouhouDraw( this , pTargetClip ,
			m_bDisplayRessyasenKudari , m_bDisplayRessyasenNobori ) ;
		aCRessyajouhouDraw.execute() ;
	}

	// --------------------------------
	//	停車記号を描画します。
	// --------------------------------
	{
		CDcdDiagram_CStopMarkDraw	aCDcdDiagram_CStopMarkDraw( 
			this , pTargetClip ,
			m_bDisplayRessyasenKudari , m_bDisplayRessyasenNobori ) ;
		aCDcdDiagram_CStopMarkDraw.execute() ;
	}
	// --------------------------------
	if ( pTargetClip != NULL )
	{
		delete pTargetClip ;
		pTargetClip = NULL ;
	}
	return ( bRv ) ;
}