問題タブ [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.
mfc - CRichEidtオブジェクトのスタイルを動的に変更するにはどうすればよいですか?
ここで、単一行モードのCRichEditオブジェクトを作成しました。これを複数行スタイルに変更する場合は、誰かが1つのプッシュボタンを押すなどのCtrlメッセージに応答してこれらすべてを実行します。どうも
mfc - CDialog DoModal (ダイアログはキーボード フォーカスで開きますが、マウス フォーカスでは開きません)
CRichEditCtrl コントロールを含む CDialog ウィンドウ (CDrafter) があります。
CDrafter::PreTranslateMessage と CDrafter::OnNotify をオーバーライドして、RichTextEdit 内の特別な単語をマウスでクリックすると、別のダイアログ (MyDialog) が開きます。
*注: EN_LINK スタイルの制限が気に入らなかったので、これを行いました。*
したがって、CDrafter::PreTranslateMessage 内には次のものがあります。
どこでどの単語がクリックされたかを判断するだけです (それ以上は何もしません) (OnNotify が何かを行うのを待ちます)。
したがって、CDrafter::OnNotify 内には次のものがあります。
MyDialog::DoModal の後に "CDialog::OnNotify(wParam, lParam, pResult)" を呼び出してみましたが、同じ問題が発生します。MyDialog::DoModal は、親ダイアログと同じスレッド内で呼び出されます。
私は次のことができると期待しています:
Word をクリックすると MyDialog が開き、MyDialog::Cancel ボタンをクリックするとダイアログが閉じます。
しかし、これが私のシーケンスであるため、問題があります。
単語をクリックすると、MyDialog が開き、MyDialog::Cancel ボタンをクリックします (動作しません - マウス アイコンのみが変わります)。MyDialog::Cancel ボタンをクリックすると、ダイアログが閉じます。
新しく開いたダイアログ内でマウス コントロールを取得するには、マウスを (最初にクリックする) 必要があります。つまり、ボタンなどのマウスオーバー イベントは、I (クリック) するまで何もしません。
c++ - CRichEditCtrl::StreamInはフォーマットを失います
コントロールを作成し、CRichEditCtrl
それにRTFをロードしようとしています。テキストは正常に読み込まれるように見えますが、すべてのフォーマットが失われ、基本的にプレーンテキストになります。
明確にするために、いくつかのサンプルコードで十分だと思います。
以下のスクリーンショットで、これがどのように見えるかの例を見ることができます。
ご覧のとおり、テキストはOKですが、「例」という単語は太字にする必要があります。ワードパッドによって保存されたものを直接使用して、さまざまなRTFを試しましたが、それでもテキストはプレーンテキストとしてのみ表示され、すべての書式設定が失われます。どの関数呼び出しからもエラーは返されません。
visual-c++ - ::AfxInitRichEdit2 が失敗する原因とその修正方法
Visual Studio 2012 を使用して既存の MFC アプリケーションを構築しています。このアプリケーションでは、.NET"RichEdit20A"
を継承するコントロールとカスタム コントロールを使用していますCRichEditCtrl
。
InitInstance()
アプリケーションがを呼び出している間::AfxInitRichEdit2()
、どれが を呼び出しAtlLoadSystemLibraryUsingFullPath(L"RICHED20.DLL")
、どれが を呼び出しますLoadLibraryExW(pszLibrary, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32)
。後者の呼び出しは失敗し、 を返しますNULL
。GetLastError()
87 を返します (パラメーターが正しくありません)。これは、Win7 x64 と Win8 x64 の両方で発生します。
失敗した呼び出しは、Visual Studio 2012 ランタイムで導入されたようです (条件内にあります#if NTDDI_VERSION >= NTDDI_WIN8
)。Visual Studio 2008 でビルドした場合、アプリケーションは問題なく動作しました。
この問題が発生する理由と、この問題を修正 (または回避) する方法を知っている人はいますか? または、ランタイムを「元に戻して」古い読み込み動作を使用する方法はありますか?
c++ - CRichEditCtrlは色付きのテキストを追加しますか?
MFCプロジェクトにCRichEditCtrlがあり、これをレポートログとして使用しています。特定の状況に応じて、コントロールに異なる色のテキストを追加する必要があります(つまり、標準の通知の場合は青い線、エラーの場合は赤い線など)。私はこれを機能させることにかなり近づきましたが、それでも奇妙な動作をします:
せいぜい、最終的には、新しく追加された行は適切に色付けされますが、前のテキストはすべて黒になります。その上、追加されたテキスト行ごとに、開始選択が1ずつ増えるようです。次に例を示します。
では、色付きのテキストの新しい行を追加しながら、これまでのすべてのテキストと書式設定をそのままにしておくにはどうすればよいでしょうか。
winapi - CRichEditCtrl::LimitText - 改行の問題
を使用して MFC ダイアログ フィールドにリンクされた、サイズ 500 の DB テキスト フィールドがありますCRichEditCtrl
。CRichEditCtrl::LimitText(500)
DBが処理できる以上のテキストを入力できないように呼び出しますが、これは改行を入力するまで問題なく機能します。各改行は文字列の長さを 2 ずつ増やしますが、500 の制限に対しては 1 としてカウントされるだけCString
です。
特に、ユーザーが入力したテキストを切り捨てるのではなく、500 文字の制限までしかテキストを入力できないようにするコントロールが必要です。どうすればこれを達成できますか?注意してください、私はそのままの内容を保存する必要があり、DBなどで置き換えるCString
必要はありません。\r\n
\n
c++ - CRichEditCtrl::StreamIn がテキスト ファイル全体を読み取らない
読みたいテキスト ファイルがあり、それをリッチ エディット ボックスに入れます。問題は、pbBuff
バッファーがファイル全体を取得することですが、CRichEditCtrl ウィジェットに追加されるのは最初の行だけです。
コールバック関数は次のとおりです。
そして、OnInitDialog()
関数でそれを設定する方法:
c++ - CRichEditCtrl は SetSel の自動スクロールを防止します
CRichEditCtrl から派生した CMyRichEditCtrl があります。SetSel を呼び出すと、キャレットが表示されるように CRichEditCtrl の内容が自動的にスクロールされます。この動作は避けたいと思います。
この動作が 6.0 と他のバージョンの間で変更されたように見えるのは、私を悩ませていることです。
Visual Studio 2010 : http://msdn.microsoft.com/en-us/library/4zek9k1f(v=vs.100).aspx
キャレットは、開始 (cpMin または nStartChar) インデックスと終了 (cpMax または nEndChar) インデックスの大きい方によって示される選択範囲の最後に配置されます。この関数は、CRichEditCtrl の内容をスクロールして、キャレットが表示されるようにします。
Visual Studio 6.0 : http://msdn.microsoft.com/en-us/library/aa313352(v=vs.60).aspx
キャレットは、開始 (cpMin または nStartChar) インデックスと終了 (cpMax または nEndChar) インデックスの大きい方によって示される選択範囲の最後に配置されます。この関数は、キャレットが表示されるように CRichEditCtrl の内容をスクロールしません。
SetSel を呼び出すときにコントロールの自動スクロールを防ぐ方法はありますか?
c++ - CRichEditCtrl は、フォーカスを取得するとすべてのテキストを選択します
メニューと CTabCtrl を含むダイアログがありました。CTabCtrl には、CDialog を含む 1 つのタブがありました。次に、いくつかの静的テキストと CRichEditCtrl が含まれていました。ウィンドウがフォーカスを取得したり失ったりすることに特に問題はありませんでした。
2 番目の同一のタブを追加して以来、タブが変更されるたびに、CRichEditCtrl 内のすべてのテキストが選択されているように見えます。反転した配色で表示され、キーを押すとすべてのテキストが置き換えられます。
フラグ ECO_NOHIDESEL の説明には、次のように書かれています(強調は私のものです):
エディット コントロールの既定の動作を無効にします。デフォルトの動作では、コントロールが入力フォーカスを失うと選択が非表示になり、コントロールが入力フォーカスを受け取ると選択が表示されます。ECO_NOHIDESEL を指定すると、コントロールにフォーカスがない場合でも、選択したテキストが反転されます。
「選択を表示する」は、「このコントロールが最後にフォーカスされたときの選択を表示する」ように聞こえますが、これは起こっていることではありません。通常、フォーカスが失われる前に何も選択されていませんが、選択を離れようとして別のタブに戻って戻ると、通常どおりテキスト全体が選択されます。
この選択を防ぐことはできますか?
void EditorDialog::OnTabSelChange( NMHDR * phdr, LRESULT* pResult ) {