Ejemplo n.º 1
0
void MakePaintString(HWND hWnd, LPMYSTR lpStr, DWORD dwStrLen, LPDWORD lpCls, DWORD dwClsLen, LPMYSTR lpPaintStr, DWORD dwPaintStrSize)
{
    LPMYSTR lpPaintStart = lpPaintStr;

    lpPaintStr += Mylstrlen(lpPaintStr);

    if (dwStrLen)
    {
        if (dwClsLen)
        {
            lpCls[127] = 0;

            while (*(lpCls+1) && *lpCls < dwStrLen)
            {
                DWORD dwTextLen = *(lpCls+1) - *lpCls;
                LPMYSTR lpT = lpStr + *lpCls;

                memcpy(lpPaintStr,lpT,dwTextLen * sizeof(MYCHAR));
                lpPaintStr += dwTextLen;
                *lpPaintStr = MYTEXT(',');
                lpPaintStr++;
                lpCls++;
            }
            *lpPaintStr = MYTEXT('\0');
        }
        else
        {
            StringCchCopy((LPTSTR)lpPaintStr,dwPaintStrSize, (LPTSTR)lpStr);
            StringCchCat((LPTSTR)lpPaintStr,dwPaintStrSize, (LPTSTR)MYTEXT(","));
        }
    }

}
Ejemplo n.º 2
0
LRESULT HandleComposition(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
    HIMC hIMC = NULL;
    BOOL fRedraw = FALSE;

    hIMC = ImmGetContext(hWnd);

    if (lParam & GCS_COMPSTR)
    {
        dwCompStrLen = MyImmGetCompositionString(hIMC,GCS_COMPSTR,szCompStr,sizeof(szCompStr));
        dwCompStrLen /= sizeof(MYCHAR);
        szCompStr[dwCompStrLen] = MYTEXT('\0');
        fRedraw = TRUE;
    }
    else
    {
        dwCompStrLen = 0;
        szCompStr[0] = MYTEXT('\0');
    }

    if (lParam & GCS_COMPATTR)
    {
        dwCompAttrLen = MyImmGetCompositionString(hIMC,GCS_COMPATTR,bCompAttr,sizeof(bCompAttr));
        fRedraw = TRUE;
    }
    else
    {
        dwCompAttrLen = 0;
        bCompAttr[0] = 0;
    }

    if (lParam & GCS_COMPCLAUSE)
    {
        dwCompClsLen = MyImmGetCompositionString(hIMC,GCS_COMPCLAUSE,dwCompCls,sizeof(dwCompCls));
        fRedraw = TRUE;
    }
    else
    {
        dwCompClsLen = 0;
        dwCompCls[0] = 0;
        dwCompCls[1] = 0;
    }


    if (lParam & GCS_COMPREADSTR)
    {
        dwCompReadStrLen = MyImmGetCompositionString(hIMC,GCS_COMPREADSTR,szCompReadStr,sizeof(szCompReadStr));
        dwCompReadStrLen /= sizeof(MYCHAR);
        szCompReadStr[dwCompReadStrLen] = MYTEXT('\0');
        fRedraw = TRUE;
    }
    else
    {
        dwCompReadStrLen = 0;
        szCompReadStr[0] = MYTEXT('\0');
    }

    if (lParam & GCS_COMPREADATTR)
    {
        dwCompReadAttrLen = MyImmGetCompositionString(hIMC,GCS_COMPREADATTR,bCompReadAttr,sizeof(bCompReadAttr));
        fRedraw = TRUE;
    }
    else
    {
        dwCompReadAttrLen = 0;
        bCompReadAttr[0] = 0;
    }

    if (lParam & GCS_COMPREADCLAUSE)
    {
        dwCompReadClsLen = MyImmGetCompositionString(hIMC,GCS_COMPREADCLAUSE,dwCompReadCls,sizeof(dwCompReadCls));
        fRedraw = TRUE;
    }
    else
    {
        dwCompReadClsLen = 0;
        dwCompReadCls[0] = 0;
        dwCompReadCls[1] = 0;
    }


    if (lParam & GCS_RESULTSTR)
    {
        RECT rc = {0};
        HDC hIC = NULL;
        SIZE sz0, sz1;
        HFONT hOldFont = NULL;

        if (lParam & GCS_RESULTCLAUSE)
        {
            dwResultClsLen = MyImmGetCompositionString(hIMC,GCS_RESULTCLAUSE,dwResultCls,sizeof(dwResultCls));
        }
        else
        {
            dwResultClsLen = 0;
            dwResultCls[0] = 0;
            dwResultCls[1] = 0;
        }

        dwResultStrLen = MyImmGetCompositionString(hIMC,GCS_RESULTSTR,szResultStr,sizeof(szResultStr));
        dwResultStrLen /= sizeof(MYCHAR);
        szResultStr[dwResultStrLen] = MYTEXT('\0');


        // szPaintResult may overflow..
        GetClientRect(hWnd,&rc);
        hIC = CreateIC(TEXT("DISPLAY"), NULL, NULL, NULL);
        hOldFont = SelectObject(hIC,hFont);
#ifdef USEWAPI
        GetTextExtentPointW(hIC,szPaintResult,Mylstrlen(szPaintResult),&sz0);
        GetTextExtentPointW(hIC,szResultStr,Mylstrlen(szResultStr),&sz1);
#else
        GetTextExtentPoint(hIC,szPaintResult,Mylstrlen(szPaintResult),&sz0);
        GetTextExtentPoint(hIC,szResultStr,Mylstrlen(szResultStr),&sz1);
#endif
        if (sz0.cx + sz1.cx >= rc.right)
        {
            szPaintResult[0] = MYTEXT('\0');
            szPaintResultRead[0] = MYTEXT('\0');
        }
        SelectObject(hIC,hOldFont);
        DeleteDC(hIC);

        MakePaintString(hWnd,szResultStr,dwResultStrLen,dwResultCls,dwResultClsLen,szPaintResult, ARRAYSIZE(szPaintResult));

        fRedraw = TRUE;
    }
    else
    {
        dwResultStrLen = 0;
        szResultStr[0] = MYTEXT('\0');
        dwResultClsLen = 0;
        dwResultCls[0] = 0;
        dwResultCls[1] = 0;
    }



    if (lParam & GCS_RESULTREADSTR)
    {
        if (lParam & GCS_RESULTREADCLAUSE)
        {
            dwResultReadClsLen = MyImmGetCompositionString(hIMC,GCS_RESULTREADCLAUSE,dwResultReadCls,sizeof(dwResultReadCls));
            fRedraw = TRUE;
        }
        else
        {
            dwResultReadClsLen = 0;
            dwResultReadCls[0] = 0;
            dwResultReadCls[1] = 0;
        }
        dwResultReadStrLen = MyImmGetCompositionString(hIMC,GCS_RESULTREADSTR,szResultReadStr,sizeof(szResultReadStr));
        dwResultReadStrLen /= sizeof(MYCHAR);
        szResultReadStr[dwResultReadStrLen] = MYTEXT('\0');
        MakePaintString(hWnd,szResultReadStr,dwResultReadStrLen,dwResultReadCls,dwResultReadClsLen,szPaintResultRead, ARRAYSIZE(szPaintResultRead));
        fRedraw = TRUE;
    }
    else
    {
        dwResultReadStrLen = 0;
        szResultReadStr[0] = MYTEXT('\0');
        dwResultReadClsLen = 0;
        dwResultReadCls[0] = 0;
        dwResultReadCls[1] = 0;
    }



    if (fRedraw)
    {
        InvalidateRect(hWnd,NULL,TRUE);
        UpdateWindow(hWnd);
    }
    return 1;
}
Ejemplo n.º 3
0
LRESULT HandleChar(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
    RECT rc = {0};
    HDC hIC = NULL;
    SIZE sz0, sz1;
    HFONT hOldFont = NULL;
    LPMYSTR lp = NULL;
    // is the previous received char is a DBCS lead byte char ?
    static BOOL fIsPrevLeadByte = FALSE;

    GetClientRect(hWnd,&rc);
    hIC = CreateIC(TEXT("DISPLAY"), NULL, NULL, NULL);
    hOldFont = SelectObject(hIC,hFont);
#ifdef USEWAPI
    GetTextExtentPointW(hIC,szPaintResult,Mylstrlen(szPaintResult),&sz0);
    GetTextExtentPointW(hIC,szResultStr,Mylstrlen(szResultStr),&sz1);
#else
    GetTextExtentPoint(hIC,szPaintResult,Mylstrlen(szPaintResult),&sz0);
    GetTextExtentPoint(hIC,szResultStr,Mylstrlen(szResultStr),&sz1);
#endif
    if (sz0.cx + sz1.cx >= rc.right)
    {
        szPaintResult[0] = MYTEXT('\0');
        szPaintResultRead[0] = MYTEXT('\0');
    }
    SelectObject(hIC,hOldFont);
    DeleteDC(hIC);

    lp = szPaintResult + Mylstrlen(szPaintResult);

#ifndef USEWAPI
    if (fIsPrevLeadByte) 
    {
        // remove , and append second byte for showing DBCS char
        if (*(lp - 1) == ',') 
        {
            lp--;
        }
    }
#endif

    // append second byte
    *lp++ = (MYCHAR)(BYTE)wParam;
    *lp++ = MYTEXT(',');
    *lp++ = MYTEXT('\0');

    lp = szPaintResultRead + Mylstrlen(szPaintResultRead);

#ifndef USEWAPI
    if (fIsPrevLeadByte) 
    {
        // remove , and append second byte for showing DBCS char
        if (*(lp - 1) == ',') 
        {
            lp--;
        }

        fIsPrevLeadByte = FALSE;
    } 
    else 
    {
        fIsPrevLeadByte = IsDBCSLeadByte((BYTE)wParam);
    }
#endif

    *lp++ = (BYTE)wParam;
    *lp++ = MYTEXT(',');
    *lp++ = MYTEXT('\0');

    InvalidateRect(hWnd,NULL,TRUE);
    UpdateWindow(hWnd);

    return 1;
}
Ejemplo n.º 4
0
LRESULT HandlePaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
    HDC hDC = NULL;
    PAINTSTRUCT ps = {0};
    UINT i;
    int x = ORG_X;
    int y = ORG_Y;
    SIZE sz;
    HFONT hOldFont = NULL;
    HFONT hDefFont = GetStockObject(DEFAULT_GUI_FONT);
    int height,defheight;
    const char  szResult[] = "Result String";
    const char  szComp[] = "Composition String";
    RECT rc = {0};

    GetClientRect(hWnd,&rc);

    hDC = BeginPaint(hWnd, &ps);

    if (hFont)
    {
        hOldFont = SelectObject(hDC,hDefFont);
    }


    // Get the height of the default gui font.
    GetTextExtentPoint(hDC,"A",1,&sz);
    defheight = sz.cy + 1;

    // Get the height of the font.
    SelectObject(hDC,hFont);
    GetTextExtentPoint(hDC,"A",1,&sz);
    height = sz.cy + 1;

    SelectObject(hDC,hDefFont);
    SetTextColor(hDC,RGB(0,0,0));
    SetBkMode(hDC,TRANSPARENT);
    TextOut(hDC,ORG_X,y,szResult,lstrlen(szResult));
    y += defheight;

    if (Mylstrlen(szPaintResult))
    {
        x = ORG_X;
        SelectObject(hDC,hFont);
        SetTextColor(hDC,RGB(255,0,0));
        SetBkMode(hDC,TRANSPARENT);
#ifdef USEWAPI
        TextOutW(hDC,x,y,szPaintResult,Mylstrlen(szPaintResult));
#else
        TextOut(hDC,x,y,szPaintResult,Mylstrlen(szPaintResult));
#endif
    }

    y += height;

    if (Mylstrlen(szPaintResultRead))
    {
        x = ORG_X;
        SelectObject(hDC,hFont);
        SetTextColor(hDC,RGB(255,0,0));
        SetBkMode(hDC,TRANSPARENT);
#ifdef USEWAPI
        TextOutW(hDC,x,y,szPaintResultRead,Mylstrlen(szPaintResultRead));
#else
        TextOut(hDC,x,y,szPaintResultRead,Mylstrlen(szPaintResultRead));
#endif
    }
#if 0
    if (dwResultReadStrLen)
    {
        x = ORG_X;
        SelectObject(hDC,hFont);
        SetTextColor(hDC,RGB(0,0,0));
        SetBkMode(hDC,TRANSPARENT);

        if (dwResultReadClsLen)
        {
            dwResultReadCls[127] = 0;
            i = 1;

            SetTextColor(hDC,RGB(255,0,0));
            while (dwResultReadCls[i] && dwResultReadCls[i-1] < dwResultReadStrLen)
            {
                DWORD dwTextLen = dwResultReadCls[i] - dwResultReadCls[i-1];
                LPSTR lpStart = szResultReadStr + dwResultReadCls[i-1];

                TextOut(hDC,x,y,lpStart,dwTextLen);
                GetTextExtentPoint(hDC,lpStart,dwTextLen,&sz);
                x += sz.cx;

                TextOut(hDC,x,y,",",1);
                GetTextExtentPoint(hDC,",",1,&sz);
                x += (sz.cx + 2);

                i++;
            }
        }
        else
        {
            SetTextColor(hDC,RGB(255,0,0));
            SetBkMode(hDC,TRANSPARENT);
            TextOut(hDC,x,y,szResultReadStr,dwResultReadStrLen);
        }


    }
#endif

    y += height;

    SelectObject(hDC,hDefFont);
    SetTextColor(hDC,RGB(0,0,0));
    SetBkMode(hDC,TRANSPARENT);
    TextOut(hDC,ORG_X,y,szComp,lstrlen(szComp));
    y += defheight;

    if (dwCompStrLen)
    {
        x = ORG_X;
        SelectObject(hDC,hFont);
        SetTextColor(hDC,RGB(0,0,0));

        if (dwCompClsLen && dwCompAttrLen)
        {
            dwCompCls[127] = 0;
            i = 1;
          
            while (dwCompCls[i] && dwCompCls[i-1] < dwCompStrLen)
            {
                DWORD dwTextLen = dwCompCls[i] - dwCompCls[i-1];
                LPMYSTR lpStart = szCompStr + dwCompCls[i-1];

                SetAttrColor(hDC, bCompAttr[dwCompCls[i-1]]);
#ifdef USEWAPI
                TextOutW(hDC,x,y,lpStart,dwTextLen);
                GetTextExtentPointW(hDC,lpStart,dwTextLen,&sz);
#else
                TextOut(hDC,x,y,lpStart,dwTextLen);
                GetTextExtentPoint(hDC,lpStart,dwTextLen,&sz);
#endif
                x += sz.cx;

                SetTextColor(hDC,RGB(0,0,0));
                SetBkMode(hDC,TRANSPARENT);
#ifdef USEWAPI
                TextOutW(hDC,x,y,MYTEXT(","),1);
                GetTextExtentPointW(hDC,MYTEXT(","),1,&sz);
#else
                TextOut(hDC,x,y,",",1);
                GetTextExtentPoint(hDC,",",1,&sz);
#endif
                x += (sz.cx + 2);

                i++;
            }
        }
        else
        {
            SetBkMode(hDC,TRANSPARENT);
#ifdef USEWAPI
            TextOutW(hDC,x,y,szCompStr,dwCompStrLen);
#else
            TextOut(hDC,x,y,szCompStr,dwCompStrLen);
#endif
        }

    }

    y += height;

    if (dwCompReadStrLen)
    {
        x = ORG_X;
        SelectObject(hDC,hFont);
        SetTextColor(hDC,RGB(0,0,0));
        SetBkMode(hDC,TRANSPARENT);

        if (dwCompReadClsLen && dwCompReadAttrLen)
        {
            dwCompReadCls[127] = 0;
            i = 1;

            while (dwCompReadCls[i] && dwCompReadCls[i-1] < dwCompReadStrLen)
            {
                DWORD dwTextLen = dwCompReadCls[i] - dwCompReadCls[i-1];
                LPMYSTR lpStart = szCompReadStr + dwCompReadCls[i-1];

                SetAttrColor(hDC, bCompReadAttr[dwCompReadCls[i-1]]);
#ifdef USEWAPI
                TextOutW(hDC,x,y,lpStart,dwTextLen);
                GetTextExtentPointW(hDC,lpStart,dwTextLen,&sz);
#else
                TextOut(hDC,x,y,lpStart,dwTextLen);
                GetTextExtentPoint(hDC,lpStart,dwTextLen,&sz);
#endif
                x += sz.cx;

                SetTextColor(hDC,RGB(0,0,0));
                SetBkMode(hDC,TRANSPARENT);
#ifdef USEWAPI
                TextOutW(hDC,x,y,MYTEXT(","),1);
                GetTextExtentPointW(hDC,MYTEXT(","),1,&sz);
#else
                TextOut(hDC,x,y,",",1);
                GetTextExtentPoint(hDC,",",1,&sz);
#endif
                x += (sz.cx + 2);

                i++;
            }
        }
        else
        {
            SetBkMode(hDC,TRANSPARENT);
#ifdef USEWAPI
            TextOutW(hDC,x,y,szCompReadStr,dwCompReadStrLen);
#else
            TextOut(hDC,x,y,szCompReadStr,dwCompReadStrLen);
#endif
        }

    }

    y += height;

    ptImeUIPos.y = y;

    SelectObject(hDC,hOldFont);
    EndPaint(hWnd,&ps);
    return 1;
}