本文整理汇总了C++中CObList::GetAt方法的典型用法代码示例。如果您正苦于以下问题:C++ CObList::GetAt方法的具体用法?C++ CObList::GetAt怎么用?C++ CObList::GetAt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CObList
的用法示例。
在下文中一共展示了CObList::GetAt方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoUpdateOffsets
//************************************************************************************
void CBCGPOutlineParser::DoUpdateOffsets (const CString& strBuffer,
const int nStartOffset, const int nEndOffset,
CObList& lstBlocks)
{
// Update name offsets, start offsets and end offsets:
CBCGPOutlineNode* pPreviousNode = NULL;
CObList lstIgnoreBlocks;
for (POSITION pos = lstBlocks.GetHeadPosition (); pos != NULL; )
{
CBCGPOutlineNode* pNode = (CBCGPOutlineNode*) lstBlocks.GetNext (pos);
ASSERT_VALID (pNode);
const BlockType* pBlockType = GetBlockType (pNode->m_nBlockType);
if (pBlockType != NULL && !pBlockType->m_bIgnore)
{
// --------------------------------------
// Update name offsets and start offsets:
// --------------------------------------
CString strName;
int nSearchTo = nStartOffset;
if (pPreviousNode != NULL &&
pPreviousNode->m_nEnd < pNode->m_nStart &&
pPreviousNode->m_nEnd > nStartOffset)
{
nSearchTo = pPreviousNode->m_nEnd;
}
pNode->m_nNameOffset = GetNameOffset (strBuffer, pNode->m_nStart, nSearchTo,
pBlockType, lstIgnoreBlocks, strName);
int nNewStart = GetStartOffset (strBuffer, pNode->m_nStart, pNode->m_nStart - pNode->m_nNameOffset, lstIgnoreBlocks);
ASSERT (nNewStart >= nSearchTo);
int nDelta = nNewStart - pNode->m_nStart;
pNode->m_nNameOffset += nDelta;
pNode->m_nStart = nNewStart;
// strName = strName.Left (strName.GetLength () + nDelta);
// pNode->m_strName = strName;
// -------------------
// Update end offsets:
// -------------------
nSearchTo = nEndOffset;
if (pos != NULL)
{
CBCGPOutlineNode* pNextNode = (CBCGPOutlineNode*) lstBlocks.GetAt (pos);
ASSERT_VALID (pNextNode);
if (pNextNode->m_nStart > pNode->m_nEnd &&
pNextNode->m_nStart < nEndOffset)
{
nSearchTo = pNextNode->m_nStart;
}
}
int nNewEnd = GetEndOffset (strBuffer, pNode->m_nEnd, nSearchTo);
ASSERT (nNewEnd <= nSearchTo);
pNode->m_nEnd = nNewEnd;
pPreviousNode = pNode;
lstIgnoreBlocks.AddTail (pNode);
}
else
{
lstIgnoreBlocks.AddTail (pNode);
}
}
}
示例2: PositionInSpcList
//.........这里部分代码省略.........
#ifdef _DEBUG_WNDPOS
TRACE("No insert position found\n");
#endif
return; // ignore this for now
}
ASSERT(MinListPos != NULL && nMinX < 0xffff);
// work out the new position for the window
// Might want to delay window positioning in future
CPoint WndPt;
WndPt.x = ((dwOrient & CBRS_ARRANGE_LEFT) ? nMinX : ParentSize.cx - nMinX - WndSize.cx);
WndPt.y = ((dwOrient & CBRS_ARRANGE_TOP) ? nMinY : ParentSize.cy - nMinY - WndSize.cy);
ASSERT(WndPt.y >= -1);
#ifdef _DEBUG_WNDPOS
TRACE("Positioning at: (%d, %d) nMinY=%d, nMinX=%d\n", WndPt.x, WndPt.y, nMinY, nMinX);
#endif
// if not child of requested window, convert co-ords to Screen
if ((pWnd->GetStyle() & WS_POPUP) || pWnd->GetParent() != pParentWnd)
pParentWnd->ClientToScreen(&WndPt);
CRect rcWnd;
pWnd->GetWindowRect(rcWnd);
// attempt to optimize by only moving windows that have changed position...
if (rcWnd.TopLeft() != WndPt || rcWnd.Size() != WndSize)
{
if (hDwp == NULL)
pWnd->SetWindowPos(NULL, WndPt.x, WndPt.y, WndSize.cx, WndSize.cy,
SWP_NOSIZE | SWP_NOZORDER);
else
::DeferWindowPos(hDwp, pWnd->m_hWnd, NULL, WndPt.x, WndPt.y, WndSize.cx, WndSize.cy,
SWP_NOSIZE | SWP_NOZORDER);
}
// now update the SpcList.
nHtLeft = nHt;
ASSERT(nHt > 0);
pos = MinListPos;
ASSERT(MinListPos != NULL); // can't actually happen
CWndSpaceElt * pSpcElt;
POSITION InsertPos = NULL;
while (pos != NULL)
{
POSITION Oldpos = pos;
pSpcElt = (CWndSpaceElt *) SpcList.GetNext(pos);
ASSERT_VALID(pSpcElt);
if (pSpcElt->ht > nHtLeft)
{
pSpcElt->ht -= nHtLeft;
nHtLeft = 0;
InsertPos = Oldpos; // position to insert before
break;
}
nHtLeft -= pSpcElt->ht;
CWndSpaceElt * pOldElt = (CWndSpaceElt *)SpcList.GetAt(Oldpos);
ASSERT(pOldElt != NULL && pOldElt->IsKindOf(RUNTIME_CLASS(CWndSpaceElt)));
SpcList.RemoveAt(Oldpos); // remove that element
ASSERT(pSpcElt != NULL && pSpcElt->IsKindOf(RUNTIME_CLASS(CWndSpaceElt)));
delete pOldElt;
}
ASSERT(nHtLeft == 0);
// should now be looking at the element we need to shrink...
// NB: If pos = NULL then we removed to the end of the list...
pSpcElt = new CWndSpaceElt;
pSpcElt->wd = nMinX + nWd;
pSpcElt->ht = nHt;
if (InsertPos == NULL)
SpcList.AddTail(pSpcElt);
else
SpcList.InsertBefore(InsertPos, pSpcElt);
#ifdef _DEBUG
#ifdef _DEBUG_WNDPOS
TRACE("After insert:\n");
#endif
pos = SpcList.GetHeadPosition();
int nTotalHeightAfter = 0;
while (pos != NULL)
{
CWndSpaceElt * pSpcElt = (CWndSpaceElt *)SpcList.GetNext(pos);
ASSERT(pSpcElt != NULL);
ASSERT_VALID(pSpcElt);
nTotalHeightAfter += pSpcElt->ht;
#ifdef _DEBUG_WNDPOS
TRACE(" ht= %d w=%d\n", pSpcElt->ht, pSpcElt->wd);
#endif
}
ASSERT(nTotalHeightAfter == ParentSize.cy);
ASSERT(nTotalHeightBefore == nTotalHeightAfter);
#endif
}