2010-12-26 10 views
0

現在、一部のソフトウェアのGUIを作成しようとしていますが、いくつかの静的コントロールに問題があります。私のウィンドウプロシージャでは、静的なコントロールが描画されるときに私はWM_CTLCOLORSTATICメッセージを持っています。メッセージの中には、IF ELSEステートメントがあります。このステートメントは、ウィンドウのハンドルと描画する必要があるウィンドウのハンドルを比較し、それに応じてウィンドウ関数を実行します。 1つは静的テキストコントロールで、背景色は描画時に設定され、もう1つは静的コントロールの境界線を描画します。WindowsのプロシージャメッセージのためにElseステートメントが機能しない場合

case WM_CTLCOLORSTATIC: 
    { 
     if (hwnd = ANNwindow->settingsborder) 
     { 
      SetBkMode((HDC)wParam, TRANSPARENT); 
      return (LRESULT)ANNwindow->backgroundbrush; 
     } 
     else if (hwnd = ANNwindow->settingstext) 
     { 
      DrawEdge((HDC)wParam, &ANNwindow->rect, EDGE_ETCHED, BF_BOTTOMRIGHT); 
      return (LRESULT)ANNwindow->backgroundbrush; 
     } 

    } 

settingsborderとsettingstextは、GUIを作成するための私のクラスのウィンドウハンドルです。

if elseステートメントの順序を逆にすると、どのような順序であっても最初のステートメントのみが処理されます。 IFの下に背景色を変更すると、それが実行されます。ボーダーを描画するのがIFの下にある場合は、それを行いますが、elseパーツの下には何も決してありません。問題を見つけることができないので、これはC++言語を使用する際の単純なエラーですか?助けてください、ありがとう。

P.S. Drawedgeの部分については、最初に静的なコントロールの境界線を作成し、その上にdrawedgeを使用します。これは別の方法で行うべきですか?ありがとう。

答えて

3

ここに問題があります。

if (hwnd = ANNwindow->settingsborder) 

else if文の

if (hwnd == ANNwindow->settingsborder) 
//  ^^ 

と同じでなければなりません。

ANNwindow->settingsborderの内容を割り当てています。これは、等価性テストを行う代わりに実質的に常にtrueを返す操作です。

+0

うわー、私はその1つ、助けをありがとう。 – contrapsych

4
  1. コンパイラの警告をオンにします。
  2. どちらの条件でも、比較(==)ではなく代入(=)を使用していることに注意してください。
+2

+1警告を表示する。ただし、「警告を有効にする」のではなく、「警告レベルを上げる」という意味ではありませんか? – ltjax

関連する問題