سؤال

كيف تمنع المستخدم من تغيير أي شيء بخلاف النص في تحرير Win32 الغني يتحكم؟

(أي.ولا ينبغي أن يكونوا قادرين على تغيير تنسيق أي نص أو إضافة رسومات أو ما إلى ذلك؛إذا قاموا بنسخ ولصق نص جديد، فيجب الاحتفاظ بالنص فقط، ويجب التخلص من التنسيق المرتبط به.)

هل كانت مفيدة؟

المحلول

لم أجد وسيلة أنيقة بشكل خاص للتعامل مع هذا: ما قمت به في الماضي هو:

1) امسك رسائل WM_KEYDOWN للتحكم وتجاهل جميع مفاتيح التنسيق (CTRL + E، J، R، L، 1،2،5، +، و CTRL + SHIFT + A، 7)

2) اصطياد جميع عمليات اللصق عن طريق اصطياد الرسائل WM_COMMAND مع معرف من ID_EDIT_PAST، واستبدل رسالة لصق برسالة EM_PASTEPECIAL، CF_UNICODETEXT إلى عنصر التحكم.(هذا هو مع MFC: اعتمادا على الإطار أو اللغة التي تستخدمها، قد يتطلب ذلك من اصطياد CTRL + V وشبيه بدلا من id_edit_paste.)

ليست جميلة، وأنا لا ننجح، لكن يبدو أن العمل.

نصائح أخرى

من المحتمل أن تكون هذه الإجابة متأخرة بعض الشيء ولكن بالنسبة لأي شخص آخر يبحث عن إجابة لهذه الأسئلة، فإن أفضل طريقة وجدتها للتحكم الكامل في عمليات اللصق في عنصر تحكم التحرير الغني هي توفير تنفيذ IRichEditOleCallback::QueryAcceptData ثم قم بإرجاع S_FALSE لإيقافها جميعًا معًا أو لتصفية تنسيقات معينة للوحة الحافظة عن طريق تغيير المعلمة lpcfFormat.

توفر الدالة CRichEditView::QueryAcceptData في MFC مثالاً ممتازًا عن كيفية القيام بذلك.سيعمل هذا مع جميع أنواع عمليات اللصق بما في ذلك السحب والإفلات، لذا فهي أفضل طريقة للتحكم الكامل في ما يحدث.

حتى في وقت لاحق :)

giveacodicetagpre. يبدو أن

قد تفعل الخدعة: نصصق معجون نص عادي، يتم تعطيل مفاتيح التنسيق الساخنة.

href="https://docs.microsoft.com/en-us/windows/desktop/controls/em-geteditstyle" rel="nofollow noreferrer"> ses_ematesesedit : عند تشغيل هذا البت، محاولات تحرير الغنية لمحاكاة عنصر تحكم تحرير النظام (الافتراضي: 0).

لا تزال تحتفظ ببعض ميزات "المكافأة" في Richedit، مثل Scrollbars عند الطلب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top