⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imedefs.h

📁 This folder includes IME sample source code for Simplified Chinese IMEs
💻 H
📖 第 1 页 / 共 2 页
字号:
                                // useful in UNI-IME, other IME can use one
// the system charset is not NATIVE_CHARSET
    BOOL        fDiffSysCharSet;
// IME Charact
    TCHAR       UsedCodes[17];
    WORD        wNumCodes;
    DWORD       IC_Enter;
    DWORD       IC_Trace;

    RECT        rcWorkArea;     // the work area of applications
// Chinese char width & height
    int         xChiCharWi;
    int         yChiCharHi;
// candidate list of composition
    int         xCandWi;        // width of candidate list
    int         yCandHi;        // high of candidate list
    int         cxCandBorder;   // border width of candidate list
    int         cyCandBorder;   // border height of candidate list
    RECT        rcCandText;     // text position relative to candidate window
    RECT        rcCandBTD;
    RECT        rcCandBTU;
    RECT        rcCandBTE;
    RECT        rcCandBTH;
    RECT        rcCandInf;
    RECT        rcCandIcon;
// status window
    int         xStatusWi;      // width of status window
    int         yStatusHi;      // high of status window
    RECT        rcStatusText;   // text position relative to status window
    RECT        rcImeIcon;      // ImeIcon position relative to status window
    RECT        rcImeName;      // ImeName position relative to status window
    RECT        rcShapeText;    // shape text relative to status window
    RECT        rcSymbol;       // symbol relative to status window
    RECT        rcSKText;       // SK text relative to status window
// full shape space (reversed internal code)
    WORD        wFullSpace;
// full shape chars (internal code)
    WORD        wFullABC[NFULLABC];
// error string
    TCHAR        szStatusErr[8];
    int         cbStatusErr;
// candidate string start from 0 or 1
    int         iCandStart;
// setting of UI
    int         iPara;
    int         iPerp;
    int         iParaTol;
    int         iPerpTol;
#if defined(CROSSREF)
// reverse conversion
    HKL         hRevKL;         // the HKL of reverse mapping IME
    DWORD        nRevMaxKey;
#endif //CROSSREF
} IMEG;

typedef IMEG      *PIMEG;
typedef IMEG NEAR *NPIMEG;
typedef IMEG FAR  *LPIMEG;


#define IME_SELECT_GB     0x0001
#define IME_SELECT_XGB    0x0002
#define IME_SELECT_AREA   0x0004

typedef struct _tagPRIVCONTEXT {// IME private data for each context
    int         iImeState;      // the composition state - input, choose, or
    BOOL        fdwImeMsg;      // what messages should be generated
    DWORD       dwCompChar;     // wParam of WM_IME_COMPOSITION
    DWORD       fdwGcsFlag;     // lParam for WM_IME_COMPOSITION
    UINT        uSYHFlg;
    UINT        uDYHFlg;
    UINT        uDSMHCount;
    UINT        uDSMHFlg;
// input data
    TCHAR       bSeq[13];        // sequence code of input char
    DWORD       fdwGB;
#ifdef CROSSREF
    HIMCC           hRevCandList;   // memory for reconsion result
#endif //CROSSREF
} PRIVCONTEXT;

typedef PRIVCONTEXT      *PPRIVCONTEXT;
typedef PRIVCONTEXT NEAR *NPPRIVCONTEXT;
typedef PRIVCONTEXT FAR  *LPPRIVCONTEXT;

typedef struct _tagUIPRIV {     // IME private UI data
    HWND    hCompWnd;           // composition window
    int     nShowCompCmd;
    HWND    hCandWnd;           // candidate window for composition
    int     nShowCandCmd;
    HWND    hSoftKbdWnd;        // soft keyboard window
    int     nShowSoftKbdCmd;
    HWND    hStatusWnd;         // status window
    int     nShowStatusCmd;
    DWORD   fdwSetContext;      // the actions to take at set context time
    HIMC    hIMC;               // the recent selected hIMC
    HWND    hCMenuWnd;          // a window owner for context menu
    HWND    hSoftkeyMenuWnd;    // a window owner for softkeyboard menu
} UIPRIV;

typedef UIPRIV      *PUIPRIV;
typedef UIPRIV NEAR *NPUIPRIV;
typedef UIPRIV FAR  *LPUIPRIV;


typedef struct tagNEARCARET {   // for near caret offset calculatation
    int iLogFontFacX;
    int iLogFontFacY;
    int iParaFacX;
    int iPerpFacX;
    int iParaFacY;
    int iPerpFacY;
} NEARCARET;

typedef NEARCARET      *PNEARCARET;
typedef NEARCARET NEAR *NPNEARCARET;
typedef NEARCARET FAR  *LPNEARCARET;

extern HINSTANCE hInst;
extern IMEG      sImeG;
extern IMEL      sImeL;
extern LPIMEL    lpImeL;
extern HDC       ST_UI_hDC;
extern UINT      uStartComp;
extern UINT      uOpenCand;
extern UINT      uCaps;
extern DWORD     SaTC_Trace;
extern TCHAR     szUIClassName[];
extern TCHAR     szCompClassName[];
extern TCHAR     szCandClassName[];
extern TCHAR     szStatusClassName[];
extern TCHAR     szCMenuClassName[];
extern TCHAR     szSoftkeyMenuClassName[];
extern TCHAR     szHandCursor[];
extern TCHAR     szChinese[];
extern TCHAR     szCandInf[];
#if defined(COMBO_IME)
extern TCHAR    pszImeName[IMEINDEXNUM][MAX_PATH];
extern TCHAR    *szImeName;
extern TCHAR    szImeRegName[];
#else
extern TCHAR      szImeName[];
#endif //COMBO_IME
extern TCHAR      szImeXGBName[];
extern TCHAR      szSymbol[];
extern TCHAR      szNoSymbol[];
extern TCHAR      szEnglish[];
extern TCHAR      szCode[];
extern TCHAR      szEudc[];
extern TCHAR      szFullShape[];
extern TCHAR      szHalfShape[];
extern TCHAR      szNone[];
extern TCHAR      szSoftKBD[];
extern TCHAR      szNoSoftKBD[];
extern TCHAR      szDigit[];
extern BYTE      bUpper[];
extern WORD      fMask[];
extern TCHAR      szRegIMESetting[];
extern TCHAR      szPerp[];
extern TCHAR      szPara[];
extern TCHAR      szPerpTol[];
extern TCHAR      szParaTol[];
#if defined(COMBO_IME)
extern TCHAR      szRegImeIndex[];
#endif
extern const NEARCARET ncUIEsc[], ncAltUIEsc[];
extern const POINT ptInputEsc[], ptAltInputEsc[];
extern BYTE      VirtKey48Map[];
extern TCHAR     szTrace[];
extern TCHAR     szWarnTitle[];
extern TCHAR     szErrorTitle[];
#if defined(CROSSREF)
extern TCHAR szRegRevKL[];
extern TCHAR szRegRevMaxKey[];
#endif

int WINAPI LibMain(HANDLE, WORD, WORD, LPTSTR);         // init.c
LRESULT CALLBACK UIWndProc(HWND, UINT, WPARAM, LPARAM); // ui.c
LRESULT PASCAL UIPaint(HWND);                           // ui.c

// for engine
WORD PASCAL GBEngine(LPPRIVCONTEXT);
WORD PASCAL AsciiToGB(LPPRIVCONTEXT);
WORD PASCAL AsciiToArea(LPPRIVCONTEXT);
WORD PASCAL CharToHex(TCHAR);

void PASCAL AddCodeIntoCand(LPCANDIDATELIST, WORD);             // compose.c
void PASCAL CompWord(WORD, LPINPUTCONTEXT, LPCOMPOSITIONSTRING, LPPRIVCONTEXT,
     LPGUIDELINE);                                              // compose.c
UINT PASCAL Finalize(LPINPUTCONTEXT, LPCOMPOSITIONSTRING,
     LPPRIVCONTEXT, WORD);                                      // compose.c
void PASCAL CompEscapeKey(LPINPUTCONTEXT, LPCOMPOSITIONSTRING,
     LPGUIDELINE, LPPRIVCONTEXT);                               // compose.c

void PASCAL SelectOneCand(LPINPUTCONTEXT, LPCOMPOSITIONSTRING,
     LPPRIVCONTEXT, LPCANDIDATELIST);                           // chcand.c
void PASCAL CandEscapeKey(LPINPUTCONTEXT, LPPRIVCONTEXT);       // chcand.c
void PASCAL ChooseCand(WORD, LPINPUTCONTEXT, LPCANDIDATEINFO,
     LPPRIVCONTEXT);                                            // chcand.c

void PASCAL SetPrivateFileSetting(LPBYTE, int, DWORD, LPCTSTR); // ddis.c

void PASCAL InitCompStr(LPCOMPOSITIONSTRING);                   // ddis.c
BOOL PASCAL ClearCand(LPINPUTCONTEXT);                          // ddis.c
LONG OpenReg_PathSetup(HKEY *);
LONG OpenReg_User(HKEY ,LPCTSTR ,PHKEY);
VOID InfoMessage(HANDLE ,WORD );                                 //ddis.c
VOID FatalMessage(HANDLE ,WORD);                                 //ddis.c
#if defined(CROSSREF)
void PASCAL ReverseConversionList(HWND);                         // ddis.c
void CrossReverseConv(LPINPUTCONTEXT, LPCOMPOSITIONSTRING, LPPRIVCONTEXT, LPCANDIDATELIST);
#endif

UINT PASCAL TranslateImeMessage(LPTRANSMSGLIST, LPINPUTCONTEXT, LPPRIVCONTEXT);        // toascii.c

void PASCAL GenerateMessage(HIMC, LPINPUTCONTEXT,LPPRIVCONTEXT);  // notify.c

DWORD PASCAL ReadingToPattern(LPCTSTR, BOOL);                   // regword.c
void  PASCAL ReadingToSequence(LPCTSTR, LPBYTE, BOOL);          // regword.c

void PASCAL DrawDragBorder(HWND, LONG, LONG);                   // uisubs.c
void PASCAL DrawFrameBorder(HDC, HWND);                         // uisubs.c

void PASCAL ContextMenu(HWND, int, int);                        // uisubs.c
void PASCAL SoftkeyMenu(HWND, int, int);                        // uisubs.c
LRESULT CALLBACK ContextMenuWndProc(HWND, UINT, WPARAM,LPARAM); // uisubs.c
LRESULT CALLBACK SoftkeyMenuWndProc(HWND, UINT, WPARAM,LPARAM); // uisubs.c

HWND    PASCAL GetCompWnd(HWND);                                // compui.c
void    PASCAL SetCompPosition(HWND, HIMC, LPINPUTCONTEXT);     // compui.c
void    PASCAL SetCompWindow(HWND);                             // compui.c
void    PASCAL MoveDefaultCompPosition(HWND);                   // compui.c
void    PASCAL ShowComp(HWND, int);                             // compui.c
void    PASCAL StartComp(HWND);                                 // compui.c
void    PASCAL EndComp(HWND);                                   // compui.c
void    PASCAL UpdateCompWindow(HWND);                          // compui.c
LRESULT CALLBACK CompWndProc(HWND, UINT, WPARAM, LPARAM);       // compui.c
void    PASCAL CompCancel(HIMC, LPINPUTCONTEXT);

HWND    PASCAL GetCandWnd(HWND);                                // candui.c
void    PASCAL CalcCandPos(HIMC, HWND, LPPOINT);                            // candui.c
LRESULT PASCAL SetCandPosition(HWND);                           // candui.c
void    PASCAL ShowCand(HWND, int);                             // candui.c
void    PASCAL OpenCand(HWND);                                  // candui.c
void    PASCAL CloseCand(HWND);                                 // candui.c
void    PASCAL PaintCandWindow(HWND, HDC);                      // candui.c
LRESULT CALLBACK CandWndProc(HWND, UINT, WPARAM, LPARAM);       // candui.c
void    PASCAL UpdateSoftKbd(HWND);

HWND    PASCAL GetStatusWnd(HWND);                              // statusui.c
LRESULT PASCAL SetStatusWindowPos(HWND);                        // statusui.c
void    PASCAL ShowStatus(HWND, int);                           // statusui.c
void    PASCAL OpenStatus(HWND);                                // statusui.c
LRESULT CALLBACK StatusWndProc(HWND, UINT, WPARAM, LPARAM);     // statusui.c
void DrawConvexRect(HDC, int, int, int, int);
void DrawConvexRectP(HDC, int, int, int, int);
void DrawConcaveRect(HDC, int, int, int, int);
BOOL IsUsedCode(WORD);
void PASCAL InitStatusUIData(int, int);
void PASCAL InitCandUIData(int, int, int);
BOOL UpdateStatusWindow(HWND);
void PASCAL EngChCand(LPCOMPOSITIONSTRING, LPCANDIDATELIST, LPPRIVCONTEXT, LPINPUTCONTEXT, WORD);
void PASCAL CandPageDownUP(HWND, UINT);
void PASCAL GenerateImeMessage(HIMC, LPINPUTCONTEXT, DWORD);
UINT PASCAL TranslateSymbolChar(LPTRANSMSGLIST, WORD, BOOL);
UINT PASCAL TranslateFullChar(LPTRANSMSGLIST, WORD);
UINT PASCAL ConvListProcessKey(BYTE,LPPRIVCONTEXT);     //ddis.c
UINT PASCAL GBProcessKey(WORD, LPPRIVCONTEXT);
UINT PASCAL XGBProcessKey(WORD, LPPRIVCONTEXT);
WORD PASCAL XGBEngine(LPPRIVCONTEXT);
void PASCAL XGBAddCodeIntoCand(LPCANDIDATELIST, WORD);             // compose.c
UINT PASCAL UnicodeProcessKey(WORD wCharCode, LPPRIVCONTEXT  lpImcP);
WORD PASCAL UnicodeEngine(LPPRIVCONTEXT lpImcP);
#if defined(COMBO_IME)
void PASCAL UnicodeAddCodeIntoCand(LPCANDIDATELIST, WORD);
#endif
// dialog procedure
BOOL FAR PASCAL ImeVerDlgProc(HWND, UINT, WORD, LONG);
BOOL FAR PASCAL CrtWordDlgProc(HWND, UINT, WORD, LONG);
BOOL FAR PASCAL SetImeDlgProc(HWND, UINT, WORD, LONG);

#ifdef MUL_MONITOR  //  Multi-Monitor Support
RECT PASCAL ImeMonitorWorkAreaFromWindow(HWND);                 // mmonitor.c
RECT PASCAL ImeMonitorWorkAreaFromPoint(POINT);                 // mmonitor.c
RECT PASCAL ImeMonitorWorkAreaFromRect(LPRECT);                 // mmonitor.c
#endif

#ifdef UNICODE
extern TCHAR SKLayout[NumsSK][MAXSOFTKEYS];
extern TCHAR SKLayoutS[NumsSK][MAXSOFTKEYS];
#else
extern BYTE SKLayout[NumsSK][MAXSOFTKEYS*2];
extern BYTE SKLayoutS[NumsSK][MAXSOFTKEYS*2];
#endif  //UNICODE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -