如何通过单击按钮调用另一个案例

时间:2016-10-23 05:05:13

标签: c++ winforms winapi visual-c++

好的,我现在一直在研究调试器,我已经创建了一个假设在调试器中执行命令的按钮。但无论我做什么,它都没有正确地完成,这是两个案例的代码。

case Execute_Button:
    INPUT_FIELD;
    break;
case INPUT_FIELD:
    if (HIWORD(wParam) == EN_MAXTEXT) {
        char cText[INPUT_CHAR_LIMIT];
        SendMessage((HWND)lParam, WM_GETTEXT, INPUT_CHAR_LIMIT, (LPARAM)cText);

        if (strcmp(cText, "") == 0)
            break;

        SendMessage((HWND)lParam, WM_SETTEXT, NULL, (LPARAM)"");

        //std::string command = cText;
        HandleCommand(cText);
    }

    break;
}
break;

有任何帮助吗?老实说,我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

C ++没有提供从一个案例跳到另一个案例的方法,但有一个例外:如果你没有breakcontinuereturn或其他类型的控件在一个案例正文的末尾的流程声明,它将落入下一个案件正文(不再检查条件)。

如果ExecuteButtonINPUT_FIELD彼此相邻,那么

case ExecuteButton:
case INPUT_FIELD:
    // shared code

ExecuteButton可以在INPUT_FIELD之前拥有自己的代码。

case ExecuteButton:
    // some code
    // fall through
case INPUT_FIELD:
    // shared code

// fall through评论不是必需的,但包含它会使您的代码更明确,供其他人阅读。

但是,如果ExecuteButtonINPUT_FIELD不相邻,则必须重新构建代码,以将共享代码放在其他位置(例如函数),两者都可以自由访问它。

至于

    INPUT_FIELD;

之所以做什么,但仍然编译,是因为C ++中基本的语句类型是“表达式语句”。请记住,赋值和函数调用是C ++中的表达式。每当您进行分配或函数调用时,例如

x = y + z;
somethingThatReturns(x, y);

您实际上正在评估执行赋值或函数调用的表达式,并导致值被丢弃的值(y + z和函数的返回值)。所以

    INPUT_FIELD;

会变成类似

的东西
    456; // or whatever the value of INPUT_FIELD is

然后编译器会忽略它而不会出错。