INPUTSET.CPP
上传用户:zhang8947
上传日期:2007-01-08
资源大小:1910k
文件大小:4k
源码类别:

多国语言处理

开发平台:

Visual C++

  1. // inputset.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "resource.h"
  5. #include "systemse.h"
  6. #include "inputset.h"
  7. #include "iniinput.h"
  8. #include "csinput.h" //输入法头文件
  9. extern CInputInit OInputInit ; //输入菜单初始化对象
  10. #ifdef _DEBUG
  11. #undef THIS_FILE
  12. static char BASED_CODE THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CInputSet dialog
  16. CInputSet::CInputSet(UINT id)
  17. : CCommonPage(id)
  18. {
  19. //{{AFX_DATA_INIT(CInputSet)
  20. // NOTE: the ClassWizard will add member initialization here
  21. //}}AFX_DATA_INIT
  22. }
  23. void CInputSet::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CPropertyPage::DoDataExchange(pDX);
  26. //{{AFX_DATA_MAP(CInputSet)
  27. DDX_Control(pDX, IDC_LIST1, m_InputMethods);
  28. //}}AFX_DATA_MAP
  29. }
  30. BEGIN_MESSAGE_MAP(CInputSet, CPropertyPage)
  31. //{{AFX_MSG_MAP(CInputSet)
  32. ON_BN_CLICKED(IDC_ADD_INPUT_METHOD, OnAddInputMethod)
  33. ON_BN_CLICKED(IDC_DEL_INPUT_METHOD, OnDelInputMethod)
  34. ON_LBN_DBLCLK(IDC_LIST1, OnDelInputMethod)
  35. //}}AFX_MSG_MAP
  36. END_MESSAGE_MAP()
  37. /////////////////////////////////////////////////////////////////////////////
  38. // CInputSet message handlers
  39. void CInputSet::OnAddInputMethod()
  40. {
  41. // TODO: Add your control notification handler code here
  42. CFileDialog fileDialog( TRUE , "iml" , "*.iml" ,
  43. OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ,
  44. "CS Input Method(*.iml)|*.iml|UCDOS Input Method(*.txt)|*.txt| All Files (*.*) | *.* ||"
  45. ) ;
  46. if( fileDialog.DoModal() == IDOK )
  47. {
  48. //得到文件后缀
  49. CString fileExt =fileDialog.GetFileExt() ;
  50. if( fileExt != "TXT" && fileExt != "IML" )
  51. AfxMessageBox( "文件类型不对,必须是.txt或.iml文件!" ,
  52. MB_OK|MB_ICONINFORMATION ) ;
  53. else
  54. {
  55. //增加一种输入法
  56. CString path =fileDialog.GetPathName() ;
  57. //判断文件类型
  58. if( fileExt == "TXT" ) //是UCDOS文本文件
  59. {
  60. if( !TranslateUcdos( path ) ) //转换失败
  61. return ;
  62.            
  63. ::MessageBox( this->m_hWnd , "输入法文件转换成功" ,
  64. "转换输入法" , 
  65. MB_OK|MB_ICONEXCLAMATION ) ;
  66. //重新组织文件名,组织库文件名
  67. path =path.Left( path.GetLength()-3 ) ; //去掉TXT后缀
  68. path +="iml" ; //新后缀
  69. }
  70. //关闭以前的输入法
  71. UnloadInputLib() ;
  72. //安装该输入法
  73. if( !LoadInputLib( path ) )
  74. return ;
  75. //得到输入法名
  76. char sName[20] ;
  77. GetInputMethodName( sName , 20 ) ;
  78. char sBuff[100] ;
  79. wsprintf( sBuff , "%s输入法安装成功!" , sName ) ;
  80. ::MessageBox( m_hWnd , sBuff , "安装输入法" , 
  81. MB_OK|MB_ICONEXCLAMATION ) ;
  82. //将输入法加入列表框
  83. m_InputMethods.InsertString( 0 , sName ) ;
  84. //将输入法加入INI文件和菜单
  85. OInputInit.AddInputMethod( sName , path ) ;
  86. }
  87. }
  88. }
  89. void CInputSet::OnDelInputMethod()
  90. {
  91. // TODO: Add your control notification handler code here
  92. int nSelectItem =m_InputMethods.GetCurSel() ;
  93. if( nSelectItem == LB_ERR ) //没有选择
  94. return ;
  95. if( ::MessageBox( m_hWnd , "真想删除该输入法吗?" , "警告" ,
  96. MB_YESNO|MB_ICONEXCLAMATION ) == IDYES )
  97. {
  98. //将其从列表框中删除
  99. m_InputMethods.DeleteString( nSelectItem ) ;
  100. //将其从INI文件和菜单中删除
  101. OInputInit.DeleteInputMethod( nSelectItem ) ;
  102. }
  103. }
  104. BOOL CInputSet::OnInitDialog()
  105. {
  106. CCommonPage ::OnInitDialog();
  107. // TODO: Add extra initialization here
  108. //得到输入法数
  109. int nMethodNum =OInputInit.GetInputMethodNum() ;
  110. char sInputName[100] ; //输入法名称
  111. char sInputFileName[100] ; //输入法文件名
  112.                
  113. for( int i=1 ; i<nMethodNum ; i++ )
  114. {
  115. //得到输入法的名字与文件名
  116. OInputInit.GetInputMethodMess( i , sInputName , 100 ,
  117. sInputFileName , 100 ) ;
  118. //将输入法名加入列表框
  119. m_InputMethods.InsertString( 0 , sInputName ) ;
  120. }
  121. return TRUE;  // return TRUE  unless you set the focus to a control
  122. }