在下面的函数中,注释中的if else语句和 switch语句逻辑上是等价的,但是if else语句却不能修改线的形状???,请问这是为什么????????void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
//作图
CClientDC dc(this);
CPen pen;

/*if (m_nLineStyle == 0) //实线
{
pen.CreatePen(PS_SOLID, m_nLineWidth, RGB(255, 0, 0)); //设置画笔颜色
dc.SelectObject(&pen);
}
else if (m_nLineStyle == 1) //虚线
{
pen.CreatePen(PS_DASH, m_nLineWidth, RGB(255, 0, 0)); //设置画笔颜色
dc.SelectObject(&pen);
}
else //点线
{
pen.CreatePen(PS_DOT, m_nLineWidth, RGB(255, 0, 0)); //设置画笔颜色
dc.SelectObject(&pen);
}*/ /*CPen pen(m_nLineStyle, m_nLineWidth, RGB(255, 0, 0)); //设置画笔颜色
dc.SelectObject(&pen);*/

switch(m_nLineStyle) //为什么用这边的switch语句可以,用上面的if else语句却不行???
{
case 0:
pen.CreatePen(PS_SOLID, m_nLineWidth, RGB(255, 0, 0)); //设置画笔颜色
dc.SelectObject(&pen);
break;
case 1:
pen.CreatePen(PS_DASH, m_nLineWidth, RGB(255, 0, 0)); //设置画笔颜色
dc.SelectObject(&pen);
break;
case 2:
pen.CreatePen(PS_DOT, m_nLineWidth, RGB(255, 0, 0)); //设置画笔颜色
dc.SelectObject(&pen);
break;
default:
NULL;
}
}

解决方案 »

  1.   

    看不出什么毛病
    你先调试看看if-else的分支是不是都能执行到
      

  2.   

    你的if else完了之后有两句CPen pen(m_nLineStyle, m_nLineWidth, RGB(255, 0, 0)); //设置画笔颜色
        dc.SelectObject(&pen);是不是这个造成的?
      

  3.   

    if语句一般情况和switch是等价的,不过switch会在编译时自动帮你找寻条件是否重复(比如你==1了2次之类的情况)
      

  4.   

    不等价
    if ... else if 是一个嵌套跳转,有嵌套层数限制
    switch...是条件跳转(理解为一个扫描面),对于条件数没有限制