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

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

?? wndpanes.cpp

?? 這是早期MiniGUI DOS版本的最終版
?? 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一区二区三区免费野_久草精品视频
国产在线播放一区三区四| 国产日韩精品一区二区三区在线| 亚洲视频综合在线| 91在线码无精品| 亚洲精品欧美综合四区| 欧美日韩一区二区在线视频| 日韩主播视频在线| 日韩精品在线网站| 国产成人亚洲综合a∨猫咪| 国产精品久久久久久久岛一牛影视 | 成人18视频在线播放| 日韩美女视频一区二区 | 国产精品国产自产拍高清av王其| 国产成人免费在线观看不卡| 亚洲天堂免费在线观看视频| 欧美日韩激情在线| 国产一区二区三区不卡在线观看 | 久久免费看少妇高潮| 成人美女在线观看| 亚洲成国产人片在线观看| 亚洲另类春色国产| 日韩一区和二区| 大美女一区二区三区| 亚洲国产乱码最新视频| 337p日本欧洲亚洲大胆色噜噜| 风间由美一区二区三区在线观看 | 国产精品三级在线观看| 久久久久久免费毛片精品| 99久久精品国产麻豆演员表| 亚洲成a人片在线观看中文| 国产丝袜美腿一区二区三区| 在线精品视频免费播放| 国产专区综合网| 亚洲国产综合人成综合网站| 久久久久国产成人精品亚洲午夜| 欧美最新大片在线看| 国产激情一区二区三区四区| 午夜影视日本亚洲欧洲精品| 日本一区二区久久| 日韩一级大片在线观看| 色综合咪咪久久| 国产不卡在线一区| 久久成人麻豆午夜电影| 亚洲成av人在线观看| 国产精品色哟哟| 久久精品亚洲一区二区三区浴池| 欧美在线观看视频一区二区| 国产999精品久久久久久| 日韩1区2区3区| 一区二区三区四区不卡视频| 欧美激情一区二区在线| 91麻豆精品久久久久蜜臀 | 免费久久精品视频| 亚洲在线视频网站| 成人免费视频在线观看| 久久久久久久国产精品影院| 日韩亚洲欧美一区| 欧美日韩国产小视频| 一本大道av伊人久久综合| 成人三级伦理片| 国产在线麻豆精品观看| 日本不卡一二三| 日韩中文字幕麻豆| 亚洲成人综合网站| 亚洲高清视频中文字幕| 一片黄亚洲嫩模| 一区二区三区不卡在线观看| 亚洲日本电影在线| 亚洲人成亚洲人成在线观看图片| 欧美激情在线一区二区三区| 国产欧美一区二区三区鸳鸯浴 | 欧美xxxxx牲另类人与| 欧美老肥妇做.爰bbww| 欧美日韩一区国产| 欧美日韩日日摸| 制服丝袜国产精品| 日韩视频免费观看高清完整版在线观看 | 成人国产精品免费观看视频| 国产成人免费av在线| 国产成人精品www牛牛影视| 国产精品一区二区三区网站| 国产成人免费视频| 99久免费精品视频在线观看| 99re8在线精品视频免费播放| 不卡的av电影在线观看| 一本一道综合狠狠老| 在线免费不卡电影| 7777精品伊人久久久大香线蕉的| 欧美日韩视频不卡| 欧美成人官网二区| 久久久美女毛片| 中文字幕一区二区三区色视频| 偷窥少妇高潮呻吟av久久免费| 日日摸夜夜添夜夜添亚洲女人| 日韩精品免费视频人成| 国产在线不卡视频| 91视频在线观看| 91精品国产91久久综合桃花| 精品国产一区二区三区不卡 | 国产综合色产在线精品| 国产成人激情av| 日本丶国产丶欧美色综合| 5858s免费视频成人| 久久久久久久国产精品影院| 亚洲色图一区二区| 午夜视频一区二区三区| 狠狠色丁香婷婷综合久久片| 不卡视频在线看| 欧美美女一区二区在线观看| 精品国产一区二区三区四区四| 亚洲欧美在线另类| 日韩国产成人精品| 成人免费av资源| 91麻豆精品国产91久久久久久久久 | 亚洲最大成人网4388xx| 久久国产综合精品| 99久久免费国产| 欧美一卡二卡在线观看| 国产精品久久久久久久浪潮网站| 亚洲成在人线免费| 99热这里都是精品| 精品久久久网站| 一级日本不卡的影视| 狠狠色伊人亚洲综合成人| 日本电影欧美片| 欧美激情一区三区| 乱中年女人伦av一区二区| 色噜噜狠狠色综合欧洲selulu| 日韩精品自拍偷拍| 亚洲第一av色| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美白人最猛性xxxxx69交| 亚洲国产成人av| 99久久国产综合精品色伊| 久久综合狠狠综合久久激情| 亚洲大型综合色站| 91蜜桃免费观看视频| 国产色爱av资源综合区| 久久精工是国产品牌吗| 欧美日韩一区久久| 亚洲蜜臀av乱码久久精品| 国产精品一级片在线观看| 日韩一区二区在线免费观看| 亚洲乱码中文字幕| 成人三级在线视频| 久久久久久久久久久电影| 老司机免费视频一区二区| 69久久夜色精品国产69蝌蚪网| 亚洲日本在线观看| 99re热这里只有精品免费视频| 中文字幕第一区第二区| 国产成人精品免费网站| www国产亚洲精品久久麻豆| 美女mm1313爽爽久久久蜜臀| 欧美日韩和欧美的一区二区| 亚洲精品视频一区| 色一区在线观看| 成人欧美一区二区三区黑人麻豆| 成人性色生活片免费看爆迷你毛片| 26uuu色噜噜精品一区二区| 蜜桃久久av一区| 日韩情涩欧美日韩视频| 日韩国产一二三区| 91麻豆精品国产| 日本一不卡视频| 欧美肥妇毛茸茸| 日本成人在线一区| 欧美zozo另类异族| 国产一区二区视频在线播放| 久久青草国产手机看片福利盒子| 韩国精品主播一区二区在线观看 | 制服视频三区第一页精品| 午夜精品福利视频网站| 欧美一区三区四区| 久久国产精品99精品国产| 精品国产一区二区精华| 国产精品中文欧美| 亚洲欧美在线视频| 欧美中文字幕一区二区三区| 午夜a成v人精品| 欧美电视剧免费全集观看| 国产精品1024久久| 亚洲欧美自拍偷拍| 欧美色综合网站| 久久66热偷产精品| 亚洲国产精品v| 在线观看一区二区精品视频| 亚洲gay无套男同| 精品国产乱码久久久久久图片| 福利一区二区在线观看| 一区二区三区在线观看国产| 在线不卡中文字幕| 激情av综合网| 亚洲美女区一区| 91精品在线一区二区| 国产精品 欧美精品| 亚洲午夜免费视频| 精品国产凹凸成av人网站| 成人在线视频首页| 午夜天堂影视香蕉久久|