本文整理汇总了C++中CLayout::GetLayoutExInfo方法的典型用法代码示例。如果您正苦于以下问题:C++ CLayout::GetLayoutExInfo方法的具体用法?C++ CLayout::GetLayoutExInfo怎么用?C++ CLayout::GetLayoutExInfo使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CLayout
的用法示例。
在下文中一共展示了CLayout::GetLayoutExInfo方法的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);
//.........这里部分代码省略.........