Aracılığıyla paylaş


Metin Nesne Modeli Hakkında

Metin Nesne Modeli (TOM), zengin düzenleme denetimi de dahil olmak üzere çeşitli Microsoft metin çözümleri tarafından çeşitli derecelerde desteklenen bir dizi metin işleme arabirimi tanımlar. Bu konu, TOM'a üst düzey bir genel bakış sağlar. Aşağıdaki konular ele alınmaktadır.

TOM Sürüm 2 Nesneleri

TOM sürüm 2 (TOM 2) özgün metin nesnesi modelini genişletir; yeni arabirimler eski arabirimlerden türetilir. Güncelleştirilmiş TOM API'sinde yeni karakter ve paragraf biçimi özellikleri, tablo modeli, birden çok seçim ve matematik ve ruby için satır içi nesne desteği bulunur.

Üst düzey TOM 2 nesnesi, nesne hiyerarşisinde daha düşük nesneleri oluşturma ve alma yöntemlerine sahip ITextDocument2 arabirimi tarafından tanımlanır. Basit düz metin işleme için, bir ITextDocument2 nesnesinden ITextRange2 nesnesi edinebilir ve her şeyi bununla yapabilirsiniz. Zengin metin biçimlendirmesi eklemeniz gerekiyorsa, ITextRange2 nesnesinden ITextFont2 ve ITextPara2 nesnelerini edinebilirsiniz. ITextFont2, Microsoft Word format-font iletişim kutusunun programlama eşdeğerini sağlar ve ITextPara2, Word format-paragraph iletişim kutusunun eşdeğerini sağlar.

Bu üç alt düzey nesneye ek olarak, TOM 2'de seçim vurgulama ve bazı kullanıcı arabirimi odaklı yöntemler içeren bir ITextRange2 nesnesi olan bir seçim nesnesi (ITextSelection2) vardır.

Aralık ve seçim nesneleri, programların ekrandaki metinleri veya ekrana kaydırılabilir metinleri incelemesini sağlayan ekran odaklı yöntemler içerir. Bu özellikler, örneğin görme bozukluğu olan kişiler için metnin erişilebilir olmasını sağlamaya yardımcı olur.

2 soneki olan her arabirim, 2 soneki olmadan ilgili arabirimden devralınır. Örneğin, ITextDocument2, ITextDocument'dan devralır.

TOM 2 nesneleri aşağıdaki hiyerarşiye sahiptir.

ITextDocument2         Top-level editing object
    ITextRange2        Primary text interface: a range of text
        ITextFont2     Character-attribute interface
        ITextPara2     Paragraph-attribute interface
        ITextRow       Table interface
    ITextSelection2    Screen highlighted text range
        ITextRange2    Selection inherits all range methods
    ITextDisplays      Displays collection (not yet defined)
    ITextStrings       Rich-text strings collection
    ITextStoryRanges2  Enumerator for stories in document

bir ITextDocument2 nesnesi, hikayeleri adlı bir veya daha fazla bitişik metin aralığını açıklar. Hikayeler, belgenin ana metni, üst bilgiler ve altbilgiler, dipnotlar, ek açıklamalar ve zengin metin karalama defterleri gibi belgenin çeşitli bölümlerini temsil eder. Doğrusal olarak biçimlendirilmiş matematik ifadeleri ile birleştirilmiş bir form arasında çeviri yapılırken karalama defteri hikayesi kullanılır. Ayrıca, içerik değiştirilmek üzereyken geçerli kopya kaynağı olan bir aralığın içeriği kaydedilirken karalama defteri hikayesi de kullanılır.

ITextRange2 nesnesi, başlangıç ve bitiş karakter konumu uzaklıkları ve bir öykü nesnesi tarafından tanımlanır. Metni panoya veya diğer hedeflere kopyalanabilir, ancak üst yazı nesnesinden bağımsız olarak mevcut değildir. Metin aralığı nesnesi, diğer uzaklık türleri tarafından tanımlanan elektronik tablodan ve diğer aralık nesnelerinden farklıdır; örneğin, satır/sütun veya grafik konumu (x, y). Metin aralığı nesnesi kendisini çeşitli şekillerde değiştirebilir, bir kopyasını oluşturabilir ve başlangıç ve bitiş karakter konumları ile hikaye işaretçisini geçerli seçime kopyalayacak şekilde komut verilebilir.

bir ITextRange nesnesi her zaman belirli bir öyküyü temsil etmek için oluşturulabildiğinden, açık bir öykü nesnesi gerekli değildir. Özellikle, ITextDocument nesnesi, belgedeki öyküleri tam öyküleri açıklayan başlangıç ve bitiş karakter konumu değerlerine sahip aralıklar açısından (örneğin, 0 ve tomForward) numaralandıracak bir ITextStoryRanges nesnesi oluşturabilir.

ITextStoryRanges2 nesnesiyle, her hikaye bir ITextRange2 nesnesi tarafından açıklandığından, açık bir hikaye nesnesi gerekmez. Özellikle, ITextDocument2 nesnesi, belgedeki öyküleri tam öyküleri açıklayan başlangıç ve bitiş karakter konumu değerlerine sahip aralıklar açısından (örneğin, 0 ve tomForward) numaralandıracak bir ITextStoryRanges2 nesnesi oluşturabilir.

ITextRow arabirimi, ITextRange::Move ve ITextRange::Expand yöntemleriyle birlikte tablo ekleme, sorgulama ve değiştirme yeteneği verir.

TOM Arabirim Kuralları

Tüm TOM yöntemleri HRESULT değerleri döndürür. Genel olarak, TOM yöntemleri aşağıdaki standart değerleri döndürür.

  • E_OUTOFMEMORY (Hafıza yetersiz)
  • Geçersiz Argüman Hatası
  • E_NOTIMPL
  • E_FILENOTFOUND
  • E_ERİŞİM_ENGELLENDİ
  • E_FAIL
  • CO_E_RELEASED
  • NOERROR (S_OK ile aynıdır)
  • S_YANLIŞ

ITextRange gibi bir TOM nesnesiyle ilişkili düzenleme örneği silinirse, TOM nesnesinin işe yaramaz hale geldiğini ve tüm yöntemlerinin CO_E_RELEASED döndürdüğünü unutmayın.

HRESULT dönüş değerlerine ek olarak, birçok yöntem değerleri döndürmek için kullanılan işaretçiler olan out parametrelerini içerir. Tüm arabirimler için, kullanmadan önce tüm işaretçi parametrelerinin sıfır dışı olduğundan emin olmanız gerekir. Geçerli bir işaretçi gerektiren bir yönteme null değer geçirirseniz, yöntem E_INVALIDARG döndürür. Null değerlere sahip olan isteğe bağlı çıkış işaretçileri göz ardı edilir.

Özellikleri almak ve ayarlamak için Get ve Set ön ekleriyle yöntemleri kullanın. Boole değişkenleri, FALSEiçin tomFalse (0) ve TRUEiçin tomTrue (-1) kullanır.

TOM sabitleri tomConstants numaralandırma türünde tanımlanır ve tom ön ekiyle başlar, örneğin tomWord.

tomBool Tipi

Birçok TOM yöntemi, ikili durumlara sahip zengin metin öznitelikleri için "tomBool" adlı özel bir değişken türü kullanır. tomBool türü, dört değer alabildiği için Boole türünden farklıdır: tomTrue, tomFalse, tomToggleve tomUndefined. tomTrue ve tomFalse değerleri true ve false değerlerini gösterir. bir özelliği değiştirmek için tomToggle değeri kullanılır. daha geleneksel olarak NINCH olarak adlandırılan tomUndefined değeri, uzun tam sayılar, kesirli sayılar ve COLORREFile çalışan özel bir, giriş yapılmayan ve değişiklik olmayan değerdir. Dizeler için tomUndefined (veya NINCH) null dizeyle temsil edilir. Özellik ayarı işlemleri için tomUndefined kullanılması hedef özelliği değiştirmez. Özellik alma işlemleri için tomUndefined, aralıktaki karakterlerin farklı değerlere sahip olduğu anlamına gelir (özellik iletişim kutularında gri onay kutusu verir).

Matematik Oluşturma ve İndirme

Doğrusal olarak biçimlendirilmiş matematik ifadelerini yerleşik sürümlere dönüştürmek için ITextRange2::BuildUpMath yöntemini kullanabilirsiniz. ITextRange2::Linearize yöntemi, matematik ifadelerinin yerleşik sürümlerini doğrusal biçime geri dönüştürmek için doğrusallaştırma veya aşağı derleme olarak adlandırılan ters dönüştürmeyi yapar. Matematik derleme özelliği, düz metni dışarı aktarmanız veya belirli düzenleme türlerini etkinleştirmeniz gerektiğinde kullanışlıdır.

TOM RTF

TOM'da zengin metin değişimi, açık yöntem çağrıları kümeleri veya Zengin Metin Biçiminde (RTF) zengin metin aktarımları ile gerçekleştirilebilir. Bu bölüm, paragraf özellikleri ve karakter özellikleri için RTF denetim sözcüklerinin tablolarını verir.

TOM RTF Paragraf Denetim Sözcükleri

Denetim sözcüğü Anlam
\ fi n İlk satır girintisi (varsayılan değer sıfırdır).
tutmak Paragrafı olduğu gibi tutun.
\ keepn Sonraki paragrafla devam edin.
\ li n Sol girinti (varsayılan değer sıfırdır).
çizgi yok Satır numaralandırması yok.
\ nowidctlpar Dul/yalnız bırakma denetimini kapatın.
\ pagebb Sayfayı paragrafın önüne kesme.
\Par Yeni paragraf.
\ pard Varsayılan paragraf özelliklerine sıfırlar.
\QL Sola hizalı (varsayılan).
QR Sağa hizalanmış.
\ qj Haklı.
\Qc Merkezli.
\ ri n Sağ girinti (varsayılan değer sıfırdır).
\ s n Stil n.
\ sa n Sonraki boşluk (varsayılan değer sıfırdır).
\ sb n Önceki boşluk (varsayılan değer sıfırdır).
\ sl n Eksikse veya n=1000 ise, satır aralığı satırdaki en uzun karakter tarafından belirlenir (tek satır aralığı); n >, en azından bu boyut kullanılır; n sıfır < ise, tam olarak |n| kullanılır. Eğer \ slmult 1 takip ederse satır aralığı çok satırlıdır.
\ slmult m \ sl. m = sıfır: \ sl nolarak belirtilen En Az veya Tam satır aralığı. m = 1: satır aralığı = tek satır aralığının n/240 katı.
\ tb n Çubuk sekme konumu, sol kenar boşluğundan itibaren, twips cinsinden.
\ tldot Sekme öncüsü noktaları.
\ tleq Sekme öncüsü eşittir işareti.
\ tlhyph Sekme öncüsü çizgiler.
\ tlth Sekme öncüsü kalın çizgi.
\ tlul Sekme öncüsü altı çizili.
\Tqc Ortalanmış sekme.
\ tqdec Ondalık sekmesi.
\ tqr Sağa hizalı sekme.
\ tx n Sekme konumu, sol kenar boşluğundan itibaren, twips cinsinden ölçülen.

 

TOM RTF Karakter Biçimi Denetim Sözcükleri

Denetim sözcüğü Anlam
\ animasyon n Animasyon türünü n olarak ayarlar.
\ b Kalın.
şapka Tüm büyük harfler.
\ cf n Ön plan rengi (varsayılan değer , otomatik renk).
\ cs n Karakter stili n.
\ dn n Alt simge konumu yarım punto cinsinden (varsayılan değer 6'dır).
\ embo Kabartma.
\ f n Yazı tipi numarası, n yazı tipi tablosundaki bir girdiye başvurur.
\ fs n Yarım nokta cinsinden yazı tipi boyutu (varsayılan değer 24'tür).
\ vurgu n Arka plan rengi (varsayılan değer tomAutocolor).
\i İtalik.
\ impr Künye.
\ lang n Bir karaktere bir dil uygular. n, dile karşılık gelen bir sayıdır. \ plain kontrol kelimesi, dil özelliğini belge özelliklerinde \ deflang n tarafından tanımlanan dile sıfırlar.
\ nosupersub Üst simgeyi veya alt simgeyi kapatır.
\ outl Taslak
\düz Karakter biçimlendirme özelliklerini uygulama tarafından tanımlanan varsayılan değere sıfırlar. İlişkili karakter biçimlendirme özellikleri de (RTF belirtimindeki İlişkili Karakter Özellikleri bölümünde açıklanmıştır) sıfırlanır.
\ scaps Küçük sermayeler.
şad balığı Gölge.
\grev Üstü çizili.
\Alt Metne alt simge uygular ve yazı tipi bilgilerine göre nokta boyutunu küçültür.
\süper Metne üst simge uygular ve yazı tipi bilgilerine göre nokta boyutunu küçültür.
\ul Sürekli alt çizgi. \ ul0 tüm alt çizgilerini kapatır.
\ uld Noktalı alt çizgi.
\ uldb Çift alt çizgi.
\ ulnone Tüm altı çizme işlemlerini durdurur.
\ ulw Word altı çizili.
\ yukarı n Yarım punto üst simge konumu (varsayılan değer 6'dır).
\ v Gizli metin.

 

Zengin Metin Arama

Bir metin aralığı tarafından tanımlanan zengin metinleri bulmak için TOM yöntemlerini kullanabilirsiniz. Tam olarak böyle zengin metinler bulmak genellikle kelime işlemde gereklidir, ancak "gördüğünüz şey, elde ettiğiniz şey" (WYSIWYG) kelime işlemcisinde hiçbir zaman yerine getirilmemiştir. Bazı karakter biçimlendirme özelliklerinin yoksayılmasına (veya paragraf biçimlendirmesi ve/veya nesne içeriği içermesine) olanak tanıyan zengin metin eşleştirmesinin daha büyük bir etki alanı olduğu açıktır, ancak bu tür genelleştirmeler bu bölümün kapsamının dışındadır.

Bu işlevin bir amacı, belgede bulmak istediğiniz zengin metni tanımlamak için zengin metin bul iletişim kutusunu kullanmaktır. İletişim kutusu, zengin bir düzenleme denetimi kullanılarak uygulanır ve TOM yöntemleri belge içinde aramayı yürütmek için kullanılır. belgeden istediğiniz zengin metni Bul iletişim kutusuna kopyalayabilir veya doğrudan Bul iletişim kutusuna girip biçimlendirebilirsiniz.

Aşağıdaki örnekte, tam karakter biçimlendirme birleşimlerini içeren metinleri bulmak için TOM yöntemlerinin nasıl kullanılacağı gösterilmektedir. Algoritma, pr1adlı eşleşme aralığındaki düz metni arar. Düz metin bulunursa, pr2adlı bir deneme aralığına işaret eder. Ardından, iki ekleme noktası aralığı (prip1 ve prip2), deneme aralığı boyunca karakter biçimlendirmesini pr1ile karşılaştırmak için kullanılır. Bunlar tam olarak eşleşiyorsa, giriş aralığı (pprtarafından verilir) deneme aralığının metnini işaret eden şekilde güncelleştirilir ve işlev eşleşen aralıktaki karakterlerin sayısını döndürür. karakter biçimlendirme karşılaştırmasında iki ITextFont nesnesi (pf1 ve pf2) kullanılır. prip1 ve prip2ekleme noktası aralıklarına bağlıdırlar.

LONG FindRichText (
    ITextRange **ppr,             // Ptr to range to search
    ITextRange *pr1)              // Range with rich text to find
{
    BSTR        bstr;             // pr1 plain-text to search for
    LONG        cch;              // Text string count
    LONG        cch1, cch2;       // tomCharFormat run char counts
    LONG        cchMatch = 0;     // Nothing matched yet
    LONG        cp;               // Handy char position
    LONG        cpFirst1;         // pr1 cpFirst
    LONG        cpFirst2;         // pr2 cpFirst
    ITextFont  *    pf1, *pf      // Fonts corresponding to IPs prip1 and prip2
    ITextRange *pr2;              // Range duplicate to search with
    ITextRange *prip1, *prip      // Insertion points to walk pr1, pr2

    if (!ppr || !*ppr || !pr1)
        return E_INVALIDARG;

    // Initialize range and font objects used in search
    if ((*ppr)->GetDuplicate(&pr2)    != NOERROR ||
        pr1->GetDuplicate(&prip1)     != NOERROR ||
        pr2->GetDuplicate(&prip2)     != NOERROR ||
        prip1->GetFont(&pf1)          != NOERROR ||
        prip2->GetFont(&pf2)          != NOERROR ||
        pr1->GetText(&bstr)           != NOERROR )
    {
        return E_OUTOFMEMORY;
    }

    pr1->GetStart(&cpFirst1);

    // Keep searching till rich text is matched or no more plain-text hits
    while(!cchMatch && pr2->FindText(bstr, tomForward, 0, &cch) == NOERROR)
    {
        pr2->GetStart(&cpFirst2);                 // pr2 is a new trial range
        prip1->SetRange(cpFirst1, cpFirst1);      // Set up IPs to scan match
        prip2->SetRange(cpFirst2, cpFirst2);      //  and trial ranges

        while(cch > 0 &&
            pf1->IsEqual(pf2, NULL) == NOERROR)   // Walk match & trial ranges
        {                                         //  together comparing font
            prip1->GetStart(&cch1);               //  properties
            prip1->Move(tomCharFormat, 1, NULL);
            prip1->GetStart(&cp);
            cch1 = cp - cch1;                     // cch of next match font run

            prip2->GetStart(&cch2);
            prip2->Move(tomCharFormat, 1, NULL);
            prip2->GetStart(&cp);
            cch2 = cp - cch2;                      // cch of next trial font run

            if(cch1 < cch)                         // There is more to compare
            {
                if(cch1 != cch2)                   // Different run lengths:
                    break;                         //  no formatting match
                cch = cch - cch1;                  // Matched format run
            }
            else if(cch2 < cch)                    // Trial range format run too
                break;                             //  short

            else                                   // Both match and trial runs
            {                                      //  reach at least to match
                pr2->GetEnd(&cp);                  //  text end: rich-text match
                (*ppr)->SetRange(cpFirst2, cp)     // Set input range to hit
                cchMatch = cp - cpFirst2;          //  coordinates and return
                break;                             //  length of matched string
            }
        }
    }
    pr2->Release();
    prip1->Release();
    prip2->Release();
    pf1->Release();
    pf2->Release();
    SysFreeString(bstr);

    return cchMatch;
}

TOM Erişilebilirliği

TOM, ITextSelection ve ITextRange arabirimleri aracılığıyla erişilebilirlik desteği sağlar. Bu bölümde erişilebilirlik için yararlı olan yöntemler ve bir programın bir nesnenin xy ekran konumunu nasıl belirleyebileceği açıklanmaktadır.

Kullanıcı arabirimi tabanlı erişilebilirlik programları genellikle ekran ve fareyle çalıştığından, sık karşılaşılan bir sorun, geçerli fare konumu (ekran koordinatlarında) için ilgili ITextDocument arabirimini bulmaktır. Aşağıdaki bölümlerde uygun arabirimi belirlemenin iki yolu vardır:

Daha fazla bilgi için bkz. Microsoft Etkin Erişilebilirlik belirtimi. Bir nesneyi ekran konumundan aldıktan sonra, ITextDocument arabirimi için kullanabilir ve ekran konumuna karşılık gelen cp'de boş bir aralık nesnesi almak için RangeFromPoint yöntemini çağırabilirsiniz.

Çalışan Nesne Tablosundan Arabirim

Çalışan nesne tablosu (ROT), hangi nesne örneklerinin etkin olduğunu söyler. Bu tabloyu sorgulayarak, nesne zaten çalışırken bir istemciyi bir nesneye bağlama işlemini hızlandırabilirsiniz. Programların çalışan nesne tablosu aracılığıyla TOM arabirimlerine erişebilmesi için, penceresi olan bir TOM örneğinin bir takma ad kullanarak ROT'ye kaydolması gerekir. Adını, onaltılık değerini içeren bir dizeden HWNDşeklinde oluşturursunuz. Aşağıdaki kod örneği bunun nasıl yapılacağını gösterir.

// This TOM implementation code is executed when a new windowed 
// instance starts up. 
// Variables with leading underscores are members of this class.

HRESULT hr;
OLECHAR szBuf[10];            // Place to put moniker
MONIKER *pmk;

hr = StringCchPrintf(szBuff, 10, "%x", _hwnd);
if (FAILED(hr))
{
    //
    // TODO: write error handler
    //
}
CreateFileMoniker(szBuf, &pmk);
OleStdRegisterAsRunning(this, pmk, &_dwROTcookie);
....................
 
// Accessibility Client: 
//    Find hwnd for window pointed to by mouse cursor.

GetCursorPos(&pt);
hwnd = WindowFromPoint(pt);

// Look in ROT (running object table) for an object attached to hwnd

hr = StringCchPrintf(szBuff, 10, "%x", hwnd);
if (FAILED(hr))
{
    //
    // TODO: write error handler
    //
}
CreateFileMoniker(szBuf, &pmk);
CreateBindContext(0, &pbc);
pmk->BindToObject(pbc, NULL, IID_ITextDocument, &pDoc);
pbc->Release();

if( pDoc )
{
    pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
    // ...now do whatever with the range pRange
}

Pencere Mesajlarından Arayüz

EM_GETOLEINTERFACE iletisi, belirli bir ekran konumundaki bir nesne için IUnknown arabirimi edinmenin başka bir yolunu sağlar. Çalışan Nesne Tablosu'ndakiArabiriminde açıklandığı gibi, önce ekran konumu için bir HWND alır ve ardından bu iletiyi o HWNDgönderirsiniz. EM_GETOLEINTERFACE iletisi, düzenlemeye özgü zengin bir iletidir ve lParamtarafından adreslenen değişkende IRichEditOle arabirimine bir işaretçi döndürür.

İpucu Eğer bir işaretçi döndürülüyorsa (iletiyi göndermeden önce lParam'ın işaret ettiği nesneyi null olarak ayarladığınızdan emin olun), ITextDocument arabirimini elde etmek için IUnknown::QueryInterface yöntemini çağırabilirsiniz. Aşağıdaki kod örneği bu yaklaşımı göstermektedir.

    HWND    hwnd;
    ITextDocument *pDoc;
    ITextRange *pRange;
    POINT    pt;
    IUnknown *pUnk = NULL;
    
    GetCursorPos(&pt);
    hwnd = WindowFromPoint(pt);
    SendMessage(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pUnk);
    if(pUnk && 
        pUnk->QueryInterface(IID_ITextDocument, &pDoc) == NOERROR)
    {
        pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
        //  ... continue with rest of program
    }

Erişilebilirlik Odaklı Yöntemler

Bazı TOM yöntemleri özellikle ekranda gezinmek için kullanışlıdır, diğer TOM yöntemleri ise ilgi çekici yerlere geldiğinizde yapabileceklerini geliştirir. Aşağıdaki tabloda en kullanışlı yöntemler açıklanmaktadır.

Yöntem Erişilebilirliği nasıl teşvik eder?
GetSelection Bu yöntem, metni vurgulama ve kaydırma gibi çeşitli görünüm odaklı amaçlar için kullanılabilecek etkin seçimi alır.
RangeFromPoint Etkin bir seçimde kullanıldığında, bu yöntemle belirli bir görünümle ilişkilendirilen bir aralık elde etmek garanti edilir.
Genişlet Metin aralığını, içindeki kısmi birimlerin tamamen kapsanmasını sağlayacak şekilde büyütür. Örneğin, Expand(tomWindow), aralığın hikayesinin görünür bölümünü içerecek şekilde aralığı genişletir.
GetDuplicate Etkin bir seçimde kullanıldığında, bu yöntemle belirli bir görünümle ilişkilendirilen bir aralık elde etmek garanti edilir. RangeFromPointaçıklamasına bakın.
GetPoint Metin aralığındaki başlangıç veya bitiş karakteri konumunun ekran koordinatlarını alır.
ScrollIntoView Metin aralığını görünüme kaydırır.
SetPoint Belirtilen bir noktada veya yukarıdan metin seçer.

 

Karakter Eşleştirme Kümeleri

Çeşitli Move* yöntemlerinin tür parametresi olan ITextRangeiçindeki MoveWhile ve MoveUntilgibi yöntemler, açık bir dize veya karakter eşleştirme kümesi 32 bit dizin alabilir. Dizinler Unicode aralıkları veya GetStringTypeEx karakter kümeleri tarafından tanımlanır. n başlayan ve l (< 32768) uzunluğundaki Unicode aralığı, dizini tarafından n + (l << 16) + 0x80000000 ile verilir. Örneğin, temel Yunanca harfler CR_Greek = 0x805f0370 tarafından tanımlanır ve yazdırılabilir ASCII karakterleri CR_ASCIIPrint = 0x805e0020 tarafından tanımlanır. Ayrıca, MoveWhile ve MoveUntil yöntemleri GetStringTypeEx karakter kümesindeki veya bu karakter kümelerinden herhangi birinde yer almayan karakterlerin yayılma aralığını hızla atlamanıza olanak sağlar.

GetStringTypeEx kümeleri, Ctype1, Ctype2ve Ctype3değerleriyle belirtilir ve aşağıdaki gibi tanımlanır.

Cset Anlam
Ctype1 CT_CTYPE1 türlerinin birleşimi.
Ctype2 + tomCType2 Herhangi bir CT_CTYPE2 türü.
Ctype3 + tomCType3 CT_CTYPE3 türlerinin birleşimi.

 

Özellikle, Ctype1 aşağıdakilerin herhangi bir bileşimi olabilir.

Ctype1 adı Değer Anlam
C1_UPPER 0x0001 Büyük harf.
C1_LOWER 0x0002 Küçük.
C1_DIGIT 0x0004 Ondalık basamaklar.
C1_SPACE 0x0008 Boşluk karakterleri.
C1_PUNCT 0x0010 Noktalama.
C1_CNTRL 0x0020 Denetim karakterleri.
C1_BLANK 0x0040 Boş karakterler.
C1_XDIGIT 0x0080 Onaltılık basamaklar.
C1_ALPHA 0x0100 Herhangi bir dil karakteri (alfabetik, stil veya ideografik).
C1_DEFINED 0x0200 Tanımlı bir karakter, ancak diğer C1_* türlerinden biri değil.

 

Ctype2 türleri, Unicode metninin düzgün düzenini destekler. Yön öznitelikleri, Unicode tarafından standartlaştırılmış çift yönlü düzen algoritmasının doğru sonuçlar üretmesi için atanır. Bu türler birbirini dışlar. Bu özniteliklerin kullanımı hakkında daha fazla bilgi için bkz. The Unicode Standard: Worldwide Character Encoding, Volumes 1 and 2, Addison-Wesley Publishing Company: 1991, 1992.

CType2 adı Değer Anlam
Kuvvetli:
C2_SOLDANSAĞA 0x1 Soldan sağa.
C2_SAĞDANSOLA 0x2 Sağdan sola.
Zayıf:
C2_AVRUPANUMARASI 0x3 Avrupa sayısı, Avrupa rakamı.
C2_AVRUPAAYIRAÇI 0x4 Avrupa sayısal ayırıcısı.
C2_EUROPETERMINATOR 0x5 Avrupa sayısal sonlandırıcısı.
C2_ARABICNUMBER 0x6 Arapça numara.
C2_ORTAKAYIRACI 0x7 Ortak sayısal ayırıcı.
Nötr:
C2_BLOCKSEPARATOR 0x8 Blok ayırıcı.
C2_BÖLÜM AYIRICI 0x9 Segment ayırıcı.
C2_WHITESPACE 0xA Beyaz boşluk.
C2_DİĞERNEUTRAL 0xB Diğer nötrler.
Uygulanamaz:
C2_NOTAPPLICABLE 0x0 Gizli yön yok.

 

Ctype3 türleri, genel metin işleme için veya standart C kitaplığı işlevleri için gereken POSIX türlerinin uzantıları için yer tutucular olarak tasarlanmıştır.

CType3 adı Değer Anlam
C3_NONSPACING 0x1 Boşluksuz işaret.
C3_DİAKRİTİK 0x2 Aksansız özel işaret
C3_VOWELMARK 0x4 Sesli harf geçirgen olmayan işareti.
C3_SYMBOL 0x8 Sembol.
C3_KATAKANA 0x10 Katakana karakteri.
C3_HIRAGANA 0x20 Hiragana karakteri.
C3_YARIMGENİŞLİK 0x40 Yarım genişlikli karakter.
C3_FULLWIDTH 0x80 Tam genişlikli karakter.
C3_IDEOGRAPH 0x100 İdeografik karakter.
C3_KASHIDA 0x200 Arapça Keşide karakteri.
C3_ALPHA 0x8000 Tüm dil karakterleri (alfabetik, stil ve ideografik).
C3_NOTAPPLICABLE 0x0 Uygulanamaz.

 

Unicode Standard'da açıklanan aşağıdaki aralıklar için bir Düzenleme Geliştirme Kiti (EDK) pVar indeks tanımları içerebilir.

Karakter kümesi Unicode Aralığı Karakter kümesi Unicode Aralığı
ASCII 0x0—0x7f Amerikan Ulusal Standartlar Enstitüsü (ANSI) 0x0—0xff
ASCIIPrint 0x20—0x7e Latin1 0x20—0xff
Latin1Supp 0xa0—0xff LatinXA 0x100—0x17f
LatinXB 0x180—0x24f IPAX 0x250—0x2af
SpaceMod 0x2b0—0x2ff Birleştirme 0x300—0x36f
Yunanca 0x370—0x3ff Temel Yunanca 0x370—0x3cf
Yunanca Semboller 0x3d0—0x3ff Kiril 0x400—0x4ff
Ermenice 0x530—0x58f İbranice 0x590—0x5ff
BasicHebrew 0x5d0—0x5ea İbraniceXA 0x590—0x5cf
İbraniceXB 0x5eb—0x5ff Arapça 0x600—0x6ff
Temel Arapça 0x600—0x652 ArabicX 0x653—0x6ff
Devanagari 0x900—0x97f Bengalce 0x980—0x9ff
Gürmukhi 0xa00—0xa7f Guceratça 0xa80—0xaff
Odiya 0xb00—0xb7f Tamil dili 0xb80—0xbff
Teluga 0xc00—0xc7f Kannada dili 0xc80—0xcff
Malayalam dili 0xd00—0xd7f Tay dili 0xe00—0xe7f
Lao 0xe80—0xeff GeorgianX 0x10a0-0xa0cf
BaskGürcü 0x10d0—0x10ff Jamo 0x1100—0x11ff
LatinXAdd 0x1e00—0x1eff GreekX 0x1f00—0x1fff
GenPunct 0x2000—0x206f Üstsimge 0x2070—0x207f
Alt simge 0x2080—0x208f SuperSubscript 0x2070—0x209f
Para birimi 0x20a0—0x20cf CombMarkSym 0x20d0—0x20ff
LetterLike 0x2100—0x214f SayıFormları 0x2150—0x218f
Oklar 0x2190—0x21ff MathOps 0x2200—0x22ff
MiscTech 0x2300—0x23ff CtrlPictures 0x2400—0x243f
OptCharRecog 0x2440—0x245f EnclAlphaNum 0x2460—x24ff
Kutu Çizimi 0x2500—0x257f BlockElement 0x2580—0x259f
GeometShapes 0x25a0—0x25ff Çeşitli Semboller 0x2600—0x26ff
Dingbats 0x2700—0x27bf CJKSymPunct 0x3000—0x303f
Hiragana 0x3040—0x309f Katakana 0x30a0—0x30ff
Bopomofo 0x3100—0x312f HangulJamo 0x3130—0x318f
CJLMisc 0x3190—0x319f EnclCJK 0x3200—0x32ff
CJKCompatibl 0x3300—0x33ff Han 0x3400—0xabff
Hangul 0xac00—0xd7ff UTF16Lead karakter kodlaması 0xd800—0xdbff
UTF16Trail 0xdc00—0xdfff ÖzelKullanım 0xe000—0xf800
CJKCompIdeog 0xf900—0xfaff AlphaPres 0xfb00—0xfb4f
ArabicPresA 0xfb50—0xfdff CombHalfMark 0xfe20—0xfe2f
CJKCompForm 0xfe30—0xfe4f SmallFormVar 0xfe50—0xfe6f
ArabicPresB 0xfe70—0xfefe HalfFullForm 0xff00—0xffef
Özel Teklifler 0xfff0—0xfffd