Changeset 771 in dev


Ignore:
Timestamp:
Aug 2, 2009, 10:29:43 PM (15 years ago)
Author:
イグトランス (egtra)
Message:

リモートデスクトップ使用時の描画を改善(ダブルバッファの不使用、キャレット移動時の再描画をいくらか排除)。

Location:
trunk/ab5.0/abdev/abdev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/abdev/DrawBuffer.cpp

    r681 r771  
    2323public:
    2424    HDC memdc;
    25     CDrawReserve(int WndNum,HDC _hDC,int cx,int cy,int ctrl_tab_space,int nMaxOnePageChar,int linenum_textcount){
     25    CDrawReserve(int WndNum,HDC _hDC,int cx,int cy,int ctrl_tab_space,int nMaxOnePageChar,int linenum_textcount,BOOL isRemoteSession){
    2626        m_WndNum=WndNum;
    2727        x=-1;
    2828        y=-1;
    2929        bNowUnder=0;
    30         hdc=_hDC;
    3130        ClientSize.cx=cx;
    3231        ClientSize.cy=cy;
     
    3534        iMax_OneLine_TextLength=cx/font_width+1;
    3635        iLineNumberTextCount=linenum_textcount;
    37         memdc=CreateCompatibleDC(hdc);
    38         hMemBmp=CreateCompatibleBitmap(hdc,cx,cy);
    39         hOldBitmap=(HBITMAP)SelectObject(memdc,hMemBmp);
     36        if(isRemoteSession){
     37            hdc=0;
     38            memdc=_hDC;
     39        }
     40        else{
     41            hdc=_hDC;
     42            memdc=CreateCompatibleDC(hdc);
     43            hMemBmp=CreateCompatibleBitmap(hdc,cx,cy);
     44            hOldBitmap=(HBITMAP)SelectObject(memdc,hMemBmp);
     45        }
    4046
    4147        //背景色でメモリ画面を初期化
     
    4349        hBrush=CreateSolidBrush(tci.rgbBackground);
    4450        hOldBrush=(HBRUSH)SelectObject(memdc,hBrush);
    45         PatBlt(memdc,0,0,cx,cy,PATCOPY);
     51        PatBlt(memdc,ctrl_tab_space,0,cx-ctrl_tab_space,cy,PATCOPY);
    4652        DeleteObject(hBrush);
    4753
     
    6975    }
    7076    ~CDrawReserve(){
    71         SelectObject(memdc,hOldBitmap);
    72         DeleteObject(hMemBmp);
    73 
    7477        SelectObject(memdc,hOldFont);
    75 
    76         DeleteDC(memdc);
    77 
     78        if(hdc){
     79            SelectObject(memdc,hOldBitmap);
     80            DeleteObject(hMemBmp);
     81
     82            DeleteDC(memdc);
     83        }
    7884        HeapDefaultFree(lpszBuffer);
    7985    }
     
    260266
    261267
    262         //メモリDCの内容を画面に描画
    263         BitBlt(hdc,0,0,ClientSize.cx,ClientSize.cy,memdc,0,0,SRCCOPY);
     268        //メモリDCを使用している場合、その内容を画面に描画
     269        if (hdc){
     270            BitBlt(hdc,0,0,ClientSize.cx,ClientSize.cy,memdc,0,0,SRCCOPY);
     271        }
    264272    }
    265273};
     
    298306        iControlTabSpace,
    299307        OnePage_CharHeight,
    300         iLineNumberTextCount);
     308        iLineNumberTextCount,
     309        GetSystemMetrics(SM_REMOTESESSION));
    301310
    302311
  • trunk/ab5.0/abdev/abdev/TextEditor_KeyEvent.cpp

    r629 r771  
    488488    int WndNum;
    489489    WndNum=GetWndNum(GetParent(hwnd));
     490    bool isSelectedBefore = MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x!=MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.x
     491        || MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y!=MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.y;
    490492
    491493    if(nVirtualKey==VK_LEFT||nVirtualKey==VK_UP||nVirtualKey==VK_RIGHT||nVirtualKey==VK_DOWN||nVirtualKey==VK_PRIOR||nVirtualKey==VK_NEXT){
     
    665667        ResetState_EditMenu();
    666668
    667         //再描画(選択時の反転表示が解除されたときを考慮)
    668         UpdateWindow(hwnd); //ちらつき防止
    669         InvalidateRect(hwnd,NULL,0);
     669        if(!TextEdit_ScrollCaret(WndNum,0)&&isSelectedBefore){
     670            UpdateWindow(hwnd); //ちらつき防止
     671            //再描画(選択時の反転表示が解除されたときを考慮)
     672            InvalidateRect(hwnd,NULL,0);
     673        }
    670674    }
    671675    else if(nVirtualKey==VK_HOME||nVirtualKey==VK_END){
     
    705709        }
    706710
    707         if(!TextEdit_ScrollCaret(WndNum,0)){
     711        if(!TextEdit_ScrollCaret(WndNum,0)&&isSelectedBefore){
    708712            //再描画(選択時の反転表示が解除されたときを考慮)
    709713            InvalidateRect(hwnd,NULL,0);
Note: See TracChangeset for help on using the changeset viewer.