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

📄 textserv.cpp

📁 Windows CE 6.0 Word Application 源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        // Make sure the changes to the caret can be seen.
                        psel->Update_iFormat(-1);
                        psel->Update(FALSE);
                    }
                }
            }
        }
#endif // PWD_JUPITER
                                    // Post IME char processing.
        if ( SUCCEEDED(hr) && WM_IME_CHAR == msg )
            PostIMECharGlue( *this );
        break;

    case EM_CHARFROMPOS:
        hr = TxCharFromPos((LPPOINT)lparam, &lres);
        break;

#ifndef PEGASUS
    case WM_INPUTLANGCHANGE:

        if (_fSingleCodePage)
        {
            wparam =_pDocInfo && wparam == GetCharSet(_pDocInfo->wCpg);
        }

        // fall through to WM_INPUTLANGCHANGEREQUEST

    case WM_INPUTLANGCHANGEREQUEST:
        // if the SingleCodePage option is set, then we must
        // have a "good" code page to go to; if not, just
        // eat this message.
        //
        // This will prevent folks from typing French and Greek
        // on the same edit control, which is useful for certain
        // kinds of backward compatibility scenarios.
        //
        // HACK ALERT!  the documentation on WM_INPUTLANGCHANGEREQUEST
        // is wrong.  It turns out that _only_ the low bit of wparam
        // indicates whether or not the new keyboard can be considered
        // as the same code page.
        if( (_fSingleCodePage && (wparam & 0x1) ) ||
            !_fSingleCodePage)
        {
            GetSel()->CheckChangeFont ( this, FALSE, LOWORD(lparam),
                                        ConvertLanguageIDtoCodePage(LOWORD(lparam)) );
            hr = S_FALSE;   // cause default window to allow kb switch.
        }
        break;
#endif

    case WM_CLEAR:
        OnClear(&undobldr);
        break;

    case WM_CONTEXTMENU:
        hr = OnContextMenu(lparam);
        break;

    case WM_COPY:
    case WM_CUT:
        lres = hr = CutOrCopySelection(msg, wparam, lparam, &undobldr);
        break;

    case WM_RENDERFORMAT:
        lres = hr = _ldte.RenderClipboardFormat(wparam);
        break;

    case WM_RENDERALLFORMATS:
        lres = hr = _ldte.RenderAllClipboardFormats();
        break;

    case WM_DESTROYCLIPBOARD:
        lres = hr = _ldte.DestroyClipboard();
        break;

    case EM_DISPLAYBAND:
        if (fInplaceActive())
        {
            OnDisplayBand((const RECT *) lparam, FALSE);
            lres = 1;
        }
        else
        {
            hr = OLE_E_INVALIDRECT;
        }
        break;

#ifndef NODROPFILES
    case WM_DROPFILES:
        OnDropFiles((HANDLE) wparam);
        break;
#endif

    case EM_EMPTYUNDOBUFFER:
        ClearUndo(&undobldr);
        break;

    case WM_ERASEBKGND:
        lres = 1;               // We handle background erase during painting
        break;

    case EM_EXGETSEL:
        OnExGetSel((CHARRANGE *)lparam);
        break;

    case EM_EXLINEFROMCHAR:
        hr = TxLineFromCp((LONG)lparam, &lres);
        break;

    case EM_FINDTEXT:
    case EM_FINDTEXTEX:
    case EM_FINDTEXTW:
    case EM_FINDTEXTEXW:
        lres = OnFindText(msg, (DWORD)wparam, (FINDTEXTEX *)lparam);
        break;

    case EM_FINDWORDBREAK:
        hr = TxFindWordBreak((INT)wparam, (LONG)lparam, &lres);
        break;

    case EM_FORMATRANGE:
        if (fInplaceActive())
        {
            SPrintControl prtcon;
            prtcon._fDoPrint = (wparam) ? TRUE : FALSE;
            lres = OnFormatRange((FORMATRANGE *) lparam, prtcon);
        }
        else
        {
            hr = OLE_E_INVALIDRECT;
        }
        break;

    case EM_GETCHARFORMAT:
    {
        // ensure that all CCharFormat manipulated internally are
        // not CHARFORMAT's or CHARFORMAT2's
        CCharFormat cfInt;
        CHARFORMAT *pcfExt = (CHARFORMAT *)lparam;

        cfInt.cbSize = pcfExt->cbSize;
        lres = OnGetCharFormat(&cfInt, wparam);
        CopyMemory(pcfExt, &cfInt, min(pcfExt->cbSize,sizeof(cfInt)));
        break;
    }
    case EM_GETFIRSTVISIBLELINE:
        if (fInplaceActive())
        {
            lres = _pdp->GetFirstVisibleLine();
        }
        else
        {
            hr = OLE_E_INVALIDRECT;
        }
        break;

    case EM_GETLIMITTEXT:
        lres = TxGetMaxLength();
        break;

    case EM_GETLINE:
        if (fInplaceActive())
        {
            lres = _pdp->GetLineText((LONG)wparam, (TCHAR *)lparam,
                                (LONG) (*(WORD *) lparam));
        }
        else
        {
            hr = OLE_E_INVALIDRECT;
        }
        break;

    case EM_GETLINECOUNT:
        hr = TxGetLineCount(&lres);
        break;

    case EM_GETMODIFY:              // RichEdit 1.0 returned -1 if _fModified
        lres = -(LONG)_fModified;   //  is TRUE (go figure). So for backward
        break;                      //  compatibility, we do too :-(

    case EM_GETOLEINTERFACE:
        if( lparam )
        {
            *(IRichEditOle **)lparam = (IRichEditOle *)this;
            AddRef();
        }
        lres = TRUE;
        break;

    case EM_GETSCROLLPOS:
        {
            POINT *point = (POINT *)lparam;
            point->x = _pdp->GetXScroll();
            point->y = _pdp->GetYScroll();
            point->y = _pdp->ConvertYPosToScrollPos(point->y);
            lres = 1;
        }
        break;

    case EM_SETOLECALLBACK:
        hr = E_FAIL;
        if( lparam )
        {
            pobjmgr = GetObjectMgr();
            if( pobjmgr )
            {
                pobjmgr->SetRECallback((IRichEditOleCallback *)lparam);
                lres = TRUE;
                hr = NOERROR;
            }
        }
        break;

    case EM_GETPARAFORMAT:
    {
        // Use CParaFormat for all internal operations
        CParaFormat PF;
        PARAFORMAT *pPF = (PARAFORMAT *)lparam;

        PF.cbSize = pPF->cbSize;
        lres = OnGetParaFormat(&PF);
        // PREFIX WCEP 31825
        if (IsValidParaFormat(&PF)) 
        {
            CopyMemory(pPF, &PF, pPF->cbSize);
        }
    }
        break;

    case EM_GETSEL:
        lres = OnGetSel((LONG*)wparam, (LONG*)lparam);
        break;

    case EM_GETSELTEXT:
        lres = OnGetSelText((TCHAR *)lparam);
        break;

    case WM_GETTEXT:
        {
            GETTEXTEX gt;

            gt.cb = wparam * 2;
            gt.flags = GT_USECRLF;
            gt.codepage = 1200;
            gt.lpDefaultChar = NULL;
            gt.lpUsedDefChar = NULL;

            lres = GetTextEx(&gt, (TCHAR *)lparam);
        }
        break;

    case WM_GETTEXTLENGTH:
        {
            GETTEXTLENGTHEX gtl;

            gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF;
            gtl.codepage = 1200;

            lres = GetTextLengthEx(&gtl);
        }
        break;

    case EM_GETTEXTEX:
        lres = GetTextEx((GETTEXTEX *)wparam, (TCHAR *)lparam);
        break;
    case EM_GETTEXTLENGTHEX:
        lres = GetTextLengthEx((GETTEXTLENGTHEX *)wparam);
        break;

    case EM_GETTEXTRANGE:
    {
        TEXTRANGE * const ptr = (TEXTRANGE *) lparam;
        LONG              cch = ValidateTextRange(ptr);

        if (cch < 0)                    // Get text character count because
            cch = GetTextLength();      //  caller wants it all
        cch++;                          // Bump count by terminating '\0'

        // Only copy if we need to copy anything and destination is valid
        if (cch > 1 &&
            !IsBadWritePtr(ptr->lpstrText, cch * sizeof(TCHAR)))
        {
            lres = GetTextRange(ptr->chrg.cpMin, cch, ptr->lpstrText);
        }
    }
        break;

    case EM_GETWORDBREAKPROC:
        lres = OnGetWordBreakProc();
        break;

    case EM_GETZOOM:
        *(WORD *)wparam = GetZoomNumerator();
        *(WORD *)lparam = GetZoomDenominator();
        lres = 1;
        break;

    case EM_HIDESELECTION:
        lres = OnTxHideSelectionChange((BOOL)wparam);
        break;

    case WM_HSCROLL:
        hr = TxHScroll(LOWORD(wparam), HIWORD(wparam));
        break;

    case WM_KEYDOWN:

        hr = OnTxKeyDown((WORD) wparam, (DWORD) lparam, &undobldr);
        break;

    case WM_KEYUP:

        // GuyBark JupiterJ IME:
        // Have we frozen the display while we force an ime caret move?
        if(_fDisplayFrozen)
        {
            // Do we have undetermined text?
            if(!IsIMEComposition())
            {
                // No! Somehow we determined the text without getting the 
                // key up, so thaw now!

                _pdp->Thaw();
                _fDisplayFrozen = FALSE;
            }
            else
            {
                MSG  msgPeek;
                HWND hWndRE;

                // We have some undetermined text. So check if we need to thaw the display now.

                if((TxGetWindow(&hWndRE) != S_OK) ||
                   !PeekMessage(&msgPeek, hWndRE, WM_KEYUP, WM_KEYUP, PM_NOREMOVE))
                {
                    // Looks like we've got the last of our forced caret moves.

                    // Before thawing the display, make sure any candidate
                    // list is positioned beneath the final caret position.
                    if(_ime->_dwIndex != 0xFFFF)
                    {
                        _ime->IMESetCandidateWindowPos(*this);
                    }

                    // Now thaw!
                    _pdp->Thaw();

                    _fDisplayFrozen = FALSE;
                }
            }
        }

// Start v-holee
// VK_JANJI == VK_HANJA in KOREAN
		if( (WORD)wparam == VK_KANJI )
		{
			if(_KOREAN_CP == GetKeyboardCodePage() && 
			   IsntProtectedOrReadOnly(WM_KEYUP, VK_KANJI, lparam))
			{
				IUndoBuilder *publdr = &undobldr;
				IMEHangeulToHanja ( *this, *publdr );
			}
		}
// Finish v-holee

        if( (WORD)wparam == VK_APPS )
        {
            HandleKbdContextMenu();
        }
        else
        {
            // otherwise, we don't process this message.
            hr = S_FALSE;
        }
        break;

    case WM_KILLFOCUS:
        lres = OnKillFocus();
        break;

    case WM_LBUTTONDBLCLK:
#ifdef PWD_JUPITER // GuyBark 81387: Allow undo of expand/collapse operation
        hr = OnTxLButtonDblClk(MOUSEX, MOUSEY, (WORD) wparam, &undobldr);
#else
        hr = OnTxLButtonDblClk(MOUSEX, MOUSEY, (WORD) wparam);
#endif 
        break;

    case WM_LBUTTONDOWN:
        if(_fEatLeftDown)
        {
            TxSetFocus();
            _fEatLeftDown = FALSE;
        }
        else
        {
            hr = OnTxLButtonDown(MOUSEX, MOUSEY, (WORD) wparam);
        }
        break;

    case WM_LBUTTONUP:
        hr = OnTxLButtonUp(MOUSEX, MOUSEY, (WORD) wparam, TRUE);
        break;

#if !defined(NOMAGELLAN)
    case WM_MBUTTONDBLCLK:                      // Magellan zmouse scroll
    case WM_NCMBUTTONDOWN:                      //  support commandeers middle
    case WM_MBUTTONDOWN:                        //  button.
        OnTxMButtonDown(MOUSEX, MOUSEY, (WORD) wparam);
        break;

    case WM_MBUTTONUP:
        OnTxMButtonUp(MOUSEX, MOUSEY, (WORD) wparam);
        break;

⌨️ 快捷键说明

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