ListCtrl 的选择可见有关问题

ListCtrl 的选择可见问题
void   CTestDialog::OnClickList1(NMHDR*   pNMHDR,   LRESULT*   pResult)  
{
//   TODO:   Add   your   control   notification   handler   code   here
LPNMLISTVIEW   pNMLV   =   reinterpret_cast <LPNMLISTVIEW> (pNMHDR);
int   nItem   =   pNMLV-> iItem;

//如果选中了零件列表的一行,则显示此零件图形
if(   nItem   <   0   )
nItem   =   0;

this-> m_ListPartInfo.EnsureVisible(nItem,FALSE);
this-> m_ListPartInfo.SetItemState(nItem,   LVIS_SELECTED,   LVIS_SELECTED);

*pResult   =   0;
}

void   CTestDialog::OnKeydownList1(NMHDR*   pNMHDR,   LRESULT*   pResult)  
{
LV_KEYDOWN*   pLVKeyDow   =   (LV_KEYDOWN*)pNMHDR;
//   TODO:   Add   your   control   notification   handler   code   here
// LPNMLVKEYDOWN   pLVKeyDow   =   reinterpret_cast <LPNMLVKEYDOWN> (pNMHDR);
//   TODO:   在此添加控件通知处理程序代码

UINT   uSelectedCount   =   this-> m_ListPartInfo.GetSelectedCount();
int     nItem   =   -1;
if(   uSelectedCount   ==   1   )
{
nItem   =   this-> m_ListPartInfo.GetNextItem(nItem,   LVNI_SELECTED);
this-> m_ListPartInfo.SetItemState(nItem,0,   LVIS_SELECTED);
}

bool   bSendClickMsg   =   false;
switch(   pLVKeyDow-> wVKey   )
{
case   VK_DOWN:
{
if(   nItem   <=   -1   )
{
nItem   =   0;
}
else
nItem++;

if(   nItem   ==   this-> m_ListPartInfo.GetItemCount()   )
nItem   =   0;

bSendClickMsg   =   true;
}
break;
case   VK_UP:
{
if(   nItem   >   0   )
nItem--;
else   if(   nItem   ==   0   )
{
nItem   =   this-> m_ListPartInfo.GetItemCount()   -   1;
}
else
{
nItem   =   0;
}

bSendClickMsg   =   true;
}
break;
default:
break;
}

if(   bSendClickMsg   )
{
NMHDR   nh;
nh.hwndFrom   =   this-> m_ListPartInfo.m_hWnd;
nh.idFrom       =   this-> m_ListPartInfo.GetDlgCtrlID();;
nh.code           =   0xfffffffe;

NMLISTVIEW   pNMLV;
pNMLV.hdr       =   nh;
pNMLV.iItem   =   nItem;

SendMessage(WM_NOTIFY,   NM_CLICK,   (LPARAM)&pNMLV);
}
*pResult   =   0;
}

ListCtrl中有180行数据

------------------------
首先   选择第1行
然后按Up键,可以让第180行可见并选中,继续Up一次

然后使用Down键则直接使第2行可见并选中

过程反过来也是如此

这个为什么?

如何解决?

---------------
在线等

------解决方案--------------------
你用的是PAGE UP和PAGEDN吗?
如果是这个你消息函数 如:
BOOL CDlgInfo::PreTranslateMessage(MSG* pMsg)
{

if(pMsg-> message ==WM_KEYDOWN)
{
if(pMsg-> wParam == VK_DOWN)
{
int nItem =0;
nItem = m_ListPartInfo.GetSelectMake();
if( nItem < 0 )
nItem = 0;