在阅读一些经典的源代码时常碰到类似这样的代码:
void CMyCursorView::LoadCursorID(UINT Cur)
{
CurName=Cur;
}
我不理解的是,它的作用就是一个赋值,为什么不直接赋值,非要多此一举进行一次函数调用,不是降低了运行效率了吗?但是,高手们要这样写,必有它的理由吧?这理由是什么?
这段代码更完整的用法是这样的:
......
UINT CurName;
.......
void CMyCursorView::LoadCursorID(UINT Cur)
{
CurName=Cur;
}
void CMyCursorView::CapPoint(CPoint MousePos)
{
CRect r;
GetClientRect(&r);
int Width,Hight;
Width=MousePos.x/(r.right/3);
Hight=MousePos.y/(r.bottom/3);
switch(Width)
{case 0:
switch(Hight)
{
case 0:LoadCursorID(IDC_CURSOR1);break;
case 1:LoadCursorID(IDC_CURSOR2);break;
case 2:LoadCursorID(IDC_CURSOR3);break;
}break;
case 1:
switch(Hight)
{
case 0:LoadCursorID(IDC_CURSOR4);break;
case 1:LoadCursorID(IDC_CURSOR5);break;
case 2:LoadCursorID(IDC_CURSOR6);break;
}break;
case 2:
switch(Hight)
{
case 0:LoadCursorID(IDC_CURSOR7);break;
case 1:LoadCursorID(IDC_CURSOR8);break;
case 2:LoadCursorID(IDC_CURSOR9);break;
}break;
}
CUR=AfxGetApp()->LoadCursor(CurName);
Invalidate();
}
下面的这个代码与上面的语句等效,且更简洁高效,为什么不这样做?不理解!
void CMyCursorView::CapPoint(CPoint MousePos)
{
CRect r;
GetClientRect(&r);
int Width,Hight;
Width=MousePos.x/(r.right/3);
Hight=MousePos.y/(r.bottom/3);
switch(Width)
{case 0:
switch(Hight)
{
case 0:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR1);break;
case 1:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR2);break;
case 2:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR3);break;
}break;
case 1:
switch(Hight)
{
case 0:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR4);break;
case 1:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR5);break;
case 2:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR6);break;
}break;
case 2:
switch(Hight)
{
case 0:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR7);break;
case 1:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR8);break;
case 2:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR9);break;
}break;
}
Invalidate();
}
哪位高手能指点迷津?
void CMyCursorView::LoadCursorID(UINT Cur)
{
CurName=Cur;
}
我不理解的是,它的作用就是一个赋值,为什么不直接赋值,非要多此一举进行一次函数调用,不是降低了运行效率了吗?但是,高手们要这样写,必有它的理由吧?这理由是什么?
这段代码更完整的用法是这样的:
......
UINT CurName;
.......
void CMyCursorView::LoadCursorID(UINT Cur)
{
CurName=Cur;
}
void CMyCursorView::CapPoint(CPoint MousePos)
{
CRect r;
GetClientRect(&r);
int Width,Hight;
Width=MousePos.x/(r.right/3);
Hight=MousePos.y/(r.bottom/3);
switch(Width)
{case 0:
switch(Hight)
{
case 0:LoadCursorID(IDC_CURSOR1);break;
case 1:LoadCursorID(IDC_CURSOR2);break;
case 2:LoadCursorID(IDC_CURSOR3);break;
}break;
case 1:
switch(Hight)
{
case 0:LoadCursorID(IDC_CURSOR4);break;
case 1:LoadCursorID(IDC_CURSOR5);break;
case 2:LoadCursorID(IDC_CURSOR6);break;
}break;
case 2:
switch(Hight)
{
case 0:LoadCursorID(IDC_CURSOR7);break;
case 1:LoadCursorID(IDC_CURSOR8);break;
case 2:LoadCursorID(IDC_CURSOR9);break;
}break;
}
CUR=AfxGetApp()->LoadCursor(CurName);
Invalidate();
}
下面的这个代码与上面的语句等效,且更简洁高效,为什么不这样做?不理解!
void CMyCursorView::CapPoint(CPoint MousePos)
{
CRect r;
GetClientRect(&r);
int Width,Hight;
Width=MousePos.x/(r.right/3);
Hight=MousePos.y/(r.bottom/3);
switch(Width)
{case 0:
switch(Hight)
{
case 0:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR1);break;
case 1:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR2);break;
case 2:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR3);break;
}break;
case 1:
switch(Hight)
{
case 0:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR4);break;
case 1:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR5);break;
case 2:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR6);break;
}break;
case 2:
switch(Hight)
{
case 0:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR7);break;
case 1:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR8);break;
case 2:CUR=AfxGetApp()->LoadCursor(IDC_CURSOR9);break;
}break;
}
Invalidate();
}
哪位高手能指点迷津?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货