سؤال

ونحن كنت تواجه مشكلة في وضع تعليق الإطار باستخدام الأحرف السيريلية أو اليابانية. فإما نرى علامات استفهام أو القمامة العشوائية، ولكن ليس النص الذي نريده. لقد حاولت استخدام ترميزات مختلفة، SetWindowText ()، SetWindowTextW ()، SetWindowTextA ()، وهلم جرا. لا يمكننا حتى الحصول على عمل عن طريق تمرير سلسلة حرفية لSetWindowText ().

وتثبيت ويندوز لدينا لا يبدو أن لديها كل ما تحتاجه - إنترنت إكسبلورر وفايرفوكس لا تظهر التسميات السيريلية واليابانية بشكل صحيح، على سبيل المثال. لذلك أنا متأكد من أننا لسنا العثور على الجمع بين الترميز / الطريقة الصحيحة. أي اقتراحات؟

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

المحلول

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

وأيضا، كيف <م> إنشاء نافذة؟ باستخدام API explicitely يونيكود علم مثل CreateWindowExW()؟ إن لم يكن، تأكد من أن يتم ترجمة البرنامج ك Unicode.

إذا لم يتم ترجمة البرنامج ك Unicode، قد ترغب في إما تعديل بك "اللغة لتطبيقات غير يونيكود" في الخيارات الإقليمية CP /. إعادة تشغيل المطلوبة. أو بشكل أكثر سهولة: استخدام MS AppLocale للمحاكاة لغة نظام السيريلية

نصائح أخرى

والمشكلة كنت قد حصلت على (في تخمين) هو أن إطار الإطار المستوى الأعلى من التطبيق الخاص بك نافذة ANSI. تحت غطاء محرك السيارة، عند إنشاء إطار (مع CreateWindow () أو CreateWindowEx ()) يجب توفير فئة إطار. تحدد هذه الفئة إطار خصائص النافذة، بما في ذلك ما إذا كان أو لم يكن، افتراضيا، تقبل الرسائل ANSI أو رسائل يونيكود. بدوره، وهو يحدد من قبل سواء كنت (أو الإطار الخاص بك) تسجيل فئة الإطار من خلال الدعوة RegisterClassExA () أو RegisterClassExW ().

وماذا يكاد يكون من المؤكد أن happing صفك إطار المستوى اعلى يتم تسجيله مع RegisterClassExA (). وهذا يعني أن الإجراء الإطار الافتراضي للإطار سوف تترجم كافة السلاسل Unicode في رسائل إلى ANSI قبل معالجتها، وبالتالي فإن علامات استفهام وشخصيات غريبة في كل مكان.

وأسهل حل لهذا كله هو جعل مجرد يونيكود طلبك في جميع أنحاء (يتم عادة من خلال تعريف _UNICODE). الطريقة الأخرى هي لمعرفة أين يتم استدعاء RegisterClassEx ()، وجعله RegisterClassExW (). قد يسبب هذا مشاكل ANSI / يونيكود مع رسائل أخرى، ولكن العمل الذي ينبغي (نظريا على الأقل). بطبيعة الحال، سوف إما طريقة كسر ويندوز 9X، اذا كان هذا يمثل مشكلة.

وإذا كان كل هذا يبدو معقدا بشكل مرعب، وكنت لا بأس ...

لديك لتجميع التطبيق الخاص بك مع _UNICODE محددة. خلاف ذلك جميع النوافذ ستظل MBCS وليس UTF-16، وبالتالي لا يمكن أن تظهر الأحرف السيريلية أو اليابانية إذا لا يتطابق مع مخطط الشفرة.

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