CDxVScrollView Class Reference

#include <DxVScrollView.h>

Inheritance diagram for CDxVScrollView:
Inheritance graph
[legend]
Collaboration diagram for CDxVScrollView:
Collaboration graph
[legend]

List of all members.

Public Member Functions

virtual void InitObject (void)
virtual void ExecRender ()
virtual BOOL SetNewSurface (int ovsbpos)
virtual void OnInitialUpdate ()

Public Attributes

RECT dispRect
RECT renderRect
RECT bufferRect
int maxClientYSize

Protected Member Functions

 CDxVScrollView ()
virtual ~CDxVScrollView ()
virtual void AssertValid () const
virtual void Dump (CDumpContext &dc) const
afx_msg void OnSize (UINT nType, int cx, int cy)
afx_msg void OnLButtonDblClk (UINT nFlags, CPoint point)

Detailed Description

Definition at line 30 of file DxVScrollView.h.


Constructor & Destructor Documentation

CDxVScrollView (  )  [protected]

Definition at line 26 of file DxVScrollView.cpp.

00027 {   
00028     cnstXSize = true;
00029     activeWin = true;
00030 
00031     // メモリ上の領域  dispRect = renderRect + vSBpos
00032     dispRect.top      = 0;  // 表示するメモリの先頭(Y座標)
00033     dispRect.bottom   = 0;  // 表示するメモリの最後(Y座標)
00034     dispRect.right    = 0;  //
00035     dispRect.left     = 0;  //
00036 
00037     // サーフェイスの有効領域 または 表示領域の大きさ
00038     renderRect.top    = 0;  //
00039     renderRect.bottom = 0;  //
00040     renderRect.right  = 0;  //
00041     renderRect.left   = 0;  //
00042 
00043     // バックバッファの描画領域
00044     bufferRect.top    = 0;  //
00045     bufferRect.bottom = 0;  //  
00046     bufferRect.right  = 0;  //
00047     bufferRect.left   = 0;  //
00048 
00049     maxClientYSize    = 0;
00050     vSBntch           = 10;
00051 }

~CDxVScrollView (  )  [protected, virtual]

Definition at line 55 of file DxVScrollView.cpp.

00056 {
00057 }


Member Function Documentation

void AssertValid (  )  const [protected, virtual]

Reimplemented from CExView.

Definition at line 86 of file DxVScrollView.cpp.

00087 {
00088     CDxBaseView::AssertValid();
00089 }

void Dump ( CDumpContext &  dc  )  const [protected, virtual]

Reimplemented from CExView.

Definition at line 93 of file DxVScrollView.cpp.

00094 {
00095     CDxBaseView::Dump(dc);
00096 }

void ExecRender ( void   )  [virtual]

Reimplemented from CDxBaseView.

Definition at line 157 of file DxVScrollView.cpp.

References CDxVScrollView::bufferRect, CDxBaseView::bufferSize, CExView::clientRect, CDxBaseView::d3dParam, IDS_STR_FAIL_CLR_WND, IDS_STR_FAIL_RESTR_DX9DEV, IDS_STR_FAIL_TRNS_BAKBUF, CDxBaseView::lpBackBuffer, CDxBaseView::lpD3DDevice, CDxBaseView::lpSurface, CExView::pFrame, CDxVScrollView::renderRect, and jbxwl::ResetDx9Device().

00158 {
00159     HRESULT  hr;
00160 
00161     // クライアント領域がメモリ領域より大きい場合の転送領域の計算
00162     if (clientRect.bottom==0) bufferRect.bottom = 0;
00163     else  bufferRect.bottom = (int)(renderRect.bottom*bufferSize.y/(float)clientRect.bottom);
00164     bufferRect.right = bufferSize.x;
00165 
00166     hr = lpD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255,255,255), 1.0f, 0);
00167     if (FAILED(hr)) {
00168         CString mesg;
00169         mesg.LoadString(IDS_STR_FAIL_CLR_WND);
00170         MessageBox(_T("CDxVScrollView::ExecRender():\n\n") + mesg);
00171         return;
00172     }
00173 
00174     hr = lpD3DDevice->StretchRect(lpSurface, &renderRect, lpBackBuffer, &bufferRect, D3DTEXF_NONE);
00175     if (FAILED(hr)) {
00176         CString mesg;
00177         mesg.LoadString(IDS_STR_FAIL_TRNS_BAKBUF);
00178         MessageBox(_T("CDxVScrollView::ExecRender():\n\n") + mesg);
00179         return;
00180     }
00181 
00182     hr = lpD3DDevice->Present(NULL, NULL, NULL, NULL);
00183     if (FAILED(hr)) {
00184         //DEBUG_INFO("CDxVScrollView::ExecRender(): Resetting Device ...\n"); 
00185         hr = ResetDx9Device(lpD3DDevice, &d3dParam, this);
00186         if (FAILED(hr)) {
00187             CString mesg;
00188             mesg.LoadString(IDS_STR_FAIL_RESTR_DX9DEV);
00189             MessageBox(_T("CDxVScrollView::ExecRender():\n\n") + mesg);
00190             pFrame->SendMessage(WM_CLOSE);
00191             //GetParentFrame()->DestroyWindow();
00192         }
00193         else  ExecRender();
00194     }
00195 }

Here is the call graph for this function:

void InitObject ( void   )  [virtual]

Reimplemented from CDxBaseView.

Definition at line 223 of file DxVScrollView.cpp.

References CDxBaseView::bufferSize, CExView::clientRect, CExView::cmnHead, jbxwl::Dx9GetBackBuffer(), CExView::hasViewData, IDS_STR_FAIL_REGET_BAKBUF, IDS_STR_FAIL_REGET_SURFACE, IDS_STR_FAIL_RETRNS_SURFACE, CDxBaseView::lpBackBuffer, CDxBaseView::lpD3DDevice, CDxBaseView::lpSurface, CDxVScrollView::SetNewSurface(), and CExView::vSBpos.

00224 {
00225     bufferSize = Dx9GetBackBuffer(lpD3DDevice, &lpBackBuffer);
00226     if (bufferSize.x<0) {
00227         CString mesg;
00228         mesg.LoadString(IDS_STR_FAIL_REGET_BAKBUF);
00229         MessageBox(_T("CDxVScrollView::InitObject():\n\n") + mesg);
00230         return;
00231     }
00232 
00233     GetClientRect(&clientRect);
00234     HRESULT hr = lpD3DDevice->CreateOffscreenPlainSurface(cmnHead.xsize, clientRect.bottom+1, D3DFMT_R5G6B5, D3DPOOL_DEFAULT, &lpSurface, NULL);
00235     if (FAILED(hr)) { 
00236         CString mesg;
00237         mesg.LoadString(IDS_STR_FAIL_REGET_SURFACE);
00238         MessageBox(_T("CDxVScrollView::InitObject():\n\n") + mesg);
00239         return;
00240     }
00241 
00242     hasViewData = SetNewSurface(vSBpos);
00243     if (!hasViewData) {
00244         CString mesg;
00245         mesg.LoadString(IDS_STR_FAIL_RETRNS_SURFACE);
00246         MessageBox(_T("CDxVScrollView::InitObject():\n\n") + mesg);
00247         return;
00248     }
00249     return;
00250 }

Here is the call graph for this function:

void OnInitialUpdate ( void   )  [virtual]

Reimplemented from CDxBaseView.

Definition at line 105 of file DxVScrollView.cpp.

References CDxBaseView::bufferSize, CExView::clientRect, CExDocument::cmnHead, CExView::cmnHead, CDxVScrollView::dispRect, CExFrame::doneErrorMessage, jbxwl::Dx9GetBackBuffer(), CExView::hasViewData, IDS_STR_FAIL_CRT_BAKBUF, IDS_STR_FAIL_GET_DX9DEV, CDxBaseView::InitDevice(), CDxBaseView::lpBackBuffer, CDxBaseView::lpD3DDevice, CDxVScrollView::maxClientYSize, CExView::origXSize, CExView::origYSize, CExView::pDoc, CExView::pFrame, CExDocument::preTitle, CExDocument::pstTitle, CDxVScrollView::renderRect, CExView::SetTitle(), CExView::SetWindowSize(), CExView::sizeXYRate, CExDocument::Title, CExView::Title, CExView::vSBmax, and CExView::vSBpos.

00106 {
00107     cmnHead = pDoc->cmnHead;
00108     if (isNull(cmnHead.grptr)) return;
00109 
00110     maxClientYSize = Min(cmnHead.ysize, this->maxYSize);
00111     BOOL rslt = InitDevice(cmnHead.xsize, maxClientYSize);
00112     if (!rslt) {
00113         // 失敗した場合は,領域が大きすぎる可能性がある
00114         CString mesg;
00115         mesg.LoadString(IDS_STR_FAIL_GET_DX9DEV);
00116         MessageBox(_T("CDxVScrollView::OnInitialUpdate():\n\n") + mesg);
00117         pFrame->doneErrorMessage = TRUE;
00118         return;
00119     }
00120 
00121     dispRect.right    = cmnHead.xsize - 1;  // dispRect.left = 0;
00122     renderRect.right  = cmnHead.xsize - 1;
00123     dispRect.bottom   = Min(cmnHead.ysize-1, clientRect.bottom);
00124     renderRect.bottom = dispRect.bottom;
00125 
00126     vSBpos = 0;
00127     vSBmax = cmnHead.ysize - cmnHead.zsize; //(clientRect.bottom - clientRect.top + 1);
00128     if (vSBmax<0) vSBmax = 0;
00129     SetScrollRange(SB_VERT, 0, vSBmax);
00130 
00131     // グラフィックデータ用バックバッファ
00132     bufferSize = Dx9GetBackBuffer(lpD3DDevice, &lpBackBuffer);
00133     if (bufferSize.x<0) {
00134         CString mesg;
00135         mesg.LoadString(IDS_STR_FAIL_CRT_BAKBUF);
00136         MessageBox(_T("CDxVScrollView::OnInitialUpdate():\n\n") + mesg);
00137         pFrame->doneErrorMessage = TRUE;
00138         return;
00139     }
00140 
00141     origXSize  = cmnHead.xsize;
00142     origYSize  = cmnHead.zsize;
00143     sizeXYRate = (float)cmnHead.zsize/(float)cmnHead.xsize;
00144 
00145     //DEBUG_INFO("CDxVScrollView::OnInitialUpdate():\n");
00146     SetWindowSize(cmnHead.xsize, cmnHead.zsize);
00147     hasViewData = TRUE;
00148 
00149     Title = pDoc->preTitle + pDoc->Title + pDoc->pstTitle;
00150     this->SetTitle(Title);
00151 
00152     return;
00153 }

Here is the call graph for this function:

void OnLButtonDblClk ( UINT  nFlags,
CPoint  point 
) [protected]

Definition at line 269 of file DxVScrollView.cpp.

References CExFrame::onLButtonDBLClick(), and CExView::pFrame.

00270 {   
00271     pFrame->onLButtonDBLClick();
00272 }

Here is the call graph for this function:

void OnSize ( UINT  nType,
int  cx,
int  cy 
) [protected]

Reimplemented from CExView.

Definition at line 199 of file DxVScrollView.cpp.

References CExView::clientRect, CExView::cmnHead, DXRELEASE, CDxBaseView::lpD3DDevice, CDxBaseView::lpSurface, CExView::pFrame, CDxVScrollView::SetNewSurface(), CExView::vSBmax, and CExView::vSBpos.

00200 {
00201     CDxBaseView::OnSize(nType, cx, cy);
00202     
00203     if (pFrame!=NULL) {
00204         GetClientRect(&clientRect);
00205 
00206         vSBmax = cmnHead.ysize - Min(cmnHead.ysize-1, clientRect.bottom) - 1;
00207         if (vSBmax<0)      vSBmax = 0;
00208         if (vSBpos>vSBmax) vSBpos = vSBmax;
00209         SetScrollRange(SB_VERT, 0, vSBmax);
00210 
00211         if (lpSurface!=NULL) DXRELEASE(lpSurface);
00212 
00213         HRESULT hr;
00214         hr = lpD3DDevice->CreateOffscreenPlainSurface(cmnHead.xsize, clientRect.bottom+1, D3DFMT_R5G6B5, D3DPOOL_DEFAULT, &lpSurface, NULL);
00215         if (FAILED(hr)) return;
00216 
00217         hr = SetNewSurface(vSBpos); 
00218     }
00219 }

Here is the call graph for this function:

BOOL SetNewSurface ( int  ovsbpos  )  [virtual]

Reimplemented from CExView.

Definition at line 254 of file DxVScrollView.cpp.

References CExView::clientRect, CExView::cmnHead, CDxVScrollView::dispRect, CDxBaseView::lpSurface, CDxVScrollView::renderRect, and CExView::vSBpos.

Referenced by CDxVScrollView::InitObject(), and CDxVScrollView::OnSize().

00255 {
00256     renderRect.bottom = Min(cmnHead.ysize-1, clientRect.bottom);
00257     dispRect.bottom   = renderRect.bottom + vSBpos;
00258     dispRect.top      = vSBpos;
00259     uByte* ptr = (uByte*)&(CmnHeadBytePoint(cmnHead, 0, vSBpos));
00260     HRESULT hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, ptr, D3DFMT_L8,  cmnHead.xsize, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00261     if (FAILED(hr)) return FALSE;
00262 
00263     ScrollWindow(0, ovsbpos-vSBpos);
00264     return TRUE;
00265 }

Here is the caller graph for this function:


Member Data Documentation

RECT bufferRect

Definition at line 40 of file DxVScrollView.h.

Referenced by CDxVScrollView::ExecRender().

RECT dispRect

Definition at line 41 of file DxVScrollView.h.

Referenced by CDxVScrollView::OnInitialUpdate().

RECT renderRect

The documentation for this class was generated from the following files:

Generated on 15 Nov 2023 for JunkBox_Win_Lib by  doxygen 1.6.1