www.pudn.com > XmudOSr.rar > DragBar.cpp
// DragBar.cpp: implementation of the CDragBar class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "XMudClient.h"
#include "DragBar.h"
#include "FacePlate.h"
#include "MainScreen.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
extern CMainScreen m_MainScreen;
extern rmfullglobals myglobs;
CDragBar::CDragBar(int nMaxShow, int left, int top, int right, int bottom)
{
SetRect(&rcUpBtnDownSour,14,600,27,617);
SetRect(&rcDownBtnDownSour,28,600,41,617);
SetRect(&rcDragBarSour,0,600,13,626);
bUpBtnDown = FALSE;
bDownBtnDown = FALSE;
bPreDrag = FALSE;
nMousey = 0;
nDragBary = 0;
rcThis.left = left;
rcThis.top = top;
rcThis.right = right;
rcThis.bottom = bottom;
nDragBarSpace = bottom - top - 62;
nDragBarUpSpace = 0;
rcDragBarBtn = rcThis;
rcUpBtn = rcThis;
rcDownBtn = rcThis;
rcUpBtn.bottom = rcUpBtn.top + 17;
rcDownBtn.top = rcDownBtn.bottom - 17;
rcDragBarBtn.top = rcUpBtn.bottom + 1;
rcDragBarBtn.bottom = rcDragBarBtn.top + 26;
nMax = nMaxShow;
nRecordCount = 0;
nFirstPos = 0;
}
CDragBar::~CDragBar()
{
}
BOOL CDragBar::LButtonDown(POINT Pos)
{
if(!PtInRect(&rcThis,Pos)) return FALSE;
if(PtInRect(&rcUpBtn,Pos)){
bUpBtnDown = TRUE;
nFirstPos--;
}else if(PtInRect(&rcDownBtn,Pos)){
bDownBtnDown = TRUE;
nFirstPos++;
}else if(PtInRect(&rcDragBarBtn,Pos)){
if(nRecordCount > nMax){
bPreDrag = TRUE;
nMousey = Pos.y;
nDragBary = rcDragBarBtn.top;
}
}
else if((Pos.y > rcUpBtn.bottom)&&(Pos.y < rcDragBarBtn.top)){
nFirstPos -= nMax;
}
else if((Pos.y > rcDragBarBtn.bottom)&&(Pos.y < rcDownBtn.top)){
nFirstPos += nMax;
}
else return FALSE;
m_MainScreen.mFirstFD.bReDraw[0]=TRUE;
m_MainScreen.mFirstFD.bReDraw[1]=TRUE;
m_MainScreen.mSecondFD.bReDraw[0]=TRUE;
m_MainScreen.mSecondFD.bReDraw[1]=TRUE;
m_MainScreen.mTalkFD.bReDraw[0]=TRUE;
m_MainScreen.mTalkFD.bReDraw[1]=TRUE;
// ReDraw();
return TRUE;
}
BOOL CDragBar::LButtonUp(POINT Pos)
{
if(bUpBtnDown) bUpBtnDown = FALSE;
else if(bDownBtnDown) bDownBtnDown = FALSE;
else if(bPreDrag) bPreDrag = FALSE;
else return FALSE;
m_MainScreen.mFirstFD.bReDraw[0]=TRUE;
m_MainScreen.mFirstFD.bReDraw[1]=TRUE;
m_MainScreen.mSecondFD.bReDraw[0]=TRUE;
m_MainScreen.mSecondFD.bReDraw[1]=TRUE;
m_MainScreen.mTalkFD.bReDraw[0]=TRUE;
m_MainScreen.mTalkFD.bReDraw[1]=TRUE;
// ReDraw();
return FALSE;
}
BOOL CDragBar::OnMouseMove(POINT Pos)
{
if(bPreDrag)
{
rcDragBarBtn.top = (Pos.y - nMousey) + nDragBary;
if(rcDragBarBtn.top <= rcUpBtn.bottom)
rcDragBarBtn.top = rcUpBtn.bottom + 1;
if(rcDragBarBtn.top >= rcDownBtn.top - 26)
rcDragBarBtn.top = rcDownBtn.top - 27;
rcDragBarBtn.bottom = rcDragBarBtn.top + 26;
nDragBarUpSpace = rcDragBarBtn.top - rcUpBtn.bottom;
nFirstPos = nDragBarUpSpace * (nRecordCount - nMax) / nDragBarSpace;
m_MainScreen.mFirstFD.bReDraw[0]=TRUE;
m_MainScreen.mFirstFD.bReDraw[1]=TRUE;
m_MainScreen.mSecondFD.bReDraw[0]=TRUE;
m_MainScreen.mSecondFD.bReDraw[1]=TRUE;
m_MainScreen.mTalkFD.bReDraw[0]=TRUE;
m_MainScreen.mTalkFD.bReDraw[1]=TRUE;
// ReDraw();
return TRUE;
}
else return FALSE;
}
void CDragBar::ReDraw()
{
if(nFirstPos < 0) nFirstPos = 0;
else if(nRecordCount <= nMax)
nFirstPos = 0;
else if(nFirstPos > nRecordCount - nMax)
nFirstPos = nRecordCount - nMax;
bltObject(rcThis.left,
rcThis.top,
myglobs.g_lpDDSGameMenu,
&rcThis,
DDBLTFAST_SRCCOLORKEY);
if(bUpBtnDown)//画向上的按钮
bltObject(rcUpBtn.left,
rcUpBtn.top,
myglobs.g_lpDDSGameMenu,
&rcUpBtnDownSour,
DDBLTFAST_SRCCOLORKEY);
if(bDownBtnDown)//画向下的按钮
bltObject(rcDownBtn.left,
rcDownBtn.top,
myglobs.g_lpDDSGameMenu,
&rcDownBtnDownSour,
DDBLTFAST_SRCCOLORKEY);
if(nRecordCount > nMax)
{
nDragBarUpSpace = (nFirstPos * nDragBarSpace) / (nRecordCount - nMax);
rcDragBarBtn.top = rcUpBtn.bottom + nDragBarUpSpace + 1;
rcDragBarBtn.bottom = rcDragBarBtn.top + 26;
bltObject(rcDragBarBtn.left,
rcDragBarBtn.top,
myglobs.g_lpDDSGameMenu,
&rcDragBarSour,
DDBLTFAST_SRCCOLORKEY);
}
}
void CDragBar::ResetCount(int nNewCount)
{
nRecordCount = nNewCount; //个数
nFirstPos = 0; //当前窗口第一条记录,相对应技能或是装备连表中的第几条
}
int CDragBar::GetCount()
{
return nRecordCount;
}