00001
00002
00003
00004
00005 #include "MFCBase.h"
00006 #include "Dx2DView.h"
00007
00008
00009 #ifdef _DEBUG
00010 #define new DEBUG_NEW
00011 #undef THIS_FILE
00012 static char THIS_FILE[] = __FILE__;
00013 #endif
00014
00015
00016 using namespace jbxl;
00017 using namespace jbxwl;
00018
00019
00021
00022
00023 IMPLEMENT_DYNCREATE(CDx2DView, CExView)
00024
00025
00026 CDx2DView::CDx2DView()
00027 {
00028 cnstXYRate = true;
00029 }
00030
00031
00032
00033 CDx2DView::~CDx2DView()
00034 {
00035 }
00036
00037
00038
00039 BEGIN_MESSAGE_MAP(CDx2DView, CDxBaseView)
00040
00041
00042
00043 END_MESSAGE_MAP()
00044
00045
00046
00047
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00061
00062
00063 #ifdef _DEBUG
00064 void CDx2DView::AssertValid() const
00065 {
00066 CDxBaseView::AssertValid();
00067 }
00068
00069
00070
00071 void CDx2DView::Dump(CDumpContext& dc) const
00072 {
00073 CDxBaseView::Dump(dc);
00074 }
00075 #endif //_DEBUG
00076
00077
00078
00079
00081
00082
00083
00084
00085
00086 void CDx2DView::OnInitialUpdate()
00087 {
00088 cmnHead = pDoc->cmnHead;
00089 if (isNull(cmnHead.grptr)) return;
00090
00091 origXSize = cmnHead.xsize;
00092 origYSize = cmnHead.ysize;
00093 sizeXYRate = (double)cmnHead.ysize/(double)cmnHead.xsize;
00094
00095 BOOL rslt = InitDevice(cmnHead.xsize, cmnHead.ysize);
00096 if (!rslt) {
00097 CString func, mesg;
00098 mesg.LoadString(IDS_STR_FAIL_GET_DX9DEV);
00099 MessageBox(_T("CDx2DView::OnInitialUpdate():\n\n") + mesg);
00100 pFrame->doneErrorMessage = TRUE;
00101 return;
00102 }
00103
00104
00105 bufferSize = Dx9GetBackBuffer(lpD3DDevice, &lpBackBuffer);
00106 if (bufferSize.x<0) {
00107 CString mesg;
00108 mesg.LoadString(IDS_STR_FAIL_CRT_BAKBUF);
00109 MessageBox(_T("CDx2DView::OnInitialUpdate():\n\n") + mesg);
00110 pFrame->doneErrorMessage = TRUE;
00111 return;
00112 }
00113
00114
00115 hasViewData = Dx9SurfaceFromMemory(lpD3DDevice, &lpSurface, cmnHead);
00116 if (!hasViewData) {
00117 CString mesg;
00118 mesg.LoadString(IDS_STR_FAIL_TRNS_SURFACE);
00119 MessageBox(_T("CDx2DView::OnInitialUpdate():\n\n") + mesg);
00120 pFrame->doneErrorMessage = TRUE;
00121 return;
00122 }
00123
00124 SetWindowSize(origXSize, origYSize);
00125 return;
00126 }
00127
00128
00129
00130 void CDx2DView::ExecRender()
00131 {
00132
00133 Title = pDoc->preTitle + pDoc->Title + pDoc->pstTitle;
00134 if (clientRate!=1.0) {
00135 CString szprcnt;
00136 szprcnt.Format(_T(" (%d%%)"), (int)(clientRate*100+0.5));
00137 Title = Title + szprcnt;
00138 }
00139 CString mesg1, mesg2;
00140 mesg1.LoadString(IDS_STR_UNSPT_DATA);
00141 mesg2.LoadString(IDS_STR_IMP_PROCESS);
00142 Title = Title + _T(" ") + mesg1 + _T(" [") + mesg2 + _T("]");
00143 this->SetTitle(Title);
00144
00145 HRESULT hr;
00146
00147 hr = lpD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255), 1.0f, 0);
00148 if (FAILED(hr)) {
00149 CString mesg;
00150 mesg.LoadString(IDS_STR_FAIL_CLR_WND);
00151 MessageBox(_T("CDx2DView::ExecRender():\n\n") + mesg);
00152 return;
00153 }
00154
00155 hr = lpD3DDevice->StretchRect(lpSurface, NULL, lpBackBuffer, NULL, D3DTEXF_NONE);
00156 if (FAILED(hr)) {
00157 CString mesg;
00158 mesg.LoadString(IDS_STR_FAIL_TRNS_BAKBUF);
00159 MessageBox(_T("CDx2DView::ExecRender():\n\n") + mesg);
00160 return;
00161 }
00162
00163 hr = lpD3DDevice->Present(NULL, NULL, NULL, NULL);
00164 if (FAILED(hr)) {
00165 hr = ResetDx9Device(lpD3DDevice, &d3dParam, this);
00166 if (FAILED(hr)) {
00167 CString mesg;
00168 mesg.LoadString(IDS_STR_FAIL_RESTR_DX9DEV);
00169 MessageBox(_T("CDx2DView::ExecRender():\n\n") + mesg);
00170 pFrame->SendMessage(WM_CLOSE);
00171
00172 }
00173 else ExecRender();
00174 }
00175 }
00176
00177
00178
00179 void CDx2DView::InitObject()
00180 {
00181 Dx9GetBackBuffer(lpD3DDevice, &lpBackBuffer);
00182 hasViewData = Dx9SurfaceFromMemory(lpD3DDevice, &lpSurface, cmnHead);
00183 if (!hasViewData) {
00184 CString mesg;
00185 mesg.LoadString(IDS_STR_FAIL_REINIT_OBJ);
00186 MessageBox(_T("CDx2DView::InitObject():\n\n") + mesg);
00187 return;
00188 }
00189 }
00190
00191