#include <DxVScrollView.h>
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) |
Definition at line 30 of file DxVScrollView.h.
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.
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 }
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 }
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 }
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 }
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 }
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 }
RECT bufferRect |
Definition at line 40 of file DxVScrollView.h.
Referenced by CDxVScrollView::ExecRender().
RECT dispRect |
Definition at line 38 of file DxVScrollView.h.
Referenced by CDxVScrollView::OnInitialUpdate(), and CDxVScrollView::SetNewSurface().
int maxClientYSize |
Definition at line 41 of file DxVScrollView.h.
Referenced by CDxVScrollView::OnInitialUpdate().
RECT renderRect |
Definition at line 39 of file DxVScrollView.h.
Referenced by CDxVScrollView::ExecRender(), CDxVScrollView::OnInitialUpdate(), and CDxVScrollView::SetNewSurface().