2016-10-23 8 views
-4

私は現在、デバッガで作業していましたが、デバッガでコマンドを実行すると思われるボタンを作成しました。しかし、私が何をしても正しく実行されません。ここでは2つのケースのコードがあります。ボタンのクリックで別のケースを呼び出すにはどうすればいいですか?

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; 

任意のヘルプ?私は正直に何をすべきか分からない。

+0

ボタンをクリックすると、ウィンドウプロシージャはWM_COMMANDメッセージを受け取ります。あなたはそれらの事件を処理していますか? – Asesh

+0

はい私はMain.cppのコマンドのハンドラを持っています。 – Ra1n

+0

そのボタンをクリックしても何も起こりません。それはあなたが意味することですか? – Asesh

答えて

0

C++は、1つの例外を除き、ケースにケースからジャンプする方法を提供していません:あなたはbreakcontinue、ケース本体の端部における制御フロー計算書のreturn、またはその他の並べ替え、それを持っていない場合(条件をもう一度チェックすることなく)次のケース本体に落ちます。

ExecuteButtonINPUT_FIELDが隣接している場合は、

case ExecuteButton: 
case INPUT_FIELD: 
    // shared code 

それともExecuteButtonINPUT_FIELD年代の前に自身のコードを持つことができます。

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

// fall throughコメントは必要ありませんが、それは読んで他人のためにあなたのコードがより明確になり含みます。

しかし、ExecuteButtonINPUT_FIELDが隣接していない場合は、共有コードを自由にアクセスできる他の場所(関数など)に配置するようにコードを再構築する必要があります。


C++での文の基本的なタイプは「式文」であるので、それは何もしませんが、まだコンパイルした理由がある

INPUT_FIELD; 

について。代入と関数呼び出しはC++の式であることに注意してください。あなたは、このような

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

として割り当てまたは関数呼び出しを、やるたびにあなたが本当に値が(それぞれ、y + zおよび関数の戻り値)値に代入や関数呼び出し、結果を実行式を評価しています捨てられた。だから、

INPUT_FIELD; 

は、エラーなしで、コンパイラによって無視され

456; // or whatever the value of INPUT_FIELD is 

のようなものになるだろう。

関連する問題