2017-12-01 14 views
-2

ウィンドウのクライアント領域にマウスの左ボタンをクリックした後にのみテキストを表示したいとします。私はこのコードを持っていますが、動作しません。私は、マウスを左クリックするとボタンが何も起こりません:なぜ、クリックさの状態の変化はWM_PAINTメッセージによってマウスの左ボタンをクリックした後のテキストの表示

void Text(HDC hdc) 
{ 
    SetTextColor(hdc, RGB(255, 0, 0)); 
    SetBkColor(hdc, RGB(0, 0, 0)); 
    TCHAR display_msg[] = _T("Message in window"); 
    TextOut(hdc, RestartButtonWidth, 10, display_msg, _tcslen(display_msg)); 
} 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    PAINTSTRUCT ps; 
    HDC hdc; 
    bool Clicked = false; 

    switch (message) 
    { 
    case WM_PAINT: 
     hdc = BeginPaint(hWnd, &ps); 

     if (Clicked == true) 
     { 
      Text(hdc); 
     }   

     EndPaint(hWnd, &ps); 
     break; 

    case WM_LBUTTONDOWN: 
     Clicked = true; 
     break; 

を登録していないブール値ですか?

+0

なぜCASE WM_PAINTブロックを入力したときにクリックする必要がありますか? – Grantly

+3

スコープと変数の生存期間について[良いC++の本](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)をお読みください。 –

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/dd145002(v=vs.85).aspx –

答えて

1

WndProcが呼び出されるたびに、新しい変数Clickedを作成します。 したがって、WM_LBUTTONDOWNでそのローカル変数をtrueに設定すると、その変数はスコープの最後で破棄されます。 WM_PAINTイベントでは、新しく作成されたClickedの状態をチェックしており、その変数の状態はfalseです。

static bool Clicked = false; 

は、問題の迅速な解決策です。

+1

これは助けていただきありがとうございます。 – MPython

+0

これをOOPでどのように行うか考えていますか?クラス変数を静的に設定すると、エラーが発生します。未解決の外部シンボル – MPython

+0

これは別の問題です。静的メンバーを宣言したばかりで、そのメンバーを定義する必要があります。 http://en.cppreference.com/w/cpp/language/static –

関連する問題