ユーザーがWin32リッチエディットコントロールのテキスト以外のものを変更できないようにするにはどうすればよいですか?
(つまり、テキストのフォーマットを変更したり、グラフィックを追加したりできないようにする必要があります。新しいテキストをコピーして貼り付ける場合は、テキストのみを保持し、関連するフォーマットを破棄する必要があります。)
ユーザーがWin32リッチエディットコントロールのテキスト以外のものを変更できないようにするにはどうすればよいですか?
(つまり、テキストのフォーマットを変更したり、グラフィックを追加したりできないようにする必要があります。新しいテキストをコピーして貼り付ける場合は、テキストのみを保持し、関連するフォーマットを破棄する必要があります。)
この回答はおそらく少し遅れていますが、この質問への回答を探している他の人にとって、リッチ編集コントロールで貼り付け操作を完全に制御できる最善の方法は、の実装を提供してIRichEditOleCallback::QueryAcceptDataからS_FALSEを返して停止することです。それらをすべて一緒に、またはlpcfFormatパラメーターを変更して特定のクリップボード形式をフィルターで除外します。
MFCのCRichEditView::QueryAcceptData関数は、これを実行する方法の優れた例を提供します。これは、ドラッグアンドドロップを含むすべての種類の貼り付け操作で機能するため、何が起こるかを完全に制御するための最良の方法です。
私はこれを処理するための特にエレガントな方法を見つけたことがありません:私が過去にしたことは:
1)コントロールのWM_KEYDOWNメッセージをキャッチし、すべてのフォーマットキーを破棄します(Ctrl + E、J、R、L、1,2,5、+、およびCtrl + Shift + A、7)
2)ID_EDIT_PASTEのIDを持つWM_COMMANDメッセージをキャッチすることによってすべての貼り付け操作をキャッチし、貼り付けメッセージをコントロールへのメッセージEM_PASTESPECIAL、CF_UNICODETEXTに置き換えます。(これはMFCの場合です。使用しているフレームワークまたは言語によっては、ID_EDIT_PASTEではなくCtrl + Vなどをキャッチする必要がある場合があります。)
かわいくない、私は認めたが、それはうまくいくようだ。
さらに後で:)
SendMessage(wndEdit, EM_SETEDITSTYLE, SES_EMULATESYSEDIT, SES_EMULATESYSEDIT)
うまくいくようです:貼り付けはプレーンテキストを貼り付け、フォーマットのホットキーは無効になります。
SES_EMULATESYSEDIT:このビットがオンの場合、リッチエディットはシステムエディットコントロールをエミュレートしようとします(デフォルト:0)。
オンデマンドのスクロールバーなど、richeditの「ボーナス」機能の一部は引き続き保持されます。