4

基本的に、色付きのテキストの上にある場所で、標準のRichEdit選択色を変更したいと思います。

RichEditコントロールに「ハイライト」関数(黄色のマーカーなど)を実装しています。選択したテキストにハイライトを適用すると、選択範囲がそのまま残り、文字の色が上書きされるため、視覚的に何も変化しません。ユーザーはハイライトが適用されたという視覚的なフィードバックを受け取る必要があるため、これは悪いことです。

これで妥協点に落ち着きました。「ハイライト」コマンドを実行した後、選択を完全にクリアします。ただし、色付きのテキストの上にある場合は、選択色を変えるのが理想的です。

どうやってやるの?前もって感謝します!

4

5 に答える 5

4

テキスト選択の色設定は、RichEdit2.0以降のシステム選択色に固定されていますRichEdit 1.0では、選択色は背景色を反転することによって生成されるため、ある程度の制御は可能ですが、1.0にダウングレードすると多くの機能が失われます。

ウォークアラウンドは、GetSysColorAPIにプロセス全体の迂回フックをインストールすることです。

RichTextBoxのWPF4バージョンにはSelectionBrushプロパティがあり、これを使用して選択範囲の外観を変更できます。プロジェクト要件でダイアログでWPFコントロールをホストできるかどうかわからない。

于 2011-05-21T00:53:13.463 に答える
2

Windows のリッチ エディット コントロールはそのような機能を提供しないため、これを自動的に行うことはできないと思います。次の 2 つのオプションがあります。

  • 問題を無視します。あなたが望むことは不可能なので、それを望まないでください。
  • 独自のリッチ エディット コントロールを作成します (冗談ですが、可能です)。または、他のものを使用してください。多分シンチラ制御はこの機能を持っていますか?
于 2011-05-14T09:50:08.127 に答える
1

ここで妥協点を見つけました。「ハイライト」コマンドを実行した後、選択範囲を完全にクリアします。

特定の色/色を強調表示すると、Microsoft Word でさえテキストの選択が解除されることを追加したかっただけです。いろいろ試してみると、これが最も直感的に感じられます。通常はとにかく他に何もしたくなく、すぐにテキストの選択を解除するだけだからです。

于 2011-05-21T02:02:18.153 に答える
1

簡単なテスト アプリケーションでこれらの色を変更することができましたが、期待どおりに動作させるには慎重に検討する必要があります。

まず、ダイアログ リソースを変更して、コントロールを古い RICHEDIT として識別する必要があります。Visual Studio 2010 では、ダイアログで生成された .rc ファイルには として識別され"RichEditCtrl20Aたコントロールがあり、コントロールがそのように識別されたとき、選択色に大きな変更を加えることができませんでした。コントロール タイプを に"RICHEDIT"変更すると、機能が失われることなく、選択色を変更できました。テキスト エディターで .rc ファイルを変更し、RichEdit コントロール インスタンスを見つけて変更する必要があります。

それが完了したら、関数を使用して選択色 (実際には、はるかに多くの選択属性) を変更できCRichEditCtrl::SetSelectionCharFormatます。

私が行った簡単なテストは、新しいダイアログ ベースの MFC アプリケーションを作成し、それにリッチ エディット コントロールを追加し、上記のように RC ファイルを変更し、次の OnOK() ハンドラーを追加することでした。

void CTestMFCDlg::OnBnClickedOk()
{
   m_rec.SetWindowText("This is a test of stuff");

   m_rec.SetFocus();

   CHARRANGE cr;
   cr.cpMin = 0;
   cr.cpMax = 16;

   m_rec.SetSel(cr);

   CHARFORMAT2A cf;
   m_rec.GetSelectionCharFormat(cf);

   cf.dwEffects = 0;
   cf.dwMask = CFM_BACKCOLOR | CFM_COLOR | CFM_FACE;
   cf.crBackColor = 0;
   cf.crTextColor = RGB(15, 15, 255);
   strcpy(cf.szFaceName, "Times New Roman");

   m_rec.SetSelectionCharFormat(cf);
}

このハンドラーが配置されると、ダイアログで [OK] を押すと、リッチ エディット コントロールが入力され、最初の 17 文字が選択され、選択の強調表示色が変更されます。

この関数に関するドキュメントは、MSDNで見つけることができます。

于 2011-05-19T18:24:03.863 に答える