📄 irowsetscrollimpl.h
字号:
#ifndef __I_ROWSET_SCROLL_IMPL__INCLUDED__
#define __I_ROWSET_SCROLL_IMPL__INCLUDED__
#include "IRowsetLocateImpl.h"
template <class T, class Base>
class ATL_NO_VTABLE CRowsetScrollImpl;
template <class T>
class ATL_NO_VTABLE IRowsetScrollImpl : public CRowsetScrollImpl<T, IRowsetScroll>
{
};
template <class T, class Base>
class ATL_NO_VTABLE CRowsetScrollImpl : public CRowsetLocateImpl<T, Base>
{
public:
STDMETHOD(GetApproximatePosition)(
HCHAPTER hChapter,
ULONG cbBookmark,
const BYTE *pBookmark,
ULONG *pulPosition,
ULONG *pcRows)
{
ATLTRACE2(atlTraceDBProvider, 0, "IRowsetScroll::GetApproximatePosition()\n");
T *pT = (T*)this;
if (hChapter != DB_NULL_HCHAPTER)
{
ATLTRACE2(atlTraceDBProvider, 0, "IRowsetScroll::GetApproximatePosition - (hChapter != DB_NULL_HCHAPTER)\n");
return E_FAIL;
}
if (cbBookmark == 0)
{
// Ignore pBookmark
if (pulPosition)
{
*pulPosition = 0;
}
if (pcRows)
{
*pcRows = pT->GetNumRows();
}
}
else
{
if (!pBookmark)
{
ATLTRACE2(atlTraceDBProvider, 0, "IRowsetScroll::GetApproximatePosition - (cbBookmark != 0 && !pBookmark)\n");
return E_INVALIDARG;
}
if (pulPosition)
{
if (cbBookmark == 1)
{
if (*(DBBOOKMARK*)pBookmark == DBBMK_FIRST)
{
*pulPosition = 1;
}
else if (*(DBBOOKMARK*)pBookmark == DBBMK_LAST)
{
*pulPosition = pT->GetNumRows();
}
else if (*(DBBOOKMARK*)pBookmark == DBBMK_INVALID)
{
return DB_E_BADBOOKMARK;
}
}
else if (cbBookmark == sizeof(DWORD))
{
// the bookmark is the row index...
DWORD bookmark = *(DWORD*)pBookmark;
if (bookmark < 1 || bookmark > pT->GetNumRows())
{
return DB_E_BADBOOKMARK;
}
*pulPosition = bookmark;
}
else
{
ATLTRACE2(atlTraceDBProvider, 0, "IRowsetScroll::GetApproximatePosition - (cbBookmark != sizeof(DWORD))\n");
return E_FAIL;
}
}
if (pcRows)
{
*pcRows = pT->GetNumRows();
}
}
return S_OK;
}
STDMETHOD(GetRowsAtRatio)(
HWATCHREGION hReserved1,
HCHAPTER hChapter,
ULONG ulNumerator,
ULONG ulDenominator,
LONG cRows,
ULONG *pcRowsObtained,
HROW **prghRows)
{
ATLTRACE2(atlTraceDBProvider, 0, "IRowsetScroll::GetRowsAtRatio()\n");
return E_NOTIMPL;
}
};
#endif // __I_ROWSET_SCROLL_IMPL__INCLUDED__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -