请问可以这样定义分块查找中的索引表吗,如果不行的话,该咋办?
  #define MAX_EACH_PY_NUM 41
typedef struct {                '创建索引表 
    WORD wKey;
    TCHAR szPY[8];
    TCHAR hzcftab[8];        
    TCHAR  jxmtab[8];  
    TCHAR  hzctab[10];  
    TCHAR pytab[8];
    TCHAR pywbtab[80];  } PINYIN,FAR *LPPINYIN;
PINYIN      aPYTab[26][MAX_EACH_PY_NUM] = {0};void LoadHZDictionary( LPTSTR  lpStr)
{
TCHAR szPY[20],szHZ[2],szJXM[8],szFPY[8],szFF[8];
static int i=0,j=0,nPre=0;
WORD wPYHead=1;
LPPINYIN lpPYTab = (LPPINYIN)aPYTab; _stscanf(lpStr,"%s %s %s %s %s",szHZ,szPY,szFPY,szJXM,szFF);
    //MessageBox(NULL,szJXM,"szJXM",MB_OK);
    wPYHead=(WORD)szPY[0] - (WORD)_T('a');
   if(wPYHead != nPre) 
              j=0;
         _tcscpy((lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->szPY,szPY);
                 _tcscpy((lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->jxmtab,szJXM);
                 _tcscpy((lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->hzctab,szHZ);
                 MessageBox(NULL,(lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->szPY,"lpPYTab",MB_OK);
                 MessageBox(NULL,(lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->jxmtab,"jxmtab",MB_OK);
                 MessageBox(NULL,(lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->hzctab,"hzctab",MB_OK);            (lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->wKey=i+1;             
             nPre=wPYHead;
             i++,j++;
            return;    }

解决方案 »

  1.   

    http://www.china-askpro.com/msg13/qa61.shtml
    如何在VB中控制输入法切换和检测输入法状态编号:QA001261
    建立日期: 1999年6月30日 最后修改日期:2000年1月2日 
    所属类别: Visual Basic - 其他方面 宋海龙: 
        VB5 
        WIN95 
        请告诉我如何在VB中有效地控制中英文输入法的切换和和当前输入法状态的检测。谢谢! 回答:     VB有一个函数IMEStatus()用来检测当前输入法状态。一些控件,如TextBox,包括属性IMEMode。详细的用法可以参考IMEStatus()的说明。下面这个小例子就是禁止用户在切换到Text1时自动关闭中文输入法。 
        Private Sub Text1_GotFocus() 
         Text1.IMEMode = vbIMEOff 
        End Sub 
        但是,VB有关输入法的控制比较有限,当用户切换状态时没有相应的事件,而且不能指定输入法。你要指定输入法,需要利用API函数ActivateKeyboardLayout,详见QA002371 "汉字输入法类控件在VFP下的实现及应用"。 
    可以返回当前输入法的KeyboardlayoutName,所以 ... 输入法,再用activateKeyboardlayout()函数设置当前输入法,最后就可以得到 ...