7

リッチ エディット コントロールで赤い波線の下線を引く方法を探しています (Msftedit.dll でバージョン 4.1 を使用しています)。私はこのコードで波線の下線を生成することができます:

CHARFORMAT2 format;
format.cbSize = sizeof(format);
format.dwMask = CFM_UNDERLINETYPE;
format.bUnderlineType = CFU_UNDERLINEWAVE;
SendMessage(hWndEdit,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&format);

MSDN のドキュメントでは、下線の色を変更する方法は指定されておらず、テキスト (下線付き) とテキストの背景のみが指定されています。下線のタイプ (CFU_UNDERLINEWAVE) には下のニブルを使用し、色には上のニブルを使用するように指示するコードを見つけました。だから私は試しました:

format.bUnderlineType = CFU_UNDERLINEWAVE | 0x50;

しかし、それはうまくいきません。

アップデート

バージョン 3.0 (Riched20.dll) でこのコードをテストしましたが、動作しています。したがって、問題は 4.1 にあります。機能は削除されたか、別の場所に移動されましたか?

バージョン 6 (office 2007 で使用される dll) でも機能しません。

4

3 に答える 3

4

DaveCamp の回答を拡張すると、CHARFORMAT2W構造にはbReserved1エントリが含まれていました。

typedef struct _charformat2w
{
    UINT        cbSize;
    DWORD       dwMask;
    DWORD       dwEffects;
    ...
    BYTE        bReserved1;
} CHARFORMAT2W;

しかし、最新 (8.0) の SDK を見ると、bReserved1エントリにunderline colorが追加されています。

typedef struct _charformat2w
{
    UINT        cbSize;
    DWORD       dwMask;
    DWORD       dwEffects;
    ...
#if (_RICHEDIT_VER >= 0x0800)
    BYTE        bUnderlineColor;    // Underline color
#endif
} CHARFORMAT2W;

これは、Widows 8 の機能として定義されています ( _RICHEDIT_VER >= 0x0800)。

下線の色を設定する方法は、デイブの答えです。

CHARFORMAT2 format;
format.cbSize = sizeof(format);

format.dwMask = CFM_UNDERLINETYPE | CFM_UNDERLINE;
format.dwEffects = CFE_UNDERLINE;
format.bUnderlineType = CFU_UNDERLINEWAVE;
format.bUnderlineColor = 0x05;

SendMessage(hWndEdit,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &format);

残りのトリックは、色のBYTE値です。まだ文書化されていませんが、16 色があります。

UnderlineColor_Black =      0x00;
UnderlineColor_Blue =       0x01;
UnderlineColor_Aqua =       0x02;
UnderlineColor_Lime =       0x03;
UnderlineColor_Fuchsia =    0x04;
UnderlineColor_Red =        0x05;
UnderlineColor_Yellow =     0x06;
UnderlineColor_White =      0x07;
UnderlineColor_Navy =       0x08;
UnderlineColor_Teal =       0x09;
UnderlineColor_Green =      0x0A;
UnderlineColor_Purple =     0x0B;
UnderlineColor_Maroon =     0x0C;
UnderlineColor_Olive =      0x0D;
UnderlineColor_DkGray =     0x0E;
UnderlineColor_LtGray =     0x0F;

ここに画像の説明を入力

編集: 色の名前を から に変更しCyanましたAqua。の綴りを修正Fuchsia

: パブリック ドメインにリリースされたすべてのコード。帰属は必要ありません。

于 2014-03-22T21:16:29.283 に答える
3

これが古いスレッドを掘り起こしていることは知っていますが、これに対する答えを探して数時間ネットを検索したところ、どこでも同様の答えが見つかりました!

これは実際に Microsoft ( http://msdn.microsoft.com/en-gb/library/windows/desktop/bb787883(v=vs.85).aspx ) によって文書化されており、非常に簡単に行うことができます。どうやって!msftedit.dll の RichEdit50W コントロールを使用する Windows7 および Windows8 で動作させることができました。

注意すべきことの 1 つは、Win8 ではカラー インデックスが異なることです。RED の場合、0x05 ではなく 0x06 を使用する必要があります。

さて、あなたがする必要があるのは次のとおりです:

CHARFORMAT2 format;
format.cbSize = sizeof(format);

format.dwMask = CFM_UNDERLINETYPE | CFM_UNDERLINE;
format.dwEffects = CFE_UNDERLINE;
format.bUnderlineType = CFU_UNDERLINEWAVE;
format.bUnderlineColor = 0x05;

SendMessage(hWndEdit,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &format);
于 2012-12-17T19:41:13.327 に答える
2

申し訳ありませんが、下線の色の変更が Microsoft によって文書化されていない場合は、使用しないでください。このような文書化されていない機能は、後のバージョンで削除される可能性があります。これは、ここで発生した可能性があります。

最善の策は、Microsoft に問い合わせることです。

于 2009-11-28T12:14:06.993 に答える