JunkBox_Win_Lib 1.5.3
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DxVScrollView.cpp
Go to the documentation of this file.
1//
2// CDxVScrollView.cpp : インプリメンテーション ファイル
3//
4
5#include "MFCBase.h"
6#include "DxVScrollView.h"
7
8
9#ifdef _DEBUG
10#define new DEBUG_NEW
11#undef THIS_FILE
12static char THIS_FILE[] = __FILE__;
13#endif
14
15using namespace jbxl;
16using namespace jbxwl;
17
18
20// CDxVScrollView
21
22IMPLEMENT_DYNCREATE(CDxVScrollView, CExView)
23
24
26{
27 cnstXSize = true;
28 activeWin = true;
29
30 // メモリ上の領域 dispRect = renderRect + vSBpos
31 dispRect.top = 0; // 表示するメモリの先頭(Y座標)
32 dispRect.bottom = 0; // 表示するメモリの最後(Y座標)
33 dispRect.right = 0; //
34 dispRect.left = 0; //
35
36 // サーフェイスの有効領域 または 表示領域の大きさ
37 renderRect.top = 0; //
38 renderRect.bottom = 0; //
39 renderRect.right = 0; //
40 renderRect.left = 0; //
41
42 // バックバッファの描画領域
43 bufferRect.top = 0; //
44 bufferRect.bottom = 0; //
45 bufferRect.right = 0; //
46 bufferRect.left = 0; //
47
48 maxClientYSize = 0;
49 vSBntch = 10;
50}
51
52
56
57
58BEGIN_MESSAGE_MAP(CDxVScrollView, CDxBaseView)
59 //{{AFX_MSG_MAP(CDxVScrollView)
60 ON_WM_SIZE()
61 ON_WM_LBUTTONDBLCLK()
62 //}}AFX_MSG_MAP
63END_MESSAGE_MAP()
64
65
67// CDxVScrollView 描画
68/*
69void CDxVScrollView::OnDraw(CDC* pDC)
70{
71 ExecWindowReSize();
72 ExecRender();
73}
74*/
75
76
77
79// CDxVScrollView 診断
80
81#ifdef _DEBUG
86
87
88//
89void CDxVScrollView::Dump(CDumpContext& dc) const
90{
92}
93#endif //_DEBUG
94
95
96
98// CDxVScrollView メッセージ ハンドラ
99
101{
103 if (isNull(cmnHead.grptr)) return;
104
105 maxClientYSize = Min(cmnHead.ysize, this->maxYSize);
107 if (!rslt) {
108 // 失敗した場合は,領域が大きすぎる可能性がある
110 mesg.LoadString(IDS_STR_FAIL_GET_DX9DEV);
111 MessageBox(_T("CDxVScrollView::OnInitialUpdate():\n\n") + mesg);
113 return;
114 }
115
116 dispRect.right = cmnHead.xsize - 1; // dispRect.left = 0;
117 renderRect.right = cmnHead.xsize - 1;
118 dispRect.bottom = Min(cmnHead.ysize-1, clientRect.bottom);
119 renderRect.bottom = dispRect.bottom;
120
121 vSBpos = 0;
122 vSBmax = cmnHead.ysize - cmnHead.zsize; //(clientRect.bottom - clientRect.top + 1);
123 if (vSBmax<0) vSBmax = 0;
125
126 // グラフィックデータ用バックバッファ
128 if (bufferSize.x<0) {
130 mesg.LoadString(IDS_STR_FAIL_CRT_BAKBUF);
131 MessageBox(_T("CDxVScrollView::OnInitialUpdate():\n\n") + mesg);
133 return;
134 }
135
136 origXSize = cmnHead.xsize;
137 origYSize = cmnHead.zsize;
138 sizeXYRate = (float)cmnHead.zsize/(float)cmnHead.xsize;
139
140 //DEBUG_INFO("CDxVScrollView::OnInitialUpdate():\n");
141 SetWindowSize(cmnHead.xsize, cmnHead.zsize);
143
145 this->SetTitle(Title);
146
147 return;
148}
149
150
151//
153{
154 HRESULT hr;
155
156 // クライアント領域がメモリ領域より大きい場合の転送領域の計算
157 if (clientRect.bottom==0) bufferRect.bottom = 0;
158 else bufferRect.bottom = (int)(renderRect.bottom*bufferSize.y/(float)clientRect.bottom);
159 bufferRect.right = bufferSize.x;
160
161 hr = lpD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255,255,255), 1.0f, 0);
162 if (FAILED(hr)) {
164 mesg.LoadString(IDS_STR_FAIL_CLR_WND);
165 MessageBox(_T("CDxVScrollView::ExecRender():\n\n") + mesg);
166 return;
167 }
168
170 if (FAILED(hr)) {
172 mesg.LoadString(IDS_STR_FAIL_TRNS_BAKBUF);
173 MessageBox(_T("CDxVScrollView::ExecRender():\n\n") + mesg);
174 return;
175 }
176
177 hr = lpD3DDevice->Present(NULL, NULL, NULL, NULL);
178 if (FAILED(hr)) {
179 //DEBUG_INFO("CDxVScrollView::ExecRender(): Resetting Device ...\n");
181 if (FAILED(hr)) {
184 MessageBox(_T("CDxVScrollView::ExecRender():\n\n") + mesg);
185 pFrame->SendMessage(WM_CLOSE);
186 //GetParentFrame()->DestroyWindow();
187 }
188 else ExecRender();
189 }
190}
191
192
193//
194void CDxVScrollView::OnSize(UINT nType, int cx, int cy)
195{
197
198 if (pFrame!=NULL) {
200
201 vSBmax = cmnHead.ysize - Min(cmnHead.ysize-1, clientRect.bottom) - 1;
202 if (vSBmax<0) vSBmax = 0;
203 if (vSBpos>vSBmax) vSBpos = vSBmax;
205
207
208 HRESULT hr;
209 hr = lpD3DDevice->CreateOffscreenPlainSurface(cmnHead.xsize, clientRect.bottom+1, D3DFMT_R5G6B5, D3DPOOL_DEFAULT, &lpSurface, NULL);
210 if (FAILED(hr)) return;
211
213 }
214}
215
216
217//
219{
221 if (bufferSize.x<0) {
224 MessageBox(_T("CDxVScrollView::InitObject():\n\n") + mesg);
225 return;
226 }
227
229 HRESULT hr = lpD3DDevice->CreateOffscreenPlainSurface(cmnHead.xsize, clientRect.bottom+1, D3DFMT_R5G6B5, D3DPOOL_DEFAULT, &lpSurface, NULL);
230 if (FAILED(hr)) {
233 MessageBox(_T("CDxVScrollView::InitObject():\n\n") + mesg);
234 return;
235 }
236
238 if (!hasViewData) {
241 MessageBox(_T("CDxVScrollView::InitObject():\n\n") + mesg);
242 return;
243 }
244 return;
245}
246
247
249{
250 renderRect.bottom = Min(cmnHead.ysize-1, clientRect.bottom);
251 dispRect.bottom = renderRect.bottom + vSBpos;
252 dispRect.top = vSBpos;
255 if (FAILED(hr)) return FALSE;
256
258 return TRUE;
259}
260
261
262//
263void CDxVScrollView::OnLButtonDblClk(UINT nFlags, CPoint point)
264{
266}
#define DXRELEASE(d)
Definition Dx9.h:39
static char THIS_FILE[]
LPDIRECT3DDEVICE9 lpD3DDevice
D3DPRESENT_PARAMETERS d3dParam
LPDIRECT3DSURFACE9 lpBackBuffer
BOOL InitDevice(int xsize=0, int ysize=0, CWnd *cwnd=NULL)
LPDIRECT3DSURFACE9 lpSurface
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point)
virtual void OnInitialUpdate()
afx_msg void OnSize(UINT nType, int cx, int cy)
virtual void ExecRender()
virtual void AssertValid() const
virtual void Dump(CDumpContext &dc) const
virtual void InitObject(void)
virtual BOOL SetNewSurface(int ovsbpos)
ExCmnHead cmnHead
Definition ExDocument.h:53
virtual void onLButtonDBLClick()
Definition ExFrame.h:58
bool doneErrorMessage
Definition ExFrame.h:51
ExCmnHead cmnHead
Definition ExView.h:73
CString Title
Definition ExView.h:83
BOOL hasViewData
Definition ExView.h:81
int origYSize
Definition ExView.h:95
afx_msg void OnSize(UINT nType, int cx, int cy)
Definition ExView.cpp:410
CExFrame * pFrame
Definition ExView.h:77
double sizeXYRate
Definition ExView.h:86
int origXSize
Definition ExView.h:94
RECT clientRect
Definition ExView.h:85
void SetTitle(LPCTSTR title)
Definition ExView.cpp:348
CExDocument * pDoc
Definition ExView.h:76
virtual void AssertValid() const
Definition ExView.cpp:130
virtual void Dump(CDumpContext &dc) const
Definition ExView.cpp:136
POINT SetWindowSize(int xs, int ys, BOOL first=TRUE)
Definition ExView.cpp:156
HRESULT ResetDx9Device(LPDIRECT3DDEVICE9, D3DPRESENT_PARAMETERS *, CDxBaseView *pviw=NULL)
POINT Dx9GetBackBuffer(LPDIRECT3DDEVICE9, LPDIRECT3DSURFACE9 *)
Definition Dx9.cpp:175
#define IDS_STR_FAIL_RESTR_DX9DEV
Definition resource.h:65
#define IDS_STR_FAIL_GET_DX9DEV
Definition resource.h:59
#define IDS_STR_FAIL_RETRNS_SURFACE
Definition resource.h:70
#define IDS_STR_FAIL_REGET_SURFACE
Definition resource.h:69
#define IDS_STR_FAIL_REGET_BAKBUF
Definition resource.h:68
#define IDS_STR_FAIL_CLR_WND
Definition resource.h:64
#define IDS_STR_FAIL_TRNS_BAKBUF
Definition resource.h:61
#define IDS_STR_FAIL_CRT_BAKBUF
Definition resource.h:60