加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(55)

发布时间:2020-12-15 05:01:25 所属栏目:百科 来源:网络整理
导读:在语言选择里,倒底做了什么样的事情,让 ROS 系统可以选择不同的语言? ROS 系统又是怎么样实现不同的语言支持的呢? #001 static PAGE_NUMBER #002 LanguagePage(PINPUT_RECORD Ir) #003 { 初始化语言列表。 #004 /* Initialize the computer settings lis

在语言选择里,倒底做了什么样的事情,让ROS系统可以选择不同的语言?ROS系统又是怎么样实现不同的语言支持的呢?

#001 static PAGE_NUMBER

#002 LanguagePage(PINPUT_RECORD Ir)

#003 {

初始化语言列表。

#004 /* Initialize the computer settings list */

#005 if (LanguageList == NULL)

#006 {

根据安装的配置文件选择语言。

#007 LanguageList = CreateLanguageList(SetupInf,DefaultLanguage);

#008

#009 if (LanguageList == NULL)

#010 {

#011 PopupError("Setup failed to initialize available translations",NULL,POPUP_WAIT_NONE);

#012 return INTRO_PAGE;

#013 }

#014 }

#015

在屏幕上显示语言列表。

#016 DrawGenericList(LanguageList,

#017 2,

#018 18,

#019 xScreen - 3,

#020 yScreen - 3);

#021

滚动选择的语言上。

#022 ScrollToPositionGenericList (LanguageList,GetDefaultLanguageIndex());

#023

#024 MUIDisplayPage(LANGUAGE_PAGE);

#025

循环处理,直到用户选择了安装的语言。

#026 while(TRUE)

#027 {

#028 CONSOLE_ConInKey(Ir);

#029

使用向下方向键选择语言。

#030 if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#031 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */

#032 {

#033 #if 0

#034 SelectedLanguageId = (PWCHAR)GetListEntryUserData(GetCurrentListEntry(LanguageList));

#035

#036 /* Redraw language selection page in native language */

#037 MUIDisplayPage(LANGUAGE_PAGE);

#038 #endif

#039

#040 ScrollDownGenericList (LanguageList);

#041 }

使用向上方向键选择语言。

#042 else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#043 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP)) /* UP */

#044 {

#045 #if 0

#046 SelectedLanguageId = (PWCHAR)GetListEntryUserData(GetCurrentListEntry(LanguageList));

#047

#048 /* Redraw language selection page in native language */

#049 MUIDisplayPage(LANGUAGE_PAGE);

#050 #endif

#051

#052 ScrollUpGenericList (LanguageList);

#053 }

#054 if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#055 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_NEXT)) /* PAGE DOWN */

#056 {

#057 ScrollPageDownGenericList (LanguageList);

#058 }

#059 else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#060 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_PRIOR)) /* PAGE UP */

#061 {

#062 ScrollPageUpGenericList (LanguageList);

#063 }

如果用户按F3退出安装程序。

#064 else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#065 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */

#066 {

#067 if (ConfirmQuit(Ir) == TRUE)

#068 return QUIT_PAGE;

#069 }

如果用户按回车键,就选择相应的语言,并且进入下一个页面。

#070 else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */

#071 {

#072 SelectedLanguageId = (PWCHAR)GetListEntryUserData(GetCurrentListEntry(LanguageList));

#073

#074 if (wcscmp(SelectedLanguageId,DefaultLanguage))

#075 {

#076 UpdateKBLayout();

#077 }

#078

#079 // Load the font

#080 SetConsoleCodePage();

#081

这里进入下一个介绍页面。

#082 return INTRO_PAGE;

#083 }

#084 else if ((Ir->Event.KeyEvent.uChar.AsciiChar > 0x60) && (Ir->Event.KeyEvent.uChar.AsciiChar < 0x7b))

#085 {

#086 /* a-z */

#087 GenericListKeyPress (LanguageList,Ir->Event.KeyEvent.uChar.AsciiChar);

#088 }

#089 }

#090

#091 return INTRO_PAGE;

#092 }

通过上面的函数处理,就可以选不同的语言。在函数里调用SetConsoleCodePage函数来设置代码页,也就是通过代码页来实现不同的语言来显示。也就是通过下面的代码来实现:

#001 BOOL WINAPI

#002 SetConsoleOutputCP(

#003 IN UINT wCodepage)

#004 {

#005 HANDLE hConsoleOutput;

#006 IO_STATUS_BLOCK IoStatusBlock;

#007 NTSTATUS Status;

#008

#009 hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

#010

#011 Status = NtDeviceIoControlFile(

#012 hConsoleOutput,

#013 NULL,

#014 NULL,

#015 NULL,

#016 &IoStatusBlock,

#017 IOCTL_CONSOLE_LOADFONT,

#018 &wCodepage,

#019 sizeof(ULONG),

#020 NULL,

#021 0);

#022 return NT_SUCCESS(Status);

#023 }

代码页的作用,就是设置不同国家的编码方式。比如同一个16进制的码8022,在不同国家里,它是表示不同的语言文字。因此选择代码页,就相当于选择不同国家的语言排列方式。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读