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

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

?? textedit_impl.h

?? mini gui 1.6.8 lib and source
?? H
字號:
/*** $Id: textedit_impl.h,v 1.3 2005/02/05 02:51:34 snig Exp $ **** textedit.h: header file of TextEdit control.**** Copyright (C) 2004 Feynman Software.*/#ifndef _TEXTEDIT_IMPL_H_#define _TEXTEDIT_IMPL_H_#ifdef __cplusplusextern "C"{#endif/* ---------------------- configuration options ----------------------- *//* supports text selection */#define _SELECT_SUPPORT     1/* supports text undo/redo operations *///#define _UNDO_SUPPORT       1/* support title text */#define _TITLE_SUPPORT          1/* -------------------------------------------------------------------- *//* default base line height */#define DEF_LINE_BASE_H         ( (GetWindowStyle(hWnd) & TES_BASELINE) ? 2 : 0 )/* default line above height */#define DEF_LINE_ABOVE_H        4/* minimal line above height */#define MIN_LINE_ABOVE_H        1/* default line height */#define DEF_LINE_HEIGHT         ( GetWindowFont(hWnd)->size + DEF_LINE_BASE_H + \                                 DEF_LINE_ABOVE_H )/* default line buffer size */ #define DEF_LINE_BUFFER_SIZE    128/* default line step block size */#define DEF_LINE_BLOCK_SIZE     32/* default line seperator '\n' */#define DEF_LINESEP             '\n'#define CH_RN                   "\r\n"/* default title length */#define DEF_TITLE_LEN           63/* draw text format */#define TE_FORMAT  (DT_LEFT | DT_TOP | DT_NOCLIP | DT_EXPANDTABS) #ifdef _UNDO_SUPPORT#define DEF_UNDO_DEPTH          3/* undo operation types */#define UNDO_OP_EDIT            1#define UNDO_OP_ADD             2#define UNDO_OP_DEL             3#endif/* -------------------------------------------------------------------- *//* internal status flags */#define TEST_SELECT     0x0001#define TEST_FOCUSED    0x0002#define TEST_TMP        0x0004#define TEST_REPLACE    0x0008#define TEST_MOVE       0x0010#define TEST_NOCARET    0x0020/* ------------------------------- text document/buffer ------------------------ *//* content type, reserved */typedef enum {    CT_TEXT,    CT_BMP,    CT_ICON,} ContentType;/* text format, reserved */typedef enum {    TF_PLAINTEXT,    TF_RICHTEXT,    TF_MEDIATEXT,} TextFormat;/* one text line (end with '\n') is a scrollview item */ /* structure of text node/line */typedef struct _textnode{    list_t    list;            /* list element */    StrBuffer content;    //ContentType type;        /* text node content type, reserved */    DWORD     addData;         /* for storing scrollview item handle */} TextNode;/* structure of a text mark, recording insert position or selection range */typedef struct _textmark{    int       pos_lnOff;       /* mark offset in the text node*/    TextNode  *curNode;        /* text node containing the mark*/} TextMark;/* structure of text document data */typedef struct _textdoc{    list_t    queue;           /* text line/node head */    /* setup field */    unsigned char lnsep;       /* line seperator (default is "\n") */    int       nDefLineSize;    /* default line buffer size*/    int       nBlockSize;      /* line buffer block size */    //TextFormat txtFormat;    /* text format, reserved */    /* node init function executed when creating node */    void      (*init_fn)     (struct _textdoc *, TextNode *, TextNode *);    /* node change function executed when changing current insertion/selection node */    void      (*change_fn)   (struct _textdoc *, BOOL bSel);    /* node content change function executed when string content of a node is changed */    void      (*change_cont) (struct _textdoc *, TextNode *node);    /* node destroy function */    void      (*del_fn)      (struct _textdoc *, TextNode *);    void       *fn_data;       /* data passed to init_fn */    /* status field */    TextMark  insert;          /* cursor/insertion mark */#ifdef _SELECT_SUPPORT    TextMark  selection;       /* selection mark */#endif} TextDoc;/* -------------------------------------------------------------------------- */#ifdef _UNDO_SUPPORT#define ACTION_COUNT    5/* backup data struct */typedef struct _status_data{    DWORD     flags;        /* editor status */    int       des_caret_x;  /* the desired caret x position, changed by mouse and <- , -> */    int       caret_x;      /* caret x position in the virtual content window */    int       caret_y;      /* caret y position in the virtual content window */#ifdef _SELECT_SUPPORT    int       sel_x;        /* selection point x position in the virtual content window */    int       sel_y;        /* selection point y position in the virtual content window */#endif    TextNode  *maxNode;     /* node with the max length */    int       maxLen;       /* max line length */    TextNode  *secNode;     /* node with the second max length */    int       secLen;       /* seconde max line length */    int       curItemY;     /* y position of the current insertion node */#ifdef _SELECT_SUPPORT    int       selItemY;     /* y position of the selection node */#endif} STATDATA;typedef STATDATA* PSTATDATA;/* structure of backup text node/line */typedef struct _bk_textnode{    list_t    list;         /* list element */    StrBuffer content;      /* text content */} BkNode;typedef struct _backup_data{    STATDATA  statData;    TextMark  bkIns;        /* backup insertion point */    TextMark  bkSel;        /* backup selection point */    int       opType;       /* operation type */    list_t    bkQueue;      /* backup text nodes */} BKDATA;typedef BKDATA* PBKDATA;#endif/* structure of textedit control data */typedef struct _tedata{    SVDATA    svdata;       /* scrollview object */    TextDoc   txtdoc;       /* text document object */    /* ----------------- properties ------------------- */    int       nLineHeight;  /* line height */    int       nLineAboveH;  /* height of above-line area */    int       nLineBaseH;   /* height of base-line area */    unsigned char lnChar;   /* the char used to represent line seperator */    unsigned char caretShape; /* shape of the caret */#ifdef _TITLE_SUPPORT    char      *title;       /* title text displayed before content text */    int       titleIndent;  /* title indent */#endif    /* ----------------- status ----------------------- */    /* don't move this field */    DWORD     flags;        /* editor status */    int       des_caret_x;  /* the desired caret x position, changed by mouse and <- , -> */    int       caret_x;      /* caret x position in the virtual content window */    int       caret_y;      /* caret y position in the virtual content window */#ifdef _SELECT_SUPPORT    int       sel_x;        /* selection point x position in the virtual content window */    int       sel_y;        /* selection point y position in the virtual content window */#endif    TextNode  *maxNode;     /* node with the max length */    int       maxLen;       /* max line length */    TextNode  *secNode;     /* node with the second max length */    int       secLen;       /* seconde max line length */    int       curItemY;     /* y position of the current insertion node */#ifdef _SELECT_SUPPORT    int       selItemY;     /* y position of the selection node */#endif#ifdef _UNDO_SUPPORT    BKDATA    *bkData;      /* backup status data */    int       undo_level;   /* current undo level */    int       cur_undo_depth; /* current undo depth */    int       undo_depth;   /* depth of undo stack */    int       act_count;    /* user action count */#endif    ED_DRAWSEL_FUNC drawSelected;    int       (*getCaretWidth) (HWND hWnd, int def_width);    HDC       mem_dc;} TEDATA;typedef TEDATA* PTEDATA;/* -------------------------------------------------------------------------- *//* alloc for text node *///TODOstatic inline TextNode* textnode_alloc (void){    return malloc (sizeof(TextNode));}static inline void textnode_free (TextNode * node){    free (node);}#define ptescr          (&ptedata->svdata.scrdata)/* gets the current caret position in the virtual content window */#define myGetCaretPos(pt)  \            ( (pt)->x = ptedata->caret_x, \              (pt)->y = ptedata->caret_y )#ifdef _SELECT_SUPPORT#define myGetSelPos(pt) \            ( (pt)->x = ptedata->sel_x, \              (pt)->y = ptedata->sel_y )#define mySetSelPos(x, y) \        ( ptedata->sel_x = x >= 0 ? x : ptedata->sel_x, \          ptedata->sel_y = y >= 0 ? y : ptedata->sel_y )#endif#define BE_WRAP(hWnd)     (GetWindowStyle(hWnd) & TES_AUTOWRAP)#define BE_FIRST_NODE(node) \           (node->list.prev == &txtdoc->queue)#define BE_LAST_NODE(node) \           (node->list.next == &txtdoc->queue)#define FIRSTNODE(txtdoc) \           (list_entry((txtdoc)->queue.next, TextNode, list))#define LASTNODE(txtdoc) \           (list_entry((txtdoc)->queue.prev, TextNode, list))#define NODE_LINENR(node) \        ( scrollview_get_item_height((HSVITEM)(node)->addData) / ptedata->nLineHeight )#define NODE_HEIGHT(node) \        (scrollview_get_item_height((HSVITEM)(node)->addData))#define NODE_INDEX(node) \        (scrollview_get_item_index(hWnd, (HSVITEM)(node)->addData))static inline int teGetLineIndent (PTEDATA ptedata, TextNode *node){#ifdef _TITLE_SUPPORT    if (node && node->list.prev == &ptedata->txtdoc.queue) {        return ptedata->titleIndent;    }#endif    return 0;}#define TXTNODE_NEXT(node) \            ( ((node)->list.next == &txtdoc->queue) ? NULL : \                list_entry((node)->list.next, TextNode, list) )#define TXTNODE_PREV(node) \            ( ((node)->list.prev == &txtdoc->queue) ? NULL : \                list_entry((node)->list.prev, TextNode, list) ) #ifdef _SELECT_SUPPORTstatic BOOL textnode_is_selected (TextDoc *txtdoc, TextNode *node){    if (!txtdoc->selection.curNode)        return FALSE;    return scrollview_is_item_selected ((HSVITEM)node->addData);}#define NODE_IS_SELECTED(node) \            scrollview_is_item_selected ((HSVITEM)node->addData)#define SELECT_NODE(node, bsel) \            scrollview_select_item (&ptedata->svdata, (HSVITEM)(node)->addData, bsel)#endif#define is_rn_sep(pIns) (txtdoc->lnsep == '\n' && *(pIns) == '\r' && *(pIns+1) == '\n')#define check_caret() \            if (txtdoc->selection.curNode) { \                if (txtdoc->selection.curNode == txtdoc->insert.curNode && \                      txtdoc->selection.pos_lnOff == txtdoc->insert.pos_lnOff) { \                    ShowCaret (hWnd); \                    txtdoc->selection.curNode = NULL; \                } \                else \                    HideCaret (hWnd); \            } \            else \                ShowCaret (hWnd);#define REFRESH_NODE(node) \            scrollview_refresh_item(&ptedata->svdata, (HSVITEM)(node)->addData)static inttextdoc_insert_string_ex (TextDoc *txtdoc, TextNode *enode, int insert_pos,                          const char* newtext, int len);static inline inttextdoc_insert_string_ex_2 (TextDoc *txtdoc, TextNode *enode, int insert_pos,                          const char* newtext, int len){    TextNode *node;    BOOL bDel;    int ret;    bDel = (txtdoc->selection.curNode && !enode) ? TRUE : FALSE;    node = enode ? enode : txtdoc->insert.curNode;    /* must use enode here */    ret = textdoc_insert_string_ex (txtdoc, enode, insert_pos, newtext, len);    if (!enode)        txtdoc->insert.pos_lnOff = ret;    if (txtdoc->change_cont) {        txtdoc->change_cont (txtdoc, node);    }    return !bDel;}#define textdoc_insert_string(txtdoc, newtext, len)  \             textdoc_insert_string_ex_2(txtdoc, NULL, 0, newtext, len)#ifdef _SELECT_SUPPORT    #define GETMARK(cond)     ( (cond) ? (&txtdoc->selection) : \                                      (&txtdoc->insert) )    #define SETITEMY(cond, item_y)    \                if (cond) \                    ptedata->selItemY = item_y; \                else \                    ptedata->curItemY = item_y;#else    #define GETMARK(cond)     ((cond)? NULL : &txtdoc->insert)    #define SETITEMY(cond, item_y)    \                if (!cond) \                    ptedata->curItemY = item_y;#endif#ifdef _UNDO_SUPPORT    #define BACKUP_STDATA(stdata) \                memcpy (stdata, (void*)&ptedata->flags, sizeof(STATDATA));    #define UNDO_STDATA(stdata) \                memcpy ((void*)&ptedata->flags, stdata, sizeof(STATDATA));#endif#ifdef __cplusplus}#endif  /* __cplusplus */#endif  /* _TEXTEDIT_IMPL_H_ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩另类视频免费观看 | 久久久精品蜜桃| 国产欧美一区二区精品秋霞影院| 国产精品久久久久久久久免费丝袜| 午夜一区二区三区视频| 成人av免费观看| 精品少妇一区二区三区免费观看| 亚洲综合男人的天堂| 99久久99久久久精品齐齐| 精品日韩欧美一区二区| 三级欧美韩日大片在线看| 91麻豆文化传媒在线观看| 欧美国产视频在线| 激情综合色综合久久综合| 7777精品久久久大香线蕉| 亚洲美女视频在线观看| 不卡视频一二三| 国产欧美在线观看一区| 麻豆精品久久久| 欧美丰满美乳xxx高潮www| 亚洲毛片av在线| 91丨九色丨蝌蚪丨老版| 中文字幕一区二区三区不卡| 丁香婷婷综合色啪| 欧美激情一区二区三区全黄| 国产一区二区导航在线播放| 精品国产在天天线2019| 日韩精品欧美精品| 制服丝袜国产精品| 男女视频一区二区| 日韩午夜激情视频| 蜜桃视频在线观看一区| 日韩亚洲国产中文字幕欧美| 久热成人在线视频| 26uuu国产日韩综合| 国产精品1区2区| 国产精品久线在线观看| 97国产精品videossex| 亚洲美女偷拍久久| 欧美性猛交一区二区三区精品| 亚洲自拍偷拍九九九| 欧美日韩电影一区| 久久精品国产99国产| 国产亚洲人成网站| 成人午夜视频福利| 亚洲精品国产一区二区精华液| 欧美性做爰猛烈叫床潮| 奇米四色…亚洲| 国产偷v国产偷v亚洲高清| 东方aⅴ免费观看久久av| 中文字幕一区二区三区不卡| 欧美主播一区二区三区美女| 日韩国产欧美一区二区三区| 精品国产乱码久久久久久牛牛 | 日韩视频在线你懂得| 久88久久88久久久| 国产精品第13页| 欧美剧情电影在线观看完整版免费励志电影 | 国产成人av一区二区三区在线| 国产清纯白嫩初高生在线观看91| 色综合一个色综合| 免费在线观看一区| 中文字幕一区日韩精品欧美| 欧美裸体一区二区三区| 国产成a人亚洲精品| 亚洲va在线va天堂| 久久久国产一区二区三区四区小说| 91丝袜高跟美女视频| 蜜臀av一区二区在线免费观看| 国产精品成人网| 欧美一区中文字幕| 99国产精品久久久久久久久久| 青青草精品视频| 国产精品国产自产拍高清av| 欧美一区二区不卡视频| 91免费视频网址| 久久99国产精品尤物| 亚洲另类中文字| 久久综合九色综合97婷婷| 色88888久久久久久影院按摩| 麻豆极品一区二区三区| 亚洲一区二区欧美| 亚洲欧美综合色| 欧美成人一级视频| 欧美精品亚洲一区二区在线播放| 成人动漫在线一区| 精品夜夜嗨av一区二区三区| 亚洲国产精品一区二区www在线| 国产婷婷色一区二区三区在线| 欧美日韩高清一区二区不卡| 91影院在线免费观看| 国模套图日韩精品一区二区| 日韩av中文字幕一区二区| 亚洲精品第一国产综合野| 久久综合狠狠综合久久激情| 欧美精品1区2区| 在线观看视频欧美| 色www精品视频在线观看| 成人在线综合网站| 国产激情偷乱视频一区二区三区| 日本一区中文字幕| 午夜影院在线观看欧美| 亚洲午夜激情网页| 一区二区激情小说| 亚洲人妖av一区二区| 欧美国产成人在线| 久久久99久久| 久久久久久久久99精品| 欧美精品一区二区高清在线观看 | 亚洲777理论| 亚洲一线二线三线视频| 亚洲欧美日韩一区二区 | 国产日产欧美一区二区三区| 欧美精品一区二区三区在线| 久久综合狠狠综合久久激情| 精品成人私密视频| 久久久无码精品亚洲日韩按摩| 2017欧美狠狠色| 中文字幕的久久| 亚洲视频一区二区在线观看| 日韩毛片视频在线看| 亚洲男人电影天堂| 亚洲午夜一区二区| 午夜成人在线视频| 久久精品国产网站| 国产成人午夜99999| 97久久精品人人做人人爽| 色哟哟一区二区| 7777精品伊人久久久大香线蕉的| 日韩一级视频免费观看在线| 精品久久久久久无| 久久网站热最新地址| 国产精品精品国产色婷婷| 樱花影视一区二区| 麻豆久久久久久久| 丁香啪啪综合成人亚洲小说| 99久久婷婷国产综合精品| 欧美亚洲综合在线| 精品免费一区二区三区| 国产日本一区二区| 亚洲一区二区美女| 国产精品影音先锋| 色哟哟国产精品免费观看| 欧美一区二区免费视频| 国产欧美日韩卡一| 性做久久久久久久免费看| 美女在线一区二区| 91免费观看视频| 日韩女优制服丝袜电影| 国产精品美女久久久久久久久久久| 一区二区在线免费| 激情深爱一区二区| 在线看日本不卡| 久久久精品综合| 亚洲国产乱码最新视频 | 国产农村妇女精品| 亚洲综合精品自拍| 国产一区二区在线看| 精品视频免费看| 中文字幕在线观看一区二区| 三级欧美在线一区| 91免费视频大全| 久久久综合视频| 日本sm残虐另类| 91啪在线观看| 国产目拍亚洲精品99久久精品| 亚洲va国产天堂va久久en| 粉嫩一区二区三区性色av| 91麻豆精品国产91| 亚洲免费观看高清完整版在线观看 | 美女精品自拍一二三四| av不卡在线播放| 久久精品夜色噜噜亚洲a∨| 丝袜美腿亚洲色图| 欧美在线你懂得| 亚洲欧洲日产国产综合网| 日本欧美韩国一区三区| 91精品福利视频| 国产精品美女一区二区在线观看| 经典三级一区二区| 欧美狂野另类xxxxoooo| 亚洲影视在线观看| 色狠狠一区二区三区香蕉| 国产精品你懂的| 成人午夜视频网站| 欧美激情在线一区二区| 国产精品影视天天线| 久久嫩草精品久久久精品一| 激情综合色播激情啊| 777午夜精品视频在线播放| 一区二区三区日韩精品| 99久久99久久精品免费观看| 中文字幕一区二区三区四区不卡 | 亚洲精品乱码久久久久久| 成人午夜激情在线| 日本一区二区三区dvd视频在线| 激情综合一区二区三区| 欧美变态tickle挠乳网站| 奇米影视一区二区三区| 欧美成人乱码一区二区三区|