当前位置: 首页>>代码示例>>C++>>正文


C++ CLayout::GetPrevLayout方法代码示例

本文整理汇总了C++中CLayout::GetPrevLayout方法的典型用法代码示例。如果您正苦于以下问题:C++ CLayout::GetPrevLayout方法的具体用法?C++ CLayout::GetPrevLayout怎么用?C++ CLayout::GetPrevLayout使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CLayout的用法示例。


在下文中一共展示了CLayout::GetPrevLayout方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: ReplaceData_CLayoutMgr

/* 文字列置換 */
void CLayoutMgr::ReplaceData_CLayoutMgr(
	LayoutReplaceArg*	pArg
)
{
	CLayoutInt	nWork_nLines = m_nLines;	//変更前の全行数の保存	@@@ 2002.04.19 MIK

	/* 置換先頭位置のレイアウト情報 */
	EColorIndexType	nCurrentLineType = COLORIDX_DEFAULT;
	CLayoutColorInfo*	colorInfo = NULL;
	CLayoutInt		nLineWork = pArg->sDelRange.GetFrom().GetY2();

	CLayout*		pLayoutWork = SearchLineByLayoutY( pArg->sDelRange.GetFrom().GetY2() );
	if( pLayoutWork ){
		while( 0 != pLayoutWork->GetLogicOffset() ){
			pLayoutWork = pLayoutWork->GetPrevLayout();
			nLineWork--;
		}
		nCurrentLineType = pLayoutWork->GetColorTypePrev();
		colorInfo = pLayoutWork->GetLayoutExInfo()->DetachColorInfo();
	}else if( GetLineCount() == pArg->sDelRange.GetFrom().GetY2() ){
		// 2012.01.05 最終行のRedo/Undoでの色分けが正しくないのを修正
		nCurrentLineType = m_nLineTypeBot;
		colorInfo = m_cLayoutExInfoBot.DetachColorInfo();
	}


	/*
	||  カーソル位置変換
	||  レイアウト位置(行頭からの表示桁位置、折り返しあり行位置) →
	||  物理位置(行頭からのバイト数、折り返し無し行位置)
	*/
	CLogicPoint ptFrom;
	CLogicPoint ptTo;
	LayoutToLogic( pArg->sDelRange.GetFrom(), &ptFrom );
	LayoutToLogic( pArg->sDelRange.GetTo(), &ptTo );

	/* 指定範囲のデータを置換(削除 & データを挿入)
	  Fromを含む位置からToの直前を含むデータを削除する
	  Fromの位置へテキストを挿入する
	*/
	DocLineReplaceArg DLRArg;
	DLRArg.sDelRange.SetFrom(ptFrom);	//削除範囲from
	DLRArg.sDelRange.SetTo(ptTo);		//削除範囲to
	DLRArg.pcmemDeleted = pArg->pcmemDeleted;	// 削除されたデータを保存
	DLRArg.pInsData = pArg->pInsData;			// 挿入するデータ
	DLRArg.nDelSeq = pArg->nDelSeq;
	CSearchAgent(m_pcDocLineMgr).ReplaceData(
		&DLRArg
	);
	pArg->nInsSeq = DLRArg.nInsSeq;


	/*--- 変更された行のレイアウト情報を再生成 ---*/
	/* 論理行の指定範囲に該当するレイアウト情報を削除して */
	/* 削除した範囲の直前のレイアウト情報のポインタを返す */

	CLayoutInt	nModifyLayoutLinesOld = CLayoutInt(0);
	CLayout* pLayoutPrev;
	CLogicInt nWork;
	nWork = t_max( DLRArg.nDeletedLineNum, DLRArg.nInsLineNum );


	if( pLayoutWork ){
		pLayoutPrev = DeleteLayoutAsLogical(
			pLayoutWork,
			nLineWork,
			ptFrom.GetY2(),
			ptFrom.GetY2() + nWork,
			ptFrom,
			&nModifyLayoutLinesOld
		);

		/* 指定行より後の行のレイアウト情報について、論理行番号を指定行数だけシフトする */
		/* 論理行が削除された場合は0より小さい行数 */
		/* 論理行が挿入された場合は0より大きい行数 */
		if( 0 != DLRArg.nInsLineNum - DLRArg.nDeletedLineNum ){
			ShiftLogicalLineNum(
				pLayoutPrev,
				DLRArg.nInsLineNum - DLRArg.nDeletedLineNum
			);
		}
	}else{
		pLayoutPrev = m_pLayoutBot;
	}

	/* 指定レイアウト行に対応する論理行の次の論理行から指定論理行数だけ再レイアウトする */
	CLogicInt	nRowNum;
	if( NULL == pLayoutPrev ){
		if( NULL == m_pLayoutTop ){
			nRowNum = m_pcDocLineMgr->GetLineCount();
		}else{
			nRowNum = m_pLayoutTop->GetLogicLineNo();
		}
	}
	else{
		if( NULL == pLayoutPrev->GetNextLayout() ){
			nRowNum =
				m_pcDocLineMgr->GetLineCount() -
				pLayoutPrev->GetLogicLineNo() - CLogicInt(1);
//.........这里部分代码省略.........
开发者ID:daisukekoba,项目名称:sakura-editor-trunk2,代码行数:101,代码来源:CLayoutMgr_New2.cpp


注:本文中的CLayout::GetPrevLayout方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。