📄 pages.cpp
字号:
* None
*/
void CPages::RectSet(LPRECT pRect, BOOL fNotify)
{
UINT cx, cy;
if (NULL==pRect)
return;
cx=pRect->right-pRect->left;
cy=pRect->bottom-pRect->top;
SetWindowPos(m_hWnd, NULL, pRect->left, pRect->top
, (UINT)cx, (UINT)cy, SWP_NOZORDER);
UpdateScrollRanges();
return;
}
/*
* CPages::SizeGet
*
* Purpose:
* Retrieves the size of the pages window in parent coordinates.
*
* Parameters:
* pRect LPRECT in which to return the size. The right
* and bottom fields will contain the dimensions.
*
* Return Value:
* None
*/
void CPages::SizeGet(LPRECT pRect)
{
RectGet(pRect);
return;
}
/*
* CPages::SizeSet
*
* Purpose:
* Sets a new size in parent coordinates for the Pages window.
*
* Parameters:
* pRect LPRECT containing the new rectangle.
* fNotify BOOL indicating if we're to notify anyone of
* the change.
*
* Return Value:
* None
*/
void CPages::SizeSet(LPRECT pRect, BOOL fNotify)
{
UINT cx, cy;
if (NULL==pRect)
return;
cx=pRect->right-pRect->left;
cy=pRect->bottom-pRect->top;
SetWindowPos(m_hWnd, NULL, 0, 0, (UINT)cx, (UINT)cy
, SWP_NOMOVE | SWP_NOZORDER);
UpdateScrollRanges();
return;
}
/*
* CPages::ActivePage
*
* Purpose:
* Returns a CPage pointer to the current page.
*
* Parameters:
* None
*
* Return Value:
* PCPage Pointer to the current page.
*/
PCPage CPages::ActivePage(void)
{
PCPage pPage;
BOOL fRet;
fRet=PageGet(m_iPageCur, &pPage, FALSE);
return fRet ? pPage : NULL;
}
/*
* CPages::PageInsert
*
* Purpose:
* Creates a new page immediately after the current page. If
* there are no pages then this creates page 1.
*
* Parameters:
* uReserved UINT unused
*
* Return Value:
* UINT Index of the new page, 0 on failure.
*/
UINT CPages::PageInsert(UINT uReserved)
{
//CHAPTER7MOD
PCPage pPage;
if (0!=m_cPages)
{
//Close the current page, committing changes.
if (!PageGet(m_iPageCur, &pPage, FALSE))
return 0;
pPage->Close(TRUE);
}
//End CHAPTER7MOD
//Create and open the new page.
if (!PageAdd(m_iPageCur, m_dwIDNext, TRUE))
return 0;
m_dwIDNext++;
m_iPageCur++;
m_cPages++;
InvalidateRect(m_hWnd, NULL, FALSE);
UpdateWindow(m_hWnd);
return m_iPageCur;
}
/*
* CPages::PageDelete
*
* Removes the current page from the page list.
*
* Parameters:
* uReserved UINT unused
*
* Return Value:
* UINT Index to the now current page from the page
* list, NOVALUE on error.
*/
UINT CPages::PageDelete(UINT uReserved)
{
PCPage pPage;
if (!PageGet(m_iPageCur, &pPage, FALSE))
return NOVALUE;
//Delete the page in storage, memory, and the listbox.
SendMessage(m_hWndPageList, LB_DELETESTRING, m_iPageCur, 0L);
//CHAPTER7MOD
pPage->Destroy(m_pIStorage);
//End CHAPTER7MOD
delete pPage; //Does final pPage->Close
/*
* If this is the last page then the current is one less. If
* it's the only page the current is zero. Otherwise the
* current is the next page.
*/
if (m_iPageCur==m_cPages-1) //Covers last or only page.
m_iPageCur--;
m_cPages--;
//Insure the new visible page is open.
if (0!=m_cPages)
{
//CHAPTER7MOD
PageGet(m_iPageCur, &pPage, TRUE);
//End CHAPTER7MOD
InvalidateRect(m_hWnd, NULL, FALSE);
}
else
InvalidateRect(m_hWnd, NULL, TRUE);
UpdateWindow(m_hWnd);
return m_iPageCur;
}
/*
* CPages::CurPageGet
*
* Purpose:
* Retrieves the index of the current page we're viewing.
*
* Parameters:
* None
*
* Return Value:
* UINT Index of the current page.
*/
UINT CPages::CurPageGet(void)
{
return m_iPageCur;
}
/*
* CPages::CurPageSet
*
* Purpose:
* Sets the index of the current page to view.
*
* Parameters:
* iPage UINT index of the page to view. 0 means first
* page, NOVALUE means last page.
*
* Return Value:
* UINT Index of the previous current page, NOVALUE on
* error.
*/
UINT CPages::CurPageSet(UINT iPage)
{
UINT iPageNew;
UINT iPagePrev=m_iPageCur;
//CHAPTER7MOD
PCPage pPage;
//End CHAPTER7MOD
switch (iPage)
{
case 0:
iPageNew=0;
break;
case NOVALUE:
iPageNew=m_cPages-1;
break;
default:
if (iPage >= m_cPages)
iPage=0;
iPageNew=iPage;
break;
}
//No reason to switch to the same page.
if (iPagePrev==iPageNew)
return iPage;
//CHAPTER7MOD
//Close the old page committing changes.
if (!PageGet(iPagePrev, &pPage, FALSE))
return NOVALUE;
pPage->Close(TRUE);
//End CHAPTER7MOD
m_iPageCur=iPageNew;
//CHAPTER7MOD
//Open the new page.
PageGet(m_iPageCur, &pPage, TRUE);
//End CHAPTER7MOD
InvalidateRect(m_hWnd, NULL, FALSE);
UpdateWindow(m_hWnd);
return iPagePrev;
}
/*
* CPages::NumPagesGet
*
* Purpose:
* Returns the number of pages this object current contains.
*
* Parameters:
* None
*
* Return Value:
* UINT Number of pages we contain.
*/
UINT CPages::NumPagesGet(void)
{
return m_cPages;
}
/*
* CPages::PageGet
* (Protected)
*
* Purpose:
* Returns a page of a given index returning a BOOL so it's simple
* to use this function inside if statements.
*
* Parameters:
* iPage UINT page to retrieve 0 based.
* ppPage PCPage * in which to return the page pointer
* fOpen BOOL indicating if we should open this page as
* well.
*
* Return Value:
* BOOL TRUE if successful, FALSE otherwise.
*/
//CHAPTER7MOD
BOOL CPages::PageGet(UINT iPage, PCPage *ppPage, BOOL fOpen)
{
if (NULL==ppPage)
return FALSE;
if (LB_ERR!=SendMessage(m_hWndPageList, LB_GETTEXT
, iPage, (LONG)ppPage))
{
if (fOpen)
(*ppPage)->Open(m_pIStorage);
return TRUE;
}
return FALSE;
}
//End CHAPTER7MOD
/*
* CPages::PageAdd
* (Protected)
*
* Purpose:
* Creates a new page initialized to the given values. The new
* page's storage is created if it does not already exist. If
* fOpenStorage is set the page's storage is opened and left
* opened.
*
* Parameters:
* iPage UINT Location at which to insert page; new page
* is inserted after this position. NOVALUE for
* the end.
* dwID DWORD ID for this page.
* fOpenStorage BOOL indicating if we're to leave the storage
* open.
*
* Return Value:
* BOOL TRUE if the function succeeded, FALSE otherwise.
*/
//CHAPTER7MOD
BOOL CPages::PageAdd(UINT iPage, DWORD dwID, BOOL fOpenStorage)
{
//End CHAPTER7MOD
PCPage pPage;
LRESULT lr;
pPage=new CPage(dwID);
if (NULL==pPage)
return FALSE;
//CHAPTER7MOD
if (fOpenStorage)
pPage->Open(m_pIStorage);
//End CHAPTER7MOD
if (NOVALUE==iPage)
iPage--;
//Now try to add to the listbox.
lr=SendMessage(m_hWndPageList, LB_INSERTSTRING, iPage+1
, (LONG)pPage);
if (LB_ERRSPACE==lr)
{
//CHAPTER7MOD
if (fOpenStorage)
pPage->Close(FALSE);
//End CHAPTER7MOD
delete pPage;
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -