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

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

?? wndpanes.cpp

?? MiniGUI源代碼
?? CPP
字號:
// WNDPanes.c : Implementation file of Window Pane.
// 
// Window Pane works as a element of WYMGUI.
// Using Window Pane, you can define a lot of static panes 
// in the main client window of WYMGUI, 
// and for any individual pane, you can define its display
// that is different from others.
//
// Copyright (c) 1997.7 ~ 1998.3, Mr. Wei Yongming.
//
// Last modified date: 1998.03.04.

#include <afxcoll.h>

#include <stdio.h>
#include <conio.h> 
#include <io.h>
#include <dos.h>
#include <bios.h>
#include <process.h>
#include <time.h>
#include <stddef.h>
#include <stdlib.h>
#include <malloc.h>
#include <graph.h>
#include <memory.h>
#include <Vmemory.h>
#include <string.h>
#include <direct.h>
#include <ctype.h>
#include <float.h>
#include <math.h>

#include "Common.h"
#include "Support.h"
#include "MainGUI.h"
#include "Dialog.h"
#include "WndPanes.h"
#include "Helper.h"

PWINDOWPANE pWndPane[MAX_PANENUMBER];
static HWNDPANE GetValidHandle()
{
    int i=0;
    while(pWndPane[i])
        i++;
    
    return (HWNDPANE)(i+1);
}

static BOOL SetPaneRect(HWNDPANE hWndPane, LPRECT lpRect)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return FALSE;
    
    pPane->sLeft = lpRect->left;
    pPane->sTop = lpRect->top;
    pPane->sRight = lpRect->right;
    pPane->sBottom = lpRect->bottom;
    return TRUE;
}

void GUIAPI DestroyPane(HWNDPANE hWndPane)
{
    delete pWndPane[hWndPane-1];
    pWndPane[hWndPane-1] = NULL;
}

void GUIAPI DestroyAllPanes()
{
    int i=0;
    while(pWndPane[i])
    {
        DestroyPane(i + 1);
        i++;
    }
}

HWNDPANE GUIAPI CreateParentPane(PGUIINFO pGUIInfo, short sFGColor, short sBKColor, LPCSTR szCaption, void (FAR *PaintProc)(HWNDPANE hWndPane))
{
    memset(pWndPane, 0, sizeof(PWINDOWPANE)*MAX_PANENUMBER);
    PWINDOWPANE pPane = new WINDOWPANE;
    
    if(pPane == NULL)
        return 0;
    
    pPane->pGUIInfo = pGUIInfo;
    pPane->sLeft = pGUIInfo->dc.clientrect.left;
    pPane->sTop = pGUIInfo->dc.clientrect.top;
    pPane->sRight = pGUIInfo->dc.clientrect.right;
    pPane->sBottom = pGUIInfo->dc.clientrect.bottom;
    pPane->PaintProc = PaintProc;
    pPane->sFGColor = sFGColor;
    pPane->sBKColor = sBKColor;
    pPane->lpData = NULL;
    pPane->nLineNum = 0;
    pPane->nCurLineNO = -1;
    pPane->lpClipRect = NULL;
    _fmemcpy(pPane->szCaption, szCaption, MAX_LENGTH_CAPTION + 1);
    pPane->szCaption[MAX_LENGTH_CAPTION] = '\0';
    pWndPane[0] = pPane;
    
    PostMessage(pGUIInfo, MSG_INITPANES, 1, 0L);
    return 1;
}

HWNDPANE GUIAPI CreateChildPane(HWNDPANE hParentPane, int iType, int iTopOrLeft, short sFGColor, short sBKColor, LPCSTR szCaption, void (FAR *PaintProc)(HWNDPANE hWndPane))
{
    if(iType != PANE_VERTICAL && iType != PANE_HORIZONTAL)
        return 0;

    PWINDOWPANE pPane = new WINDOWPANE;
    
    if(pPane == NULL)
        return 0;
    
    pPane->pGUIInfo = pWndPane[hParentPane - 1]->pGUIInfo;
    pPane->PaintProc = PaintProc;
    pPane->sBKColor = sBKColor;
    pPane->sFGColor = sFGColor;
    pPane->lpData = NULL;
    pPane->nLineNum = 0;
    pPane->lpClipRect = NULL;
    _fmemcpy(pPane->szCaption, szCaption, MAX_LENGTH_CAPTION + 1);
    pPane->szCaption[MAX_LENGTH_CAPTION] = '\0';
    HWNDPANE hWndPane = GetValidHandle();
    pWndPane[hWndPane-1] = pPane;
    
    
    RECT parentRect;
    RECT childRect;
    GetPaneRect(hParentPane, &parentRect);
    if(iType == PANE_VERTICAL)
    {
        childRect.left = iTopOrLeft;
        childRect.top = parentRect.top;
        childRect.right = parentRect.right;
        childRect.bottom = parentRect.bottom;
        parentRect.right = iTopOrLeft;
    }
    else
    {
        childRect.left = parentRect.left;
        childRect.top = iTopOrLeft;
        childRect.right = parentRect.right;
        childRect.bottom = parentRect.bottom;
        parentRect.bottom = iTopOrLeft;
    }
    SetPaneRect(hParentPane, &parentRect);
    SetPaneRect(hWndPane, &childRect);
    
    PostMessage(pPane->pGUIInfo, MSG_INITPANES, hWndPane, 0L);
    return hWndPane;
}

short GUIAPI GetPaneBKColor(HWNDPANE hWndPane)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return 0;
    
    return pPane->sBKColor;
}

LPCSTR GUIAPI GetPaneCaption(HWNDPANE hWndPane)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return NULL;
    
    return (LPCSTR)pPane->szCaption;
}

short GUIAPI GetPaneFGColor(HWNDPANE hWndPane)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return 0;
    
    return pPane->sFGColor;
}

BOOL GUIAPI GetPaneRect(HWNDPANE hWndPane, LPRECT lpRect)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return FALSE;
    
    lpRect->left = pPane->sLeft;
    lpRect->top = pPane->sTop;
    lpRect->right = pPane->sRight;
    lpRect->bottom = pPane->sBottom;
    return TRUE;
}

BOOL GUIAPI GetPaneClientRect(HWNDPANE hWndPane, LPRECT lpRect)
{
    if(!GetPaneRect(hWndPane, lpRect))
        return FALSE;
    
    if(_fstrlen(GetPaneCaption(hWndPane)) == 0)
        lpRect->top += 3;
    else
        lpRect->top += 20;
    lpRect->left += 3;
    lpRect->right -= 3;
    lpRect->bottom -= 3;
    return TRUE;
}

PWINDOWPANE GUIAPI GetPaneContent(HWNDPANE hWndPane)
{
    return pWndPane[hWndPane-1];
}

void GUIAPI PaintPanes(PGUIINFO pGUIInfo, PDC pDC)
{
    for(int i=0; i<MAX_PANENUMBER; i++)
    {
        if(pWndPane[i])
        {
            PGUIINFO pGUIInfo = pWndPane[i]->pGUIInfo;
            short buttonx = pWndPane[i]->sLeft;
            short buttony = pWndPane[i]->sTop;
            short buttonw = pWndPane[i]->sRight;
            short buttonh = pWndPane[i]->sBottom;

            // Paint client area.
            RECT rcClip = {buttonx, buttony, buttonw, buttonh};
            if(!IntersectRect(&rcClip, &pDC->cliprect))
                continue;
            
            set_cliprgn(rcClip.left, rcClip.top, rcClip.right, rcClip.bottom);

            // Erase pane.
            _setcolor(pWndPane[i]->sBKColor);
            _rectangle(_GFILLINTERIOR, buttonx + 2, buttony + 2,
                buttonw - 2, buttonh - 2);

            // Draw caption and border here.
            _setcolor(COLOR_lightgray);
            _rectangle(_GBORDER, buttonx, buttony, buttonw, buttonh);
            _setcolor(0);
            _moveto(buttonx + 1, buttonh - 1);
            _lineto(buttonx + 1, buttony + 1);
            _lineto(buttonw - 1, buttony + 1);
            _setcolor(14);
            _moveto(buttonx + 2, buttonh - 2);
            _lineto(buttonx + 2, buttony + 2);
            _lineto(buttonw - 2, buttony + 2);
            _setcolor(15);
            _moveto(buttonx + 1, buttonh - 1);
            _lineto(buttonw - 1, buttonh - 1);
            _lineto(buttonw - 1, buttony + 1);
            _setcolor(7);
            _moveto(buttonx + 2, buttonh - 2);
            _lineto(buttonw - 2, buttonh - 2);
            _lineto(buttonw - 2, buttony + 2);
            
            set_color(pWndPane[i]->sFGColor);
            cc_wt16(pWndPane[i]->szCaption, buttonx + 4, buttony + 4);

            pWndPane[i]->lpClipRect = &rcClip;
            pWndPane[i]->PaintProc((HWNDPANE)(i+1));
            pWndPane[i]->lpClipRect = NULL;
        }
    }
}

void GUIAPI UpdatePane(HWNDPANE hWndPane, LPRECT lpRect)
{
    RECT rc;
    GetPaneClientRect(hWndPane, &rc);
    
    RECT rcClip;
    memcpy(&rcClip, &rc, sizeof(RECT));
    
    if(lpRect != NULL)
    {
        IntersectRect(&rcClip, lpRect);
    }
    
    set_cliprgn(rcClip.left, rcClip.top, 
                rcClip.right, rcClip.bottom);
    
    // erase invalide rect.
    SetPtrVis(HIDE);
    _setcolor(pWndPane[hWndPane - 1]->sBKColor);
    _rectangle( _GFILLINTERIOR, rc.left, rc.top, 
                rc.right, rc.bottom);

    set_color(pWndPane[hWndPane - 1]->sFGColor);
    pWndPane[hWndPane - 1]->lpClipRect = &rcClip;
    pWndPane[hWndPane - 1]->PaintProc(hWndPane);
    pWndPane[hWndPane - 1]->lpClipRect = NULL;
    SetPtrVis(SHOW);

    // Restore clip rect.
    PGUIINFO pGUIInfo = pWndPane[hWndPane - 1]->pGUIInfo;
    set_cliprgn(pGUIInfo->dc.clientrect.left, pGUIInfo->dc.clientrect.top, 
        pGUIInfo->dc.clientrect.right, pGUIInfo->dc.clientrect.bottom);
}

void GUIAPI ScrollUpOnLine(HWNDPANE hWndPane)
{
    RECT rc;
    GetPaneClientRect(hWndPane, &rc);
    
    rc.left -= 3;
    rc.right += 3;
    int iWidth = rc.right - rc.left;
    int iHeight = rc.bottom - rc.top;
    if(iHeight < 16)
        return;
    
    iHeight -= 16;
    SetPtrVis(HIDE);
    move_image( rc.left, rc.top + 16,
                iWidth, iHeight,
                rc.left, rc.top );
    SetPtrVis(SHOW);
}

void GUIAPI AddTextLineToPane(HWNDPANE hWndPane, LPCSTR lpszText, BOOL bUpdate)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return;

    RECT rc;
    GetPaneClientRect(hWndPane, &rc);
    UINT nMaxLineNum = (UINT)((rc.bottom - rc.top)/16);
    if(nMaxLineNum <= (UINT)0)
        nMaxLineNum = (UINT)1;
    
    pPane->nLineNum++;
    LPTEXTLINE pOldTextLine = NULL;
    if(pPane->nLineNum > nMaxLineNum)
    {
        LPVOID lpData = pPane->lpData;
        pPane->lpData = ((LPTEXTLINE)(pPane->lpData))->pNextLine;
        pOldTextLine = (LPTEXTLINE)lpData;
    }
    
    if(!pPane->lpData)
    {
        if(pOldTextLine)
            pPane->lpData = pOldTextLine;
        else
            pPane->lpData = _fmalloc(sizeof(TEXTLINE));
        LPTEXTLINE lpTextLine = (LPTEXTLINE)(pPane->lpData);
        _fmemcpy(lpTextLine->szText, lpszText, MAX_LENGTH_LINE + 1);
        lpTextLine->szText[MAX_LENGTH_LINE] = '\0';
        lpTextLine->pNextLine = NULL;
        lpTextLine->nLineNo = pPane->nLineNum;
    }
    else
    {
        LPTEXTLINE lpTextLine = (LPTEXTLINE)(pPane->lpData);
        while(lpTextLine->pNextLine)
        {
            lpTextLine = lpTextLine->pNextLine;
        }
        
        if(pOldTextLine)
            lpTextLine->pNextLine = pOldTextLine;
        else
            lpTextLine->pNextLine = (LPTEXTLINE)_fmalloc(sizeof(TEXTLINE));
        lpTextLine = lpTextLine->pNextLine;
        _fmemcpy(lpTextLine->szText, lpszText, MAX_LENGTH_LINE + 1);
        lpTextLine->szText[MAX_LENGTH_LINE] = '\0';
        lpTextLine->pNextLine = NULL;
        lpTextLine->nLineNo = pPane->nLineNum;
    }
    
    if(bUpdate)
    {
        UINT nLine = pPane->nLineNum;
        if(nLine > nMaxLineNum)
        {
            nLine = nMaxLineNum;
            ScrollUpOnLine(hWndPane);
        }

        // Get line output rect
        RECT rcLine;
        memcpy(&rcLine, &rc, sizeof(RECT));
        rcLine.top = rc.top + 16*(nLine - 1);
        rcLine.bottom = rcLine.top + 16;
        
        UpdatePane(hWndPane, &rcLine);
    }
}

BOOL GUIAPI IsRectVisible(HWNDPANE hWndPane, LPRECT lpRect)
{
    if(pWndPane[hWndPane - 1]->lpClipRect == NULL)
        return TRUE;
        
    RECT rcTemp;
    _fmemcpy(&rcTemp, pWndPane[hWndPane - 1]->lpClipRect, sizeof(RECT));
    
    return IntersectRect(&rcTemp, lpRect);
}

void GUIAPI OutPaneText(HWNDPANE hWndPane)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return;

    LPTEXTLINE lpTextLine = (LPTEXTLINE)(pPane->lpData);
    if(!lpTextLine)
        return;
    
    RECT rc;
    RECT rcLine;
    int iLine = 0;
    GetPaneClientRect(hWndPane, &rc);
    while(lpTextLine)
    {
        rcLine.left = rc.left;
        rcLine.top = rc.top + 16*iLine;
        rcLine.right = rc.right;
        rcLine.bottom = rcLine.top + 16;
        
        if(IsRectVisible(hWndPane, &rcLine))
        {
            char szLineNo[10];
            sprintf(szLineNo, "%06u", lpTextLine->nLineNo);
            cc_wt16(szLineNo, rc.left + 4, rc.top + 16*iLine);
            cc_wt16(lpTextLine->szText, rc.left + 56, rc.top + 16*iLine);
        }
        
        lpTextLine = lpTextLine->pNextLine;
        iLine++;
    }
}

void GUIAPI FlashLastLine(HWNDPANE hWndPane)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return;

    LPTEXTLINE lpTextLine = (LPTEXTLINE)(pPane->lpData);
    if(!lpTextLine)
        return;
    
    int iLine = 0;
    RECT rc;
    LPTEXTLINE lpLastLine;
    GetPaneClientRect(hWndPane, &rc);
    do
    {
        lpLastLine = lpTextLine;
        lpTextLine = lpTextLine->pNextLine;
        
        if(lpTextLine == NULL)
            break;
        
        iLine++;
    }while(TRUE);
    
    char szLineNo[10];
    sprintf(szLineNo, "%06u", lpLastLine->nLineNo);
    
    static BOOL bErase = TRUE;
    
    SetPtrVis(HIDE);
    if(bErase)
        set_color(pWndPane[hWndPane - 1]->sBKColor);
    else
        set_color(pWndPane[hWndPane - 1]->sFGColor);

    char szFlashLine[MAX_LENGTH_LINE + 1];
    int iFlashLineLength = __min((rc.right - rc.left - 4)/8, MAX_LENGTH_LINE);
    _fmemcpy(szFlashLine, lpLastLine->szText, iFlashLineLength);
    szFlashLine[iFlashLineLength] = '\0';
    cc_wt16(szFlashLine, rc.left + 56, rc.top + 16*iLine);
    SetPtrVis(SHOW);

    bErase = !bErase;
}

void GUIAPI DeleteWndPaneContent(HWNDPANE hWndPane)
{
    PWINDOWPANE pPane = pWndPane[hWndPane-1];
    if(!pPane)
        return;

    LPTEXTLINE lpTextLine = (LPTEXTLINE)(pPane->lpData);
    LPTEXTLINE pNextTextLine;
    while(lpTextLine)
    {
        pNextTextLine = lpTextLine->pNextLine;
        
        _ffree(lpTextLine);
        
        lpTextLine = pNextTextLine;
    }
    
    pPane->lpData = NULL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩二区三区在线观看| 国产精品久久久久久久久快鸭| 成人性生交大合| 韩国精品一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 免费人成精品欧美精品| 午夜伦理一区二区| 免费成人性网站| 国模冰冰炮一区二区| 久久电影网站中文字幕| 蜜臀av一区二区| 天堂影院一区二区| 五月婷婷激情综合| 六月丁香综合在线视频| 免费成人av资源网| 国产一区二区三区观看| 国产在线精品一区二区不卡了| 国产麻豆精品久久一二三| 国产**成人网毛片九色| 99久久er热在这里只有精品66| 91黄视频在线观看| 美美哒免费高清在线观看视频一区二区 | 蜜臂av日日欢夜夜爽一区| 日韩精品亚洲一区| 国产麻豆欧美日韩一区| www.亚洲人| 欧美日韩国产不卡| 国产欧美日韩精品一区| 亚洲女女做受ⅹxx高潮| 青青国产91久久久久久| 国产高清精品在线| 欧美日韩国产大片| 国产精品视频一二三| 亚洲男人天堂av| 久久成人18免费观看| www.亚洲精品| 欧美成人欧美edvon| 亚洲婷婷在线视频| 久久国产剧场电影| 色噜噜狠狠成人网p站| 欧美成人猛片aaaaaaa| 亚洲男同性视频| 国内国产精品久久| 欧美日韩视频在线一区二区 | www.亚洲在线| 欧美一区二区视频在线观看2020| 中文字幕av一区 二区| 日韩综合小视频| 99国产欧美另类久久久精品| 欧美一二区视频| 日韩高清不卡在线| 色综合色狠狠天天综合色| 欧美一区二区二区| 亚洲精品一二三区| 成人污污视频在线观看| 91精品国产入口| 亚洲午夜久久久久中文字幕久| 国产精品 日产精品 欧美精品| 欧美日韩国产一级片| 亚洲女同一区二区| 国产成人aaaa| 久久久久久久免费视频了| 秋霞午夜av一区二区三区| 欧美午夜电影网| 亚洲精品美国一| 99热99精品| 国产精品理论片| 成人手机电影网| 久久久天堂av| 国产成人免费视频一区| 2023国产精华国产精品| 久久99最新地址| 欧美成人激情免费网| 日韩和欧美一区二区| 在线观看成人小视频| 中文字幕亚洲综合久久菠萝蜜| 懂色av一区二区三区蜜臀| 久久久国产一区二区三区四区小说 | 国产精品福利一区二区三区| 久久精品久久精品| 久久色在线视频| 国产精品一区二区三区乱码| 日韩美女一区二区三区四区| 日本午夜一区二区| va亚洲va日韩不卡在线观看| 国产日产欧美一区二区视频| 国产一区二区精品久久| 国产三级一区二区| 成人在线一区二区三区| 国产精品久久久久久久浪潮网站 | 偷拍日韩校园综合在线| 6080亚洲精品一区二区| 蜜乳av一区二区三区| 欧美一级免费观看| 精品在线播放免费| 中文字幕一区在线| 色综合天天综合| 日韩中文字幕亚洲一区二区va在线| 欧美一区二区三区成人| 久久国产精品区| 亚洲免费观看在线视频| 欧美老女人在线| 国产精品1区2区| 亚洲精品国产高清久久伦理二区| 欧美日韩大陆一区二区| 久久精品国产一区二区三区免费看| 久久天天做天天爱综合色| 99天天综合性| 日韩高清国产一区在线| 国产欧美日韩综合精品一区二区| 91在线视频免费观看| 亚洲亚洲人成综合网络| 国产免费成人在线视频| 欧美综合在线视频| 精品一区二区三区香蕉蜜桃| 成人欧美一区二区三区视频网页| 欧美三级欧美一级| 欧美色综合久久| 国产v综合v亚洲欧| 天堂影院一区二区| 中文字幕日本乱码精品影院| 日韩一级二级三级| 色妞www精品视频| 国产成人午夜视频| 免费观看在线综合色| 亚洲欧美中日韩| 精品日韩成人av| 欧美三级乱人伦电影| 久久av资源网| 日韩av不卡在线观看| 国产精品久久久久久户外露出| 欧美美女一区二区三区| 99re热这里只有精品视频| 国产在线精品国自产拍免费| 亚洲一区二区三区中文字幕在线| 欧美激情一二三区| 日韩欧美一级二级| 欧美日韩夫妻久久| 91精品办公室少妇高潮对白| 成人污污视频在线观看| 国产乱子伦视频一区二区三区| 日本中文一区二区三区| 天堂在线一区二区| 亚洲制服丝袜一区| 一区二区三区在线免费观看| 欧美国产激情一区二区三区蜜月| 欧美大肚乱孕交hd孕妇| 欧美一级专区免费大片| 欧美日韩激情一区二区三区| 91麻豆国产香蕉久久精品| 亚欧色一区w666天堂| 又紧又大又爽精品一区二区| 亚洲欧美日韩综合aⅴ视频| 日本一区二区三区电影| 国产精品午夜久久| 亚洲欧洲日韩综合一区二区| 中文字幕 久热精品 视频在线| 欧美极品少妇xxxxⅹ高跟鞋 | 久久一区二区三区国产精品| 日韩精品一区二区三区四区| 精品国产精品一区二区夜夜嗨 | 成人国产精品免费观看动漫| 盗摄精品av一区二区三区| 成人综合婷婷国产精品久久免费| 国产大陆亚洲精品国产| www.日本不卡| 91久久国产最好的精华液| 欧美自拍丝袜亚洲| 91精品国产综合久久久久久漫画| 日韩免费高清av| 国产婷婷精品av在线| 国产精品电影院| 性做久久久久久| 韩国一区二区三区| va亚洲va日韩不卡在线观看| 色94色欧美sute亚洲线路一久| 日本道色综合久久| 91麻豆精品国产91久久久久久| 欧美成人精品高清在线播放| 国产欧美精品日韩区二区麻豆天美| 中文一区一区三区高中清不卡| 一级日本不卡的影视| 麻豆精品一区二区av白丝在线| 黑人精品欧美一区二区蜜桃| 99久久综合色| 日韩视频在线观看一区二区| 欧美激情一区二区三区在线| 樱桃国产成人精品视频| 久久国内精品自在自线400部| 懂色av中文字幕一区二区三区| 91美女福利视频| 久久亚区不卡日本| 一区二区三区欧美久久| 国内不卡的二区三区中文字幕| av毛片久久久久**hd| 久久久久国产精品麻豆ai换脸 | 欧美卡1卡2卡| 欧美激情中文不卡| 久久疯狂做爰流白浆xx| 一本高清dvd不卡在线观看|