Creating new class for output html report using FMC

Hi!
Help me. Don't output html report in window.

Describe object:
Created base class VIEW which inherited from class Cwnd. Created class VIEW_REPORT which inherided form class VIEW.
Class VIEW_REPORT have object which output CHtmlView.

below list

Begin View.h

#pragma once

class VIEW : public CWnd
//----------------------------------------------------------------------------
{
public:
CDC cdc;

virtual ~VIEW() { }

virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void Draw(CDC &dc, RECT &rc) {};
virtual void Update(BOOL all=FALSE) {};

protected:

afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};

class VIEWG : public VIEW
//----------------------------------------------------------------------------
{
public:
VIEWG() {}
virtual void Update();

protected:
CDC mdc;
CMetaFileDC mfDC;
virtual void Paint(CDC &dc) {}
public:
virtual ~VIEWG() {}

protected:
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC) {return TRUE;};
afx_msg void OnSize(UINT nType, int cx, int cy) {Update();};

DECLARE_MESSAGE_MAP()

public:
void Draw(void);
};

end View.h

---------------------------------------------------------------------------------------------------------

Begin View.cpp

#include "stdafx.h"
#include "defs.h"
#include "view.h"

//////////////////////////////////////////////////////////////////////////////
// VIEW class
//////////////////////////////////////////////////////////////////////////////

BEGIN_MESSAGE_MAP(VIEW, CWnd)
ON_WM_PAINT()

END_MESSAGE_MAP()


BOOL VIEW::PreCreateWindow(CREATESTRUCT& cs)
//----------------------------------------------------------------------------
{
if (!CWnd::PreCreateWindow(cs)) return FALSE;


cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, ::LoadCursor(0, IDC_ARROW), 0, 0);
return TRUE;
}

void VIEW::OnPaint()
//-----------------------------------------------------------------------------
{
CPaintDC dc(this);
RECT rc;

GetClientRect(&rc);
Draw(dc, rc);
}


//////////////////////////////////////////////////////////////////////////////
// VIEWG class
//////////////////////////////////////////////////////////////////////////////


BEGIN_MESSAGE_MAP(VIEWG, CWnd)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_WM_SIZE()
END_MESSAGE_MAP()


void VIEWG::OnPaint()
//----------------------------------------------------------------------------
{
RECT rc;
GetClientRect(&rc);

CPaintDC dc(this);

if(!mdc.m_hDC)
{
mdc.CreateCompatibleDC(&dc);
HBITMAP bmp=CreateCompatibleBitmap(dc.m_hDC,1920,1440);
mdc.SelectObject(bmp);
Draw();
}

dc.BitBlt(0,0,rc.right,rc.bottom,&mdc,0,0,SRCCOPY);
}

void VIEWG::Update()
//------------------------------------------------------------------------------
{
if(mdc.m_hDC) Draw();
Invalidate(0);
}


void VIEWG::Draw(void)
{
RECT rc;
GetClientRect(&rc);

mdc.FillSolidRect(0,0,1920,1440,CL_BACKROUND);

int x = SIZE_X;
int y = SIZE_Y;

mdc.SetMapMode(MM_ISOTROPIC);
mdc.SetWindowOrg(0,0) ; //======
mdc.SetViewportOrg(0,0) ; //======
mdc.SetWindowExt(x,y); //======
mdc.SetViewportExt(rc.right,rc.bottom); //======

Paint(mdc);
mdc.SetMapMode(MM_TEXT);
}

End View.cpp

-------------------------------------------------------------------------------

Начало View_report.h

#pragma once

class VIEW_REPORT : public VIEW
{

CDateTimeCtrl dtc;
CHiperReportView *hp;
SYSTEMTIME m_time;

void MakeReport();
CString GetReporFileName();

public:
CDC dc;
void Draw(CDC &dc, RECT &rc);
void Update(BOOL all = FALSE);

protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

afx_msg void OnPaint();
afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
afx_msg BOOL OnEraseBkgnd(CDC *pDC);
afx_msg void OnDateChange(NMHDR *pNMHDR, LRESULT *pResult);
DECLARE_MESSAGE_MAP()
};

end View_report.h

--------------------------------------------------------------------------

Begin View_report.cpp

#include "stdafx.h"

#include "defs.h"

BEGIN_MESSAGE_MAP(VIEW_REPORT, VIEW)

ON_WM_CREATE()
ON_WM_CHAR()
ON_WM_SHOWWINDOW()
ON_WM_ERASEBKGND()
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETIMECTRL, OnDateChange)
ON_WM_PAINT()

END_MESSAGE_MAP()

int VIEW_REPORT::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
int ret = VIEW::OnCreate(lpCreateStruct);

hp = new CHiperReportView();
RECT rc;
GetClientRect(&rc);
rc.top += 32;
BOOL b = hp->Create(0, 0, WS_VISIBLE | WS_CHILD | WS_BORDER, rc, this, 0);
dtc.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP, CRect(20, 6, 200, 28), this, IDC_DATETIMECTRL);
GetLocalTime(&m_time);
dtc.SetTime(m_time);

return ret;


}

void VIEW_REPORT::OnShowWindow(BOOL bShow, UINT nStatus)
{

//VIEW::OnShowWindow(bShow, nStatus);
if (!bShow) return;


Update(TRUE);

}


void VIEW_REPORT::OnPaint()
{; }


void VIEW_REPORT::Draw(CDC &dc, RECT &rc) {
CString DataStr;
DataStr.Format("%d", m_time.wDay);
dc.TextOutA(210, 10, DataStr);
Update(TRUE); }

void VIEW_REPORT::Update(BOOL) {

//dtc.SetFocus();
MakeReport();

}

BOOL VIEW_REPORT::OnEraseBkgnd(CDC *pDC)
{
RECT rc;
GetClientRect(&rc);
pDC->FillSolidRect(&rc, GetSysColor(COLOR_BTNFACE));

return TRUE;
}


void VIEW_REPORT::OnDateChange(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMDATETIMECHANGE pDTChange = (LPNMDATETIMECHANGE)pNMHDR;

//if (memcmp(&m_time, &(pDTChange->st), sizeof(m_time)))
{
m_time = pDTChange->st;


}
*pResult = 0;
}

CString VIEW_REPORT::GetReporFileName()
{
CString s = GetExePath();
s.Append("report.html");
return s;
}

void VIEW_REPORT::MakeReport()
{
#define PRINT(text) sprintf(buf,text); WriteFile(hFile,buf,lstrlen(buf),&cb,0);


CString fn = GetReporFileName();

HANDLE hFile = CreateFile(fn, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL);
if (hFile == INVALID_HANDLE_VALUE) return;
try{

char buf[MAX_PATH];

DWORD cb;

PRINT("<html><head><title>ZIF mine</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
<link href=\"bz.css\" rel=\"stylesheet\" type=\"text/css\" />\
</head><body>");

sprintf(buf, "<h1>ZIF mine. Report %d.%02d.%d</h1>", m_time.wDay, m_time.wMonth, m_time.wSecond);
WriteFile(hFile, buf, lstrlen(buf), &cb, 0);

}
catch (...) {};

hp->Navigate(GetReporFileName());
CloseHandle(hFile);
//SendMessage(WM_PAINT, (WPARAM) dc.GetSafeHdc(), 0);

}
I can't spot any obvious errors. Might be worth to add some TRACE macros to see the program flow.
Some other debugging techniques:
https://msdn.microsoft.com/en-us/library/7sx52ww7(v=vs.100).aspx
I used some TRACE but not cheked problem
Where do you create VIEW_REPORT and add it to the main window ?
I have created several files CPP

Begin Frame.h
__________________________________________________________
#pragma once

#include "View_report.h"

#define SORB 0
#define DESORB 1
#define ELECTRO 2



class Frame : public CFrameWnd
//-----------------------------------------------------------------------------
{
protected:
DECLARE_DYNAMIC(Frame)

public:
Frame();
virtual ~Frame();

virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
void SwitchView(VIEW &scr);

protected:


CClock clock;

VIEW *ac;
int m_oldID;
int id_view;

VIEWMAIN m_view_main;

VIEW_CRUSH1 m_view_crush1;
VIEW_CRUSH2 m_view_crush2;
VIEW_CRUSH3 m_view_crush3;
VIEWALARM m_view_alarm;

VIEWTRENDS m_view_trends;

VIEWCONFIG m_view_config;
VIEW_REPORT m_view_report;


protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnClose();
afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
afx_msg void OnSetFocus(CWnd *pOldWnd);
afx_msg void OnPaint();
afx_msg BOOL OnNcActivate(BOOL bActive);
afx_msg void OnNcPaint();
afx_msg void OnTimer(UINT);


void ShowModalDialog(CDialog &dlg) { dlg.DoModal(); dlg.CenterWindow(); dlg.ShowWindow(SW_SHOW); dlg.BringWindowToTop();}
void ShowDialog(CDialog &dlg) { dlg.CenterWindow(); dlg.ShowWindow(SW_SHOW); dlg.BringWindowToTop();}

afx_msg void OnCmViewDesorb () { SwitchView(m_view_main ); id_view = DESORB;}

afx_msg void OnCmViewDesorb2() { SwitchView(m_view_crush1}
afx_msg void OnCmViewCrush2() { SwitchView(m_view_crush2}
afx_msg void OnCmViewCrush3() { SwitchView(m_view_crush3 }

afx_msg void OnBnClickedViewReport() { SwitchView(m_view_report); };


afx_msg void OnCmViewTrends () { ShowDialog(m_view_trends);}

afx_msg void OnCmViewSet () ;
afx_msg void OnCmViewConfig () ;

afx_msg void OnCmExecExplorer () ;
afx_msg void OnCmExecControl () ;

DECLARE_MESSAGE_MAP()
};
End Frame.h
Begin Frame.cpp
#include "stdafx.h"
#include "defs.h"
#include "Frame.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// Frame

#define TIMER_UPDATE_1 1
#define TIMER_UPDATE_2 2
#define TIMER_UPDATE_TOUT_1 500
#define TIMER_UPDATE_TOUT_2 750

IMPLEMENT_DYNAMIC(Frame, CFrameWnd)

//-----------------------------------------------------------------------------
BEGIN_MESSAGE_MAP(Frame, CFrameWnd)
ON_WM_CREATE()
ON_WM_CLOSE()
ON_WM_GETMINMAXINFO()
ON_WM_SETFOCUS()
ON_WM_SYSCOMMAND()
ON_WM_TIMER()
ON_WM_NCPAINT()
ON_WM_PAINT()
ON_WM_NCACTIVATE()



ON_BN_CLICKED(BN_VIEWTRENDS , OnCmViewTrends )

ON_BN_CLICKED(BN_VIEWSET , OnCmViewSet )

ON_BN_CLICKED(BN_VIEWCFG , OnCmViewConfig )


ON_BN_CLICKED(BN_DESORB , OnCmViewDesorb )

ON_BN_CLICKED(BN_DESORB4 , OnCmViewDesorb2)
ON_BN_CLICKED(BN_DESORB2 ,OnCmViewCrush2)
ON_BN_CLICKED(BN_DESORB3 , OnCmViewCrush3)


ON_BN_CLICKED(BN_VIEWREP1, OnBnClickedViewReport)




END_MESSAGE_MAP()

// Frame construction/destruction

Frame::Frame()
//-----------------------------------------------------------------------------
{
ac=NULL;
m_bAutoMenuEnable = FALSE;
id_view = 0;
}

Frame::~Frame()
//-----------------------------------------------------------------------------
{
}





void Frame::OnCmViewConfig(void)
//----------------------------------------------------------------------------
{
if (password.OK() || config.GetClientMode())
{
static int b=0;
if(b) {ShowDialog(m_view_config); } else { b=1; m_view_config.DoModal(); b=0; }
}
else AfxMessageBox("Доступ запрещен!");
}

}
*/
void Frame::OnCmViewSet()
//------------------------------------------------------------------------------
{
switch(id_view)
{

case ELECTRO: break;
default: break;
}
}



int Frame::OnCreate(LPCREATESTRUCT lpCreateStruct)
//-----------------------------------------------------------------------------
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1) { return -1; }

m_wndNavyBar.Create(this, m_wndNavyBar.IDD, CBRS_ALIGN_BOTTOM, m_wndNavyBar.IDD);
RECT rc;
GetClientRect(&rc);
m_view_main.Create (0, 0, WS_CHILD, rc, this, AFX_IDW_PANE_FIRST+1 , 0);
m_view_crush1.Create(0, 0, WS_CHILD, rc, this, AFX_IDW_PANE_FIRST+1, 0);
m_view_crush2.Create(0, 0, WS_CHILD, rc, this, AFX_IDW_PANE_FIRST+1 , 0);
m_view_crush3.Create(0, 0, WS_CHILD, rc, this, AFX_IDW_PANE_FIRST+1 , 0);
m_view_report.Create(0, 0, WS_CHILD, rc, this, AFX_IDW_PANE_FIRST+5 , 0);

m_view_alarm.Create(m_view_alarm.IDD, this);
m_view_trends.Create(m_view_trends.IDD, this);

SwitchView(m_view_report);

net_client1.Start(1);
net_client2.Start(2);

LinkTags();

CoInitialize(0);
ado.Open();
SetTimer(TIMER_UPDATE_1, TIMER_UPDATE_TOUT_1, 0);



return 0;
}

void Frame::OnClose()
//-----------------------------------------------------------------------------
{
KillTimer(TIMER_UPDATE_1);
net_client1.Stop();
net_client2.Stop();

ado.Close();
CoUninitialize();


CFrameWnd::OnClose();
}

BOOL Frame::PreCreateWindow(CREATESTRUCT& cs)
//-----------------------------------------------------------------------------
{
if(!CFrameWnd::PreCreateWindow(cs)) { return FALSE; }
if (config.GetClientMode() != 2) cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE | WS_MAXIMIZEBOX | WS_SYSMENU;
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.lpszClass = AfxRegisterWndClass(0);

return TRUE;
}

void Frame::SwitchView(VIEW &scr)
//----------------------------------------------------------------------------
{


if(CWnd* w=GetDlgItem(AFX_IDW_PANE_FIRST))
{
if(w==&scr) { SetFocus(); return; }
w->ShowWindow(SW_HIDE);
w->SetDlgCtrlID(m_oldID);
}

m_oldID=scr.GetDlgCtrlID();
scr.SetDlgCtrlID(AFX_IDW_PANE_FIRST);

scr.ShowWindow(SW_SHOW);
scr.Update();
RecalcLayout();
ac=&scr;

SetFocus();



}


void Frame::OnNcPaint()
//-----------------------------------------------------------------------------
{
CFrameWnd::OnNcPaint();

CDC *pdc=GetWindowDC();

ReleaseDC(pdc);
clock.Paint(this);
}

void Frame::OnPaint()
//-----------------------------------------------------------------------------
{
CFrameWnd::OnPaint();

CDC *pdc=GetWindowDC();

ReleaseDC(pdc);
clock.Paint(this);
}

void Frame::OnSetFocus(CWnd* /*pOldWnd*/)
//-----------------------------------------------------------------------------
{
ac->SetFocus();
}


void Frame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
//-----------------------------------------------------------------------------
{
int dx=GetSystemMetrics(SM_CXFIXEDFRAME)<<1;
int min_x = 900+dx;
int min_y = 700+dx;

int max_x = GetSystemMetrics(SM_CXSCREEN);
int max_y = GetSystemMetrics(SM_CYSCREEN);

if (max_x > 1920) max_x = 1920 + dx; else max_x = max_x+dx;
if (max_y > 1440) max_y = 1440 + dx; else max_y = max_y+dx;

lpMMI->ptMaxSize = CPoint(max_x,max_y);
lpMMI->ptMinTrackSize = CPoint(min_x,min_y);
lpMMI->ptMaxTrackSize = CPoint(max_x,max_y);
}




BOOL Frame::OnNcActivate(BOOL bActive)
//-----------------------------------------------------------------------------
{
BOOL ret=CFrameWnd::OnNcActivate(bActive);

CDC *pdc=GetWindowDC();
ReleaseDC(pdc);
clock.Paint(this);

return ret;
}

void Frame::OnTimer(UINT t_id)
//-----------------------------------------------------------------------------
{
switch(t_id)
{
case TIMER_UPDATE_1:
ac->Update();
clock.Paint(this);


case TIMER_UPDATE_TOUT_2:

break;
}
}

End Frame.cpp
Last edited on
Topic archived. No new replies allowed.