是否可以从类中的主项目中调用switch case语句,该类已包含在主项目中?

时间:2015-07-14 12:41:14

标签: c++ class visual-c++ switch-statement

我在 visual C ++ 环境中定义了 MfC 项目,并为此项目编写了switch case语句。然后我包含了一个由OnPaint()句柄消息组成的类,可以刷一些东西。

之后,我通过使用对象在主项目的Switch案例中调用了此OnPaint()函数。现在我要为onPaint()函数设置一个条件,如果发生这种情况,请使用带有此类的画笔,否则使用其他颜色。 因此,我想知道是否有可能从其中一个类的主项目中调用switch case语句?

void Myclass::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    //@TG
    //#3073
    // TODO: Add your message handler code here
    // Do not call CStatic::OnPaint() for painting messages
    CRect rect;
    GetClientRect(&rect);
    switch(StatusFunction)
    {
      case 1:
        dc.FillSolidRect(&rect, RGB(255, 0, 0));
    }
     case 2:
    {
        dc.FillSolidRect(&rect, RGB(0, 255, 0));

    }
}

更新

我认为使用Invalidate控件无法解决问题。这个类被定义为绘制一个Picture控件,因为我为这个图片控件定义了一个变量,如CPictureCtr m_Pc;,它位于一个对话框(在Visual C ++中),然后一个类被驱动只绘制这个控件(命名为CPictureCtr )。在驱动类中定义了OnPaint()句柄消息。在其中一个switch case语句的例子中,我调用了OnPaint(),如下所示:

m_Pc.EnableWindow(TRUE);
m_Pc.Invalidate();

然而问题是,在一种情况下,这些代码行启用时,驱动类中的OnPaint()函数使用此行:dc.FillSolidRect(&rect, RGB(255, 0, 0));。我只是尝试使用相同的 OnPaint()功能来设置条件来读取dc.FillSolidRect(&rect, RGB(0, 255, 0)),当另一个案例发生时,它会改变相同图片控件的颜色。

1 个答案:

答案 0 :(得分:1)

通常,您可以将switch语句提取到方法中,然后调用该方法。或者在您的特定情况下,您可能希望使用case1变量的setter,然后使用CWnd::Invalidate()使视图无效。这将调用OnPaint方法。