コード例 #1
0
        public static IntPtr ScriptStringAnalyseCall
            (IntPtr hdc,
            IntPtr char_buffer,
            int max_char_len,
            SCRIPT_TABDEF tab_def)
        {
            IntPtr ret        = IntPtr.Zero;
            IntPtr actual_buf = char_buffer;
            ScripStringAnalyseOptions opts =
                ScripStringAnalyseOptions.BREAK |
                //ScripStringAnalyseOptions.FALLBACK |
                ScripStringAnalyseOptions.GLYPHS |
                //ScripStringAnalyseOptions.LINK |
                ScripStringAnalyseOptions.TAB;
            int res0 = ScriptStringAnalyse
                           (hdc,
                           actual_buf,
                           max_char_len,
                           (int)((max_char_len * 1.5) + 16),
                           -1,
                           opts,
                           0,
                           IntPtr.Zero,
                           IntPtr.Zero,
                           IntPtr.Zero,
                           ref tab_def,
                           IntPtr.Zero,
                           ref ret);

            if (res0 != S_OK)
            {
                Marshal.ThrowExceptionForHR(res0);
            }
            return(ret);
        }
コード例 #2
0
 public static extern int ScriptStringAnalyse
     (IntPtr hdc,
     IntPtr pString,
     int cString,
     int cGlyphs,
     int iCharset,
     ScripStringAnalyseOptions dwFlags,
     int iReqWidth,
     IntPtr psControl, //SCRIPT_CONTROL*
     IntPtr psState,   //SCRIPT_STATE*
     IntPtr piDx,      // const int*
     ref SCRIPT_TABDEF pTabdef,
     IntPtr pbInClass, //const BYTE*
     ref IntPtr pssa   //SCRIPT_STRING_ANALYSIS*
     );
コード例 #3
0
        public static IntPtr ScriptStringAnalyseCall
            (IntPtr hdc,
            IntPtr char_buffer,
            int max_char_len,
            int max_width,
            SCRIPT_TABDEF tab_def)
        {
            IntPtr ret        = IntPtr.Zero;
            IntPtr actual_buf = char_buffer;
            ScripStringAnalyseOptions opts =
                ScripStringAnalyseOptions.BREAK |
                ScripStringAnalyseOptions.CLIP |
                //ScripStringAnalyseOptions.FALLBACK | -> это вызывает утечку, не освобождаются объекты gdi font
                ScripStringAnalyseOptions.GLYPHS |
                //ScripStringAnalyseOptions.LINK |
                ScripStringAnalyseOptions.TAB;
            int res0 = ScriptStringAnalyse
                           (hdc,
                           actual_buf,
                           max_char_len,
                           (int)((max_char_len * 1.5) + 16),
                           -1,
                           opts,
                           max_width,
                           IntPtr.Zero,
                           IntPtr.Zero,
                           IntPtr.Zero,
                           ref tab_def,
                           IntPtr.Zero,
                           ref ret);

            if (res0 != S_OK)
            {
                Marshal.ThrowExceptionForHR(res0);
            }
            return(ret);
        }