Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以从类中的主项目调用switch case语句,该类已包含在主项目中?_C++_Class_Visual C++_Switch Statement - Fatal编程技术网

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

C++ 是否可以从类中的主项目调用switch case语句,该类已包含在主项目中?,c++,class,visual-c++,switch-statement,C++,Class,Visual C++,Switch Statement,我在visualc++环境中定义了一个MfC项目,并为此项目编写了switch-case语句。然后,我包含了一个类,它由一个OnPaint()handle消息组成,可能会刷一些东西 之后,在主项目的切换案例中,我使用一个对象调用了这个OnPaint()函数。现在,我将为onPaint()函数设置一个条件,如果发生这种情况,请使用具有此类的笔刷,否则使用其他颜色。 因此,我想知道是否有可能从主项目的一个类中调用switch case语句 void Myclass::OnPaint() {

我在visualc++环境中定义了一个MfC项目,并为此项目编写了switch-case语句。然后,我包含了一个类,它由一个
OnPaint()
handle消息组成,可能会刷一些东西

之后,在主项目的切换案例中,我使用一个对象调用了这个
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));

    }
}
更新:

我认为控制失效并不能解决问题。这个类被定义为绘制一个图片控件,因为我为这个图片控件定义了一个变量,比如
cpicutrectrm\u Pc
位于对话框(在Visual C++中)上,然后驱动一个类来绘制该控件(名为cpicutrectr)。在驱动类中,定义了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))
,当另一种情况发生时,它会更改同一图片控件的颜色。

一般来说,您可以将
switch
语句提取到一个方法中,并调用该方法。或者在特定情况下,您可能希望为
case1
变量设置一个setter,然后使用
CWnd::invalidate()
使视图无效。这将调用
OnPaint
方法。

非常不清楚您在问什么。。。不能“调用开关语句”。也许发布一些相关的代码可以澄清您想知道的内容。为什么您希望在if语句中添加一个开关?我包括了
OnPaint()
Function@drescherjm因为在这些情况下,这个OnPaint()调用函数来绘制某些控制器。包含OnPaint函数的类需要有一个成员变量,如“StatusFunction”变量。设置该变量以控制绘制的颜色。是的,可以在同一类中提取switch语句,但是现在我尝试从属于该类的子类的类中调用此switch语句,它有错误并且需要switch参数(在这种情况下,switch参数是主类中定义的函数)。问题已更新。我正试图从一个类调用此开关语句,该类是该类的子类。难道你不能直接失效以强制绘制吗?@Braian just call
this->Invalidate()OnPaint
。@Braian您需要在控件上设置一个布尔变量,它将构成
OnPaint
内部开关的基础。