您的位置:首页 > 其它

windows mobile WM 6.1MMS subject不超过40个字符添加方法

2009-04-03 21:46 225 查看
wm6.1,3G手机开发,对subject长度做了要求,规定subject大小不超过40个字符。

(1)如果采用uincode,即为2字节的定长编码,所有的汉字或字母等都是2个字节,下文列出了各种语言版本的uinicode编码的范围:

unicode码的分布情况,够清楚了吧!不仅汉字,什么都有了! 
  ******************************************************* 
  0000..007F;  Basic  Latin 
  0080..00FF;  Latin-1  Supplement 
  0100..017F;  Latin  Extended-A 
  0180..024F;  Latin  Extended-B 
  0250..02AF;  IPA  Extensions 
  02B0..02FF;  Spacing  Modifier  Letters 
  0300..036F;  Combining  Diacritical  Marks 
  0370..03FF;  Greek 
  0400..04FF;  Cyrillic 
  0530..058F;  Armenian 
  0590..05FF;  Hebrew 
  0600..06FF;  Arabic 
  0700..074F;  Syriac     
  0780..07BF;  Thaana 
  0900..097F;  Devanagari 
  0980..09FF;  Bengali 
  0A00..0A7F;  Gurmukhi 
  0A80..0AFF;  Gujarati 
  0B00..0B7F;  Oriya 
  0B80..0BFF;  Tamil 
  0C00..0C7F;  Telugu 
  0C80..0CFF;  Kannada 
  0D00..0D7F;  Malayalam 
  0D80..0DFF;  Sinhala 
  0E00..0E7F;  Thai 
  0E80..0EFF;  Lao 
  0F00..0FFF;  Tibetan 
  1000..109F;  Myanmar   
  10A0..10FF;  Georgian 
  1100..11FF;  Hangul  Jamo 
  1200..137F;  Ethiopic 
  13A0..13FF;  Cherokee 
  1400..167F;  Unified  Canadian  Aboriginal  Syllabics 
  1680..169F;  Ogham 
  16A0..16FF;  Runic 
  1780..17FF;  Khmer 
  1800..18AF;  Mongolian 
  1E00..1EFF;  Latin  Extended  Additional 
  1F00..1FFF;  Greek  Extended 
  2000..206F;  General  Punctuation 
  2070..209F;  Superscripts  and  Subscripts 
  20A0..20CF;  Currency  Symbols 
  20D0..20FF;  Combining  Marks  for  Symbols 
  2100..214F;  Letterlike  Symbols 
  2150..218F;  Number  Forms 
  2190..21FF;  Arrows 
  2200..22FF;  Mathematical  Operators 
  2300..23FF;  Miscellaneous  Technical 
  2400..243F;  Control  Pictures 
  2440..245F;  Optical  Character  Recognition 
  2460..24FF;  Enclosed  Alphanumerics 
  2500..257F;  Box  Drawing 
  2580..259F;  Block  Elements 
  25A0..25FF;  Geometric  Shapes 
  2600..26FF;  Miscellaneous  Symbols 
  2700..27BF;  Dingbats 
  2800..28FF;  Braille  Patterns 
  2E80..2EFF;  CJK  Radicals  Supplement 
  2F00..2FDF;  Kangxi  Radicals 
  2FF0..2FFF;  Ideographic  Description  Characters 
  3000..303F;  CJK  Symbols  and  Punctuation 
  3040..309F;  Hiragana 
  30A0..30FF;  Katakana 
  3100..312F;  Bopomofo 
  3130..318F;  Hangul  Compatibility  Jamo 
  3190..319F;  Kanbun 
  31A0..31BF;  Bopomofo  Extended 
  3200..32FF;  Enclosed  CJK  Letters  and  Months 
  3300..33FF;  CJK  Compatibility 
  3400..4DB5;  CJK  Unified  Ideographs  Extension  A 
  4E00..9FFF;  CJK  Unified  Ideographs 
  A000..A48F;  Yi  Syllables 
  A490..A4CF;  Yi  Radicals 
  AC00..D7A3;  Hangul  Syllables 
  D800..DB7F;  High  Surrogates 
  DB80..DBFF;  High  Private  Use  Surrogates 
  DC00..DFFF;  Low  Surrogates 
  E000..F8FF;  Private  Use 
  F900..FAFF;  CJK  Compatibility  Ideographs 
  FB00..FB4F;  Alphabetic  Presentation  Forms 
  FB50..FDFF;  Arabic  Presentation  Forms-A 
  FE20..FE2F;  Combining  Half  Marks 
  FE30..FE4F;  CJK  Compatibility  Forms 
  FE50..FE6F;  Small  Form  Variants 
  FE70..FEFE;  Arabic  Presentation  Forms-B 
  FEFF..FEFF;  Specials 
  FF00..FFEF;  Halfwidth  and  Fullwidth  Forms 
  FFF0..FFFD;  Specials 
  10300..1032F;  Old  Italic 
  10330..1034F;  Gothic 
  10400..1044F;  Deseret 
  1D000..1D0FF;  Byzantine  Musical  Symbols 
  1D100..1D1FF;  Musical  Symbols 
  1D400..1D7FF;  Mathematical  Alphanumeric  Symbols 
  20000..2A6D6;  CJK  Unified  Ideographs  Extension  B 
  2F800..2FA1F;  CJK  Compatibility  Ideographs  Supplement 
  E0000..E007F;  Tags 
  F0000..FFFFD;  Private  Use 
  100000..10FFFD;  Private  Use 
汉字采用0x4e00-0x9fa5;

(2)ANSI字符集charset,及扩展MBCS,即为变长编码;如GB2312就是采用这种的方式;

当发现小于127,认为是一个ASCII字符,当发现大于127时候,会认为他是一个leading 字符,需要和后面的一个字节结合起来为一个字符;

如:0x31,小于127,被翻译成一个asciI字符;

      0xcdef,cd大于128,所以和CDEF结合一起来看成一个字符;

 

回到先前命题,现在对edit control控件限制字符个数,需要关注以下几个消息,

EN_UPDATE,

EN_SETFOCUS,

EN_CHANGE,

EN_KILLFOCUS,

EN_MAXEXT,

对一个edit控件,获取消息的步骤,

(1)EN_SETFOCUS,获得光标,返回消息

(2)EN_UPDATE,这个消息是在edit控件显示文本text之前,而在输入文本text之后发生;

(3)EN_CHANGE,在控件中显示文本消息后启动;

于是我们可以把处理函数放在EN_UPDATE中,

TCHAR szTemp[40+1];

memset(szTemp,0,sizeof(szTemp));//unicode ,TCHAR == WCHAR

GetDlgItemText(hwndlg,ID_***,szTemp,40);

int iNum = 0;

for(int loop = 0;loop<40;loop++)

{

    if(szTemp[loop] >= 0x4e00 && szTemp[loop] <= 0x9fa5)

    {

         iNum +=2;

         if(iNum>40)

         {

              szTemp[loop] = 0x0000;

              SetDlgItemText(hwnDlg,ID_**,szTemp,40);

 

         }

       }

          else if(szTemp != 0x0000)

        {

              iNum ++;

            

         if(iNum>40)

         {

              szTemp[loop] = 0x0000;

              SetDlgItemText(hwnDlg,ID_**,szTemp,40);

 

         }

        }

        else

             break;

   

}

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息