問題タブ [cricheditctrl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 構文を強調表示するプログラミング言語エディターとしての CRichEditCtrl: SetSelectionCharFormat、元に戻す
私は CRichEditCtrl を使用してコンピューター言語を編集しています。それを変更するたびに、テキストの CharFormat を変更して構文を強調しています。(例: コメントは緑で、セクションの見出しは大きなフォントで、コンパイル エラーは別のフォントで、など)
それはすべてうまくいっているように見えます。
ただし、いくつかの奇妙な問題があります。1 つは、CRichEditCtrl の取り消しバッファーに、ユーザー イベントだけでなく、SetSelectionCharFormat への呼び出しも含まれていることです。たとえば、ユーザーが行頭に「#」を入力すると、その行がコメントになります。その後、ソフトウェアによって自動的に緑色に変わります。ユーザーが ctrl-z を試みると、線が黒に戻ります。もう 1 回 ctrl-z を押すと、彼の「#」が削除されます。 SetSelectionCharFormat() の変更が元に戻すバッファに入らないようにするにはどうすればよいですか?
c++ - CRichEditCtrl OnUpdate(): ペーストを受け取ったときに開始位置と終了位置を知るには?
私は CRichEditCtrl を使用してコンピューター言語を編集しています。それを変更するたびに、現在のテキスト行で SetSelectionCharFormat を呼び出して (LineFromChar(-1) で報告されているように)、構文を強調表示しています。(例: コメントは緑色、セクション見出しは大きなフォント、コンパイル エラーは赤色など) この言語には、1 行に /* を入力すると次の行の一部になる C コメントなどの複数行の機能がないことに注意してください。コメントも。特定の文字の変更については、現在の行の色を変更するだけです。
それはすべてうまくいっているように見えます。
ただし、いくつかの奇妙な問題があります。1 つは、別の場所から複数行のテキストを選択して貼り付けた場合です。私の OnUpdate() が呼び出されますが、単純に、再フォーマットが必要になる可能性のある唯一の行は、LineFromChar() によって返される行であると想定しています。ユーザーが 1 文字ずつ入力している場合はこれで十分ですが、複数行の貼り付けを受け取った後、プログラムは貼り付けられたテキストの最後の行のみを再フォーマットすることを意味します。 挿入の開始位置をどのように知ることができますか?
mfc - cricheditctrl :: setredraw()onmousemoveハンドラーが無限ループを引き起こす
単純化しすぎて、CRichEditCtrl から派生した CRichEditCtrlEx クラスに次の WM_MOUSEMOVE メッセージ ハンドラーがあります。
問題は、SetRedraw(FALSE) の前にある SetRedraw(TRUE) が何らかの方法で新しい WM_MOUSEMOVE メッセージをメッセージ キューに配置するため、マウスが動かなくても OnMouseMove ハンドラーが無限に呼び出されることです。
問題を特定しようとして、次の単純なハンドラーを試しました。
また
しかし、それらは無限ループを引き起こしません。
また、クライアント領域を検証しようとしましたが、役に立ちませんでした:
SetRedraw() の何が問題になっていますか?
任意のアイデアをいただければ幸いです。
UPD: WM_MOUSEMOVE メッセージは、マウスの動きだけでなく、ウィンドウの描画によっても発生することがあります。最後のマウス位置を保存し、マウスが本当に動かされたかどうかを確認することで、無限ループを回避できますが、回避策のように思えます。
mfc - 別のクラスでリッチ エディット コントロールを参照する方法
シンプルな MFC テキスト エディターがあり、検索機能を実装しようとしています。「検索ボックス」ダイアログ クラスからすべてのテキストを格納するコントロールを参照しようとしています (これは View クラスにあると思います)。別のクラスにある場合、このリッチ エディット コントロールにアクセスするにはどうすればよいですか?
visual-c++ - リッチ エディット コントロールで次を検索
次のコードは、単語の最初の出現を問題なく検出します。
次のオカレンスを見つけるにはどうすればよいですか?
c++ - CRichEditCtrl でハイライトの色を変更するにはどうすればよいですか?
EN_SelChange イベントをキャッチしようとしましたが、追加してもトリガーされません
OnInitDialog fxn で。そこで、OnEraseBkgnd 関数に次のコードを追加しようとしました。
GetSel関数でプログラムがクラッシュしました
テキストが選択されたときにハイライトの色を変更する方法を考えています。