0

豊富な編集コントロールを含む、私が作成した単純なWin32APIダイアログベースのアプリケーションがあります。コントロールは、ANSIベースのテキストファイルの内容を表示し、いくつかの非常に基本的な構文の強調表示を行います。

Visual C ++ 2010 Expressを使用してコードを記述していますが、リリースモードでコンパイルすると、すべてが完全に機能します。ただし、デバッグモードでコンパイルすると、プログラムが実行され、構文の強調表示が行われているように見えますが、コントロールのテキストの色は変わりません。

なぜこれが起こっているのかについてのアイデアはありますか?

編集:このコードスニペットは、リッチエディットコントロールでテキストに色を付けようとしていることを示すために追加されました。

CHARFORMATA _token; // This variable is actually a member variable.
                    // I just pasted it in the body of the function
                    // so the code would make sense.

// _control is a pointer to a rich edit control object. I created a
// REdit class that adds member variables for a rich edit control.
// The class contains an HWND member variable storing the window
// handle. The method GetHandle() returns the window handle.

void SyntaxHighlighter::ColorSelection(COLORREF color)
{
  CHARFORMATA _token;
  _token.cbSize = sizeof(CHARFORMATA);
  _token.dwMask = CFM_COLOR;
  _token.crTextColor = color;
  SendMessageA(_control->GetHandle(), EM_SETCHARFORMAT,
               (WPARAM)SCF_SELECTION, (LPARAM)&_token);
}

前述したように、リリースモードでコンパイルすると、テキストの色付けが意図したとおりに機能します。デバッグモードでコンパイルすると、色付けが行われません。コントロールの特定の機能が機能しない場合、デバッグモードであるかどうか疑問に思っていますか?

4

1 に答える 1

1

dwMaskをCFM_COLORに設定しています。これ、crTextColorメンバーとdwEffectsメンバーの両方が有効であることを示していますが、dwEffectsを初期化していないことを示しています。リリースモードではおそらくゼロになりますが、デバッグモードでは動作しない原因となるランダムなフラグ値があります。私はそれをこのようにすることをお勧めします:

CHARFORMATA _token;
memset(&_token, 0, sizeof(_token));
_token.cbSize = sizeof(CHARFORMATA);
_token.dwMask = CFM_COLOR;
_token.crTextColor = color;
于 2012-03-09T17:47:51.820 に答える