0

現在、いくつかのソフトウェア用のGUIを作成しようとしていますが、いくつかの静的コントロールに問題があります。私のウィンドウプロシージャには、静的コントロールが描画されるタイミングに関するWM_CTLCOLORSTATICメッセージがあります。メッセージの中には、ウィンドウのハンドルを描画する必要のあるハンドルと比較し、それに応じてウィンドウ関数を実行するIFELSEステートメントがあります。1つは静的テキストコントロールで、描画時に背景色が設定され、もう1つは静的コントロールの境界線を描画します。

    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++言語を使用する際の単純なエラーですか。助けてください、ありがとう。

PSドローエッジ部分では、最初に静的コントロールボーダーを作成し、次にその上でドローエッジを使用します。別の方法で行う必要がありますか?ありがとう。

4

2 に答える 2

4
  1. コンパイラで警告をオンにします。
  2. =どちらの条件でも、比較()ではなく割り当て()を使用していることに注意してください==
于 2010-12-26T23:24:18.973 に答える
3

これがあなたの問題です。

if (hwnd = ANNwindow->settingsborder)

する必要があります

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

else ifステートメントについても同じです。

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

于 2010-12-26T23:23:27.923 に答える