亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? text.c

?? miniucgui1.30版本的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*** $Id: text.c,v 1.15 2003/09/04 06:02:53 weiym Exp $**** text.c: The Text Support of GDI.**** Copyright (C) 2003 Feynman Software.** Copyright (C) 2000 ~ 2002 Wei Yongming.**** Current maintainer: Wei Yongming.**** Create date: 2000/4/19*//*** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*//*** TODO:*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "cliprect.h"#include "gal.h"#include "internals.h"#include "ctrlclass.h"#include "dc.h"#include "drawtext.h"#include "cursor.h"int GUIAPI GetFontHeight (HDC hdc){    PDC pdc = dc_HDC2PDC(hdc);    return pdc->pLogFont->size;}int GUIAPI GetMaxFontWidth (HDC hdc){    PDC pdc = dc_HDC2PDC(hdc);    DEVFONT* sbc_devfont = pdc->pLogFont->sbc_devfont;    DEVFONT* mbc_devfont = pdc->pLogFont->mbc_devfont;    int sbc_max_width = (*sbc_devfont->font_ops->get_max_width) (pdc->pLogFont, sbc_devfont);    int mbc_max_width = 0;    if (mbc_devfont)        mbc_max_width = (*mbc_devfont->font_ops->get_max_width) (pdc->pLogFont, mbc_devfont);        return (sbc_max_width > mbc_max_width) ? sbc_max_width : mbc_max_width;}void GUIAPI GetTextExtent (HDC hdc, const char* spText, int len, SIZE* pSize){    PDC pdc;    pdc = dc_HDC2PDC(hdc);    if (len < 0) len = strlen (spText);    gdi_get_TextOut_extent (pdc, pdc->pLogFont, spText, len, pSize);}void GUIAPI GetTabbedTextExtent (HDC hdc, const char* spText, int len, SIZE* pSize){    PDC pdc;    pdc = dc_HDC2PDC(hdc);    if (len < 0) len = strlen (spText);    gdi_get_TabbedTextOut_extent (pdc, pdc->pLogFont, pdc->tabstop,                 spText, len, pSize, NULL);}void GUIAPI GetLastTextOutPos (HDC hdc, POINT* pt){    PDC pdc;    pdc = dc_HDC2PDC(hdc);    *pt = pdc->CurTextPos;}int GUIAPI TextOutLen (HDC hdc, int x, int y, const char* spText, int len){    PDC pdc;    SIZE size;    if (len == 0) return 0;    if (len < 0) len = strlen (spText);    pdc = dc_HDC2PDC(hdc);    gdi_get_TextOut_extent (pdc, pdc->pLogFont, spText, len, &size);    {        /* update text out position. */        int width = size.cx;        extent_x_SP2LP (pdc, &width);        pdc->CurTextPos.x = x + width;        pdc->CurTextPos.y = y;    }    if (dc_IsGeneralDC (pdc)) {        LOCK (&pdc->pGCRInfo->lock);        if (!dc_GenerateECRgn (pdc, FALSE)) {            UNLOCK (&pdc->pGCRInfo->lock);            return size.cx;        }    }#ifdef _LITE_VERSION    if (CHECK_DRAWING (pdc)) return size.cx;#endif    /* Transfer logical to device to screen here. */    coor_LP2SP(pdc, &x, &y);    /* set rc_output to full device rect. */    pdc->rc_output = pdc->DevRC;    /* output text. */    gdi_strnwrite (pdc, x, y, spText, len);    /* we are done. */    UNLOCK_GCRINFO (pdc);    return size.cx;}int GUIAPI TabbedTextOutLen (HDC hdc, int x, int y, const char* spText, int len) {    PDC pdc;    SIZE size;    if (len == 0) return 0;    if (len < 0) len = strlen (spText);    pdc = dc_HDC2PDC(hdc);    coor_LP2SP (pdc, &pdc->CurTextPos.x, &pdc->CurTextPos.y);    gdi_get_TabbedTextOut_extent (pdc, pdc->pLogFont, pdc->tabstop, spText, len,                 &size, &pdc->CurTextPos);    /* update text out position. */    coor_SP2LP (pdc, &pdc->CurTextPos.x, &pdc->CurTextPos.y);    if (dc_IsGeneralDC (pdc)) {        LOCK (&pdc->pGCRInfo->lock);        if (!dc_GenerateECRgn (pdc, FALSE)) {            UNLOCK (&pdc->pGCRInfo->lock);            return size.cx;        }    }#ifdef _LITE_VERSION    if (CHECK_DRAWING (pdc)) return size.cx;#endif    /* Transfer logical to device to screen here. */    coor_LP2SP(pdc, &x, &y);    /* set rc_output to full device rect. */    pdc->rc_output = pdc->DevRC;    /* output text */    gdi_tabbedtextout (pdc, x, y, spText, len);    /* done! */    UNLOCK_GCRINFO (pdc);    return size.cx;}char* strnchr (const char* s, size_t n, int c){    size_t i;        for (i=0; i<n; i++) {        if ( *s == c)            return (char *)s;        s ++;    }    return NULL;}int substrlen (const char* text, int len, char delimiter, int* nr_delim){    char* substr;    *nr_delim = 0;    if ( (substr = strnchr (text, len, delimiter)) == NULL)        return len;    len = substr - text;    while (*substr == delimiter) {        (*nr_delim) ++;        substr ++;    }    return len;}int GUIAPI TabbedTextOutEx (HDC hdc, int x, int y, const char* spText,		int nCount, int nTabs, int *pTabPos, int nTabOrig){    PDC pdc;    int line_len, sub_len;    int nr_tab = 0, tab_pos, def_tab;    int x_orig = x, max_x = x;    int line_height;    int nr_delim_newline, nr_delim_tab;    if (nCount == 0) return 0;    if (nCount < 0) nCount = strlen (spText);    pdc = dc_HDC2PDC(hdc);    line_height = pdc->pLogFont->size + pdc->alExtra + pdc->blExtra;    y += pdc->alExtra;    if (nTabs == 0 || pTabPos == NULL) {        int ave_width = (*pdc->pLogFont->sbc_devfont->font_ops->get_ave_width)                        (pdc->pLogFont, pdc->pLogFont->sbc_devfont);        def_tab = ave_width * pdc->tabstop;    }    else        def_tab = pTabPos [nTabs - 1];    while (nCount) {        line_len = substrlen (spText, nCount, '\n', &nr_delim_newline);        nCount -= line_len + nr_delim_newline;        nr_tab = 0;        x = x_orig;        tab_pos = nTabOrig;        while (line_len) {            int i, width;            sub_len = substrlen (spText, line_len, '\t', &nr_delim_tab);            width = TextOutLen (hdc, x, y, spText, sub_len);            x += width;             if (x >= tab_pos) {                while (x >= tab_pos)                    tab_pos += (nr_tab >= nTabs) ? def_tab : pTabPos [nr_tab++];                for (i = 0; i < nr_delim_tab - 1; i ++)                    tab_pos += (nr_tab >= nTabs) ? def_tab : pTabPos [nr_tab++];            }            else {                for (i = 0; i < nr_delim_tab; i ++)                    tab_pos += (nr_tab >= nTabs) ? def_tab : pTabPos [nr_tab++];            }            x = tab_pos;            line_len -= sub_len + nr_delim_tab;            spText += sub_len + nr_delim_tab;        }        if (max_x < x) max_x = x;        spText += nr_delim_newline;        y += line_height * nr_delim_newline;    }    return max_x - x_orig;}static void txtDrawOneLine (PDC pdc, const char* pText, int nLen, int x, int y,                    const RECT* prcOutput, UINT nFormat, int nTabWidth){    /* set rc_output to the possible clipping rect */    pdc->rc_output = *prcOutput;    if (nFormat & DT_EXPANDTABS) {        const char* sub = pText;        const char* left;        int nSubLen = nLen;        int nOutputLen;                        while ((left = strnchr (sub, nSubLen, '\t'))) {                                nOutputLen = left - sub;            x += gdi_strnwrite (pdc, x, y, sub, nOutputLen);                                nSubLen -= (nOutputLen + 1);            sub = left + 1;            x += nTabWidth;        }        if (nSubLen != 0)            gdi_strnwrite (pdc, x, y, sub, nSubLen);    }    else        gdi_strnwrite (pdc, x, y, pText, nLen);}static int txtGetWidthOfNextWord (PDC pdc, const char* pText, int nCount, int* nChars){    int width;    DEVFONT* sbc_devfont = pdc->pLogFont->sbc_devfont;    DEVFONT* mbc_devfont = pdc->pLogFont->mbc_devfont;    WORDINFO word_info;     *nChars = 0;    if (nCount == 0) return 0;    if (mbc_devfont) {        int mbc_pos, sub_len;        mbc_pos = (*mbc_devfont->charset_ops->pos_first_char) (pText, nCount);        if (mbc_pos == 0) {            sub_len = (*mbc_devfont->charset_ops->len_first_substr) (pText, nCount);            (*mbc_devfont->charset_ops->get_next_word) (pText, sub_len, &word_info);            width = (*mbc_devfont->font_ops->get_str_width)                         (pdc->pLogFont, mbc_devfont, pText, word_info.len, pdc->cExtra);            *nChars = word_info.len;            return width;        }        else if (mbc_pos > 0)            nCount = mbc_pos;    }    (*sbc_devfont->charset_ops->get_next_word) (pText, nCount, &word_info);    width = (*sbc_devfont->font_ops->get_str_width)                     (pdc->pLogFont, sbc_devfont, pText, word_info.len, pdc->cExtra);    *nChars = word_info.len;#if 0    fprintf (stderr, "text: %s, width: %d, word len: %d\n", pText, width, word_info.len);#endif    return width;}// This function return the normal characters' number (refrence)// and tab's number per line (return value).static int txtGetOneLine (PDC pdc, const char* pText, int nCount, int nTabWidth,         int maxwidth, UINT uFormat, int* nChar){    int x = 0, y = 0;    int tabs = 0;    int wordLen;    int lineWidth = 0;    int wordWidth;    if (uFormat & DT_SINGLELINE) {        *nChar = nCount;        return 0;    }    *nChar = 0;    while (TRUE) {        wordWidth = txtGetWidthOfNextWord (pdc, pText, nCount, &wordLen);        if ((wordWidth < maxwidth)                && ((lineWidth + wordWidth) > maxwidth)                 && (uFormat & DT_WORDBREAK))            break;        pText += wordLen;        nCount -= wordLen;        lineWidth += wordWidth;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品在线观看入口| 欧美一级一级性生活免费录像| 91小视频免费看| 国产亚洲美州欧州综合国| 黑人巨大精品欧美一区| 欧美国产一区视频在线观看| 丁香啪啪综合成人亚洲小说| 国产精品电影一区二区| 日本韩国精品一区二区在线观看| 亚洲国产视频直播| 欧美一区二区三区精品| 麻豆精品久久久| 久久久久久久综合日本| 成人精品国产福利| 亚洲欧美日韩成人高清在线一区| 欧美久久久久久久久久| 美国毛片一区二区| 国产精品免费aⅴ片在线观看| 91丝袜高跟美女视频| 日本欧美一区二区| 久久美女高清视频| 欧美中文字幕一二三区视频| 久久国产乱子精品免费女| 国产午夜精品久久久久久久| 色激情天天射综合网| 天堂资源在线中文精品| 久久午夜老司机| 欧美天天综合网| 国产精品18久久久久久久久| 亚洲丶国产丶欧美一区二区三区| 欧美成人国产一区二区| 91免费看片在线观看| 久久97超碰色| 一区二区三区四区高清精品免费观看| 欧美精品久久99久久在免费线 | 蜜臀av国产精品久久久久| 久久久久久毛片| 欧美美女直播网站| 国产激情视频一区二区三区欧美| 亚洲精品伦理在线| 日韩情涩欧美日韩视频| 在线免费不卡视频| 国产超碰在线一区| 美女一区二区在线观看| 成人欧美一区二区三区1314| 欧美大胆人体bbbb| 欧美日韩亚洲国产综合| a4yy欧美一区二区三区| 精品亚洲免费视频| 日本免费新一区视频| 亚洲人成网站精品片在线观看| 日韩精品中文字幕在线不卡尤物 | 欧美一区二区三区免费大片| 波多野结衣中文字幕一区| 久久99国产乱子伦精品免费| 亚洲午夜久久久| 最新中文字幕一区二区三区| xfplay精品久久| 欧美精品丝袜中出| 欧美综合在线视频| 91蝌蚪porny| 不卡av免费在线观看| 国产精品一区二区果冻传媒| 免费观看91视频大全| 五月天一区二区| 亚洲一区二区在线播放相泽| 亚洲摸摸操操av| 中文字幕一区二| 久久精品这里都是精品| 久久久高清一区二区三区| 欧美一区欧美二区| 5858s免费视频成人| 欧美日韩在线播| 欧美日本视频在线| 欧美人与禽zozo性伦| 亚洲男同1069视频| 91精品国产福利| 欧美蜜桃一区二区三区| 欧美欧美欧美欧美| 日韩一区二区精品在线观看| 欧美一级精品在线| 日韩免费视频线观看| 日韩一区二区三区四区五区六区| 欧美日韩一卡二卡| 日韩视频一区二区三区在线播放 | 国产欧美日韩亚州综合| 国产日本欧洲亚洲| 国产精品大尺度| 亚洲欧美激情视频在线观看一区二区三区 | 奇米色777欧美一区二区| 美国三级日本三级久久99| 国产一区二区网址| 成人免费黄色在线| 在线视频一区二区三区| 欧美精品日韩综合在线| 日韩一级片在线播放| 久久久蜜桃精品| 亚洲欧美日韩中文字幕一区二区三区| 一区二区在线观看视频| 日韩精品一二三| 国产91丝袜在线18| 日本丰满少妇一区二区三区| 5566中文字幕一区二区电影| 久久精品亚洲精品国产欧美kt∨| 国产精品传媒入口麻豆| 日韩主播视频在线| 成人免费观看男女羞羞视频| 欧美怡红院视频| 精品日韩一区二区三区| 中文字幕一区二区在线播放| 亚洲成人综合在线| 国产一区二区免费视频| 在线视频国内自拍亚洲视频| 91精品国产综合久久精品图片| 日韩免费在线观看| 国产女人18水真多18精品一级做| 一区二区三区四区在线免费观看 | 欧美午夜影院一区| 色综合天天综合| 欧美一区二区视频在线观看| 国产日韩亚洲欧美综合| 亚洲精品视频一区二区| 国产一区美女在线| 91在线高清观看| 欧美成人三级电影在线| 成人免费小视频| 国内精品视频一区二区三区八戒| 成人av电影观看| 欧美精品18+| 国产欧美日韩中文久久| 奇米一区二区三区av| 成人激情图片网| 日韩你懂的电影在线观看| 日韩欧美国产系列| 亚洲欧美色综合| 高清成人免费视频| 欧美日韩在线直播| 一区在线播放视频| 人人狠狠综合久久亚洲| 国产精品乱码久久久久久 | 丁香网亚洲国际| 欧美日韩高清影院| 国产欧美日产一区| 亚洲精品国产无套在线观| 国产综合成人久久大片91| 色综合久久九月婷婷色综合| 日本一区二区免费在线观看视频| 日韩和欧美一区二区三区| 91丨九色丨蝌蚪富婆spa| 欧美激情在线观看视频免费| 日日夜夜精品免费视频| 欧美私人免费视频| 日本一二三四高清不卡| 蜜桃av噜噜一区| 日本电影欧美片| 国产欧美日产一区| 麻豆久久久久久久| 欧美美女一区二区| 一区二区三区在线视频免费| 国产成人av在线影院| 精品国产一区二区三区av性色 | 欧美不卡一区二区三区四区| 天天色图综合网| 91尤物视频在线观看| 国产午夜精品一区二区三区视频| 国内精品在线播放| 欧美一区二区三区思思人| 青青青爽久久午夜综合久久午夜| 色综合天天性综合| 亚洲综合视频在线观看| 青青草97国产精品免费观看 | 国产一区在线精品| 久久在线观看免费| 国产东北露脸精品视频| 久久精品人人做人人综合 | 亚洲一区二区四区蜜桃| 精品1区2区3区| 亚洲一区二区视频| 欧美日韩一区二区三区在线看 | 精品久久久久久亚洲综合网| 激情成人综合网| 91精品国产综合久久婷婷香蕉| 青青青伊人色综合久久| 欧美精品一区二区三区在线| 久久99日本精品| 国产欧美综合色| 成人在线一区二区三区| 亚洲人成7777| 成人激情黄色小说| 亚洲人成伊人成综合网小说| 欧美久久久久久久久久| 日av在线不卡| 中文子幕无线码一区tr| 国内久久精品视频| 亚洲日本在线天堂| 91精品国产综合久久小美女| 麻豆精品视频在线观看免费| 国产精品素人视频| 色哦色哦哦色天天综合| 久久99国内精品|