共用方式為


關於無窗口豐富編輯控制件

無窗口的豐富編輯控件,也稱為文字服務物件,是一個物件,可提供 豐富編輯控件的功能, 而不提供視窗。 若要提供視窗的功能,例如接收訊息和用於繪圖的裝置環境能力,無視窗的豐富編輯控制項會使用一對介面:ITextServices,以及 ITextHost

若要建立無視窗的豐富文本編輯控件,請呼叫 CreateTextServices 函式,並提供指向您實作的 ITextHost 介面的指標。 CreateTextServices 會傳回一個 IUnknown 指標,您可以查詢來取得與無視窗控件的 ITextServices 實作相關的指標。

Msftedit.dll 匯出稱為 IID_ITextServices 的介面識別碼 (IID),可用來查詢 ITextServices 介面的 IUnknown 指標。 下列範例示範如何擷取 IID_ITextServices,並用它來取得 ITextServices 介面。

    .
    .
    .
    HRESULT hr;
    IUnknown* pUnk = NULL;
    ITextServices* pTextServices =  NULL;
    
    // Create an instance of the application-defined object that implements the 
    // ITextHost interface.
    TextHost* pTextHost = new TextHost();
    if (pTextHost == NULL) 
        goto errorHandler;

    // Create an instance of the text services object.
    hr = CreateTextServices(NULL, pTextHost, &pUnk);
    if (FAILED(hr))
        goto errorHandler;
        
    // Retrieve the IID_ITextServices interface identifier from 
    // Msftedit.dll. The hmodRichEdit parameter is a handle to the 
    // Msftedit.dll module retrieved by a previous call to the 
    // GetModuleHandle function.
    IID* pIID_ITS = (IID*) (VOID*) GetProcAddress(hmodRichEdit, 
        "IID_ITextServices");
               
    // Retrieve the ITextServices interface.    
    hr = pUnk->QueryInterface(*pIID_ITS, (void **)&pTextServices);
    if (FAILED(hr))
        goto errorHandler;
     .
     . 
     .   
     

Msftedit.dll 也會匯出稱為 IID_ITextHost 的介面標識碼(IID),其可用來查詢 ITextHost 介面。

ITextHost 介面具有一系列方法,供無視窗控制項呼叫,以取得有關您視窗的資訊。 例如,文字服務物件會呼叫 TxGetDC 方法來擷取可繪製的裝置內容。 不帶視窗的控制項會呼叫 TxNotify 方法,將通知傳送至文字主機,例如,豐富的編輯通知訊息。 文字服務物件會呼叫其他 ITextHost 方法來要求文字主機執行其他視窗相關服務。 例如,TxInvalidateRect 方法會要求文字主機將矩形新增至視窗的更新區域。

標準的豐富編輯控制件有一個視窗程式,可處理來自您應用程式的系統訊息和訊息。 您可以使用控制元件的視窗句柄來傳送訊息來執行文字編輯和其他作業。 但是,無視窗的豐富編輯控制器沒有用來接收和處理訊息的視窗程式。 相反地,它會提供 ITextServices 介面。 若要將訊息傳送至無窗格豐富編輯控制項,請呼叫 TxSendMessage 方法。 您可以使用此方法傳送任何豐富的編輯訊息,或傳遞其他會影響控件的訊息,例如滑鼠或鍵盤輸入的系統訊息。

您也可以將文字服務物件建立為 COM 匯總物件的一部分,。 這可讓您輕鬆地使用無視窗元件物件模型 (COM) 對象來匯總文字服務物件。