
樓主想用該插件里的Real-Time4繪制一個電壓-時間曲線, 插入該插件后能正常繪制出表格背景,但曲線一直繪制不出來,看了好多遍程式感覺沒啥問題,求大神解決。。。
這是初始化函式:
BOOL CCurveCanvasDlg::OnInitDialog()
{
CDialog::OnInitDialog();
RECT rect;
GetClientRect(&rect);
m_hCanvas = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE | WS_VSCROLL | WS_HSCROLL, &rect, m_hWnd, 1001);
//設定線條數
PEnset(m_hCanvas, PEP_nSUBSETS, 1);
PEnset(m_hCanvas, PEP_nPOINTS, 2000);
PEnset(m_hCanvas, PEP_nDATETIMEMODE, PEDTM_VB); // Date/Time Mode
PEnset(m_hCanvas, PEP_bUSINGXDATAII, TRUE); // Using Double Precision XDataII
// Some functional attributes // 1440 is minutes in a day
ZoomInterval = (3.0F / 1440.0F); // 3 minute scale zoom interval
ZoomSmallInterval = (0.5F / 1440.0F); // 30 second scale adjustment
// Determine current date and time in VB's format //
m_time = CTime::GetCurrentTime();
m_petm.nDay = m_time.GetDay();
m_petm.nMonth = m_time.GetMonth();
m_petm.nYear = m_time.GetYear() - 1900;
m_petm.nHour = m_time.GetHour();
m_petm.nMinute = m_time.GetMinute();
m_petm.nSecond = m_time.GetSecond();
m_petm.nMilliSecond = 0;
PEcreateserialdate(&StartTime, &m_petm, PEDTM_VB);
// Extents to show all data points
double manmaxx;
PEnset(m_hCanvas, PEP_nMANUALSCALECONTROLX, PEMSC_MINMAX);
PEvset(m_hCanvas, PEP_fMANUALMINX, &StartTime, 1);
manmaxx = StartTime + ZoomInterval;
PEvset(m_hCanvas, PEP_fMANUALMAXX, &manmaxx, 1);
PEnset(m_hCanvas, PEP_nMANUALSCALECONTROLY, PEMSC_MINMAX);
double d = 1.0F;
PEvset(m_hCanvas, PEP_fMANUALMINY, &d, 1);
d = 100.0F;
PEvset(m_hCanvas, PEP_fMANUALMAXY, &d, 1);
// Set Zoomed partial Range of X Scale //
ZoomStart = StartTime;
ZoomEnd = ZoomStart + ZoomInterval;
PEvset(m_hCanvas, PEP_fZOOMMINX, &ZoomStart, 1);
PEvset(m_hCanvas, PEP_fZOOMMAXX, &ZoomEnd, 1);
d = 1.0F;
PEvset(m_hCanvas, PEP_fZOOMMINY, &d, 1);
d = 100.0F;
PEvset(m_hCanvas, PEP_fZOOMMAXY, &d, 1);
PEnset(m_hCanvas, PEP_bZOOMMODE, TRUE);
// If ZoomMode is True, you will see 3 minutes of data //
// If ZoomMode is False, you will see all data in object //
// Clear out default data '
// No need to clear out XData since using XDataII '
float f = 0.0F;
PEvsetcellEx(m_hCanvas, PEP_faYDATA, 0, 0, &f);
PEvsetcellEx(m_hCanvas, PEP_faYDATA, 0, 1, &f);
PEvsetcellEx(m_hCanvas, PEP_faYDATA, 0, 2, &f);
PEvsetcellEx(m_hCanvas, PEP_faYDATA, 0, 3, &f);
// Set Various Other Properties ///
PEnset(m_hCanvas, PEP_bBITMAPGRADIENTMODE, FALSE);
PEnset(m_hCanvas, PEP_nQUICKSTYLE, PEQS_DARK_INSET);
PEszset(m_hCanvas, PEP_szMAINTITLE,(char *)TEXT("Scientific Real-Time Example"));
PEszset(m_hCanvas, PEP_szSUBTITLE, (char *)TEXT(""));
PEnset(m_hCanvas, PEP_bNORANDOMPOINTSTOEXPORT, TRUE);
PEnset(m_hCanvas, PEP_bFOCALRECT, FALSE);
PEnset(m_hCanvas, PEP_bALLOWBAR, FALSE);
PEnset(m_hCanvas, PEP_bALLOWPOPUP, FALSE);
PEnset(m_hCanvas, PEP_bPREPAREIMAGES, TRUE);
PEnset(m_hCanvas, PEP_bCACHEBMP, TRUE);
PEnset(m_hCanvas, PEP_bFIXEDFONTS, TRUE);
DWORD col = RGB(0, 255, 0);
PEvsetcell(m_hCanvas, PEP_dwaSUBSETCOLORS, 0, &col);
PEnset(m_hCanvas, PEP_nGRADIENTBARS, 8);
PEnset(m_hCanvas, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
PEnset(m_hCanvas, PEP_bMAINTITLEBOLD, TRUE);
PEnset(m_hCanvas, PEP_bSUBTITLEBOLD, TRUE);
PEnset(m_hCanvas, PEP_bLABELBOLD, TRUE);
PEnset(m_hCanvas, PEP_bLINESHADOWS, TRUE);
PEnset(m_hCanvas, PEP_nFONTSIZE, PEFS_MEDIUM);
// Improves metafile export //
//PEnset(m_hCanvas, PEP_nDPIX, 600);
//PEnset(m_hCanvas, PEP_nDPIY, 600);
PEreinitialize(m_hCanvas);
PEresetimage(m_hCanvas, 0, 0);
::InvalidateRect(m_hCanvas, NULL, FALSE);
// Set Demo's RenderEngine to Hybrid //
CMDIFrameWnd* pWnd = (CMDIFrameWnd*)AfxGetApp()->GetMainWnd();
pWnd->SendMessage(WM_CHANGE_METAFILE, PEPLAYMETAFILE);
// Initialize Counters and Timer //
m_nRealTimeCounter = 1;
//m_nSinCounter = 1;
//SetTimer(2, 500, NULL);
return TRUE; // return TRUE unless you set the focus to a control
// 例外: OCX 屬性頁應回傳 FALSE
}
這是放在框架函式的定時器回應函式中的程式:
//更新繪圖視窗
m_dlgCanvas.newy = 50+i;
m_dlgCanvas.m_time = CTime::GetCurrentTime();
m_dlgCanvas.m_petm.nDay = m_dlgCanvas.m_time.GetDay();
m_dlgCanvas.m_petm.nMonth = m_dlgCanvas.m_time.GetMonth();
m_dlgCanvas.m_petm.nYear = m_dlgCanvas.m_time.GetYear() - 1900;
m_dlgCanvas.m_petm.nHour = m_dlgCanvas.m_time.GetHour();
m_dlgCanvas.m_petm.nMinute = m_dlgCanvas.m_time.GetMinute();
m_dlgCanvas.m_petm.nSecond = m_dlgCanvas.m_time.GetSecond();
m_dlgCanvas.m_petm.nMilliSecond = 0;
//將得到的時間傳給newx2
PEcreateserialdate(&m_dlgCanvas.newx2, &m_dlgCanvas.m_petm, PEDTM_VB);
// Shift data when counter reaches end of data //
if (m_dlgCanvas.m_nRealTimeCounter >= 1999)
{
float YData[250] = {0};
float XData[250] = { 0 };
//memset(YData, 0, 250 * sizeof(float));
//memset(XData, 0, 250 * sizeof(double));
// Shift Data by 250 data points, oldest 250 will be lost.
m_dlgCanvas.m_nRealTimeCounter = m_dlgCanvas.m_nRealTimeCounter - 250;
PEvset(m_hCanvas, PEP_faAPPENDYDATA, YData, 250);
PEvset(m_hCanvas, PEP_faAPPENDXDATAII, XData, 250);
}
// Store new values at current index //
PEvsetcellEx(m_hCanvas, PEP_faXDATAII, 0, m_dlgCanvas.m_nRealTimeCounter, &m_dlgCanvas.newx2);
PEvsetcellEx(m_hCanvas, PEP_faYDATA, 0, m_dlgCanvas.m_nRealTimeCounter, &m_dlgCanvas.newy);
// Increment index counter //
m_dlgCanvas.m_nRealTimeCounter += 1;
//// SinCounter is only to produce sin wave data //
//m_dlgCanvas.m_nSinCounter += 1;
//if (m_dlgCanvas.m_nSinCounter > 30000)
// m_dlgCanvas.m_nSinCounter = 1;
// If current time is beyond zoom max, the re-adjust zoom max //
if (m_dlgCanvas.newx2 > m_dlgCanvas.ZoomEnd)
{
m_dlgCanvas.ZoomEnd = m_dlgCanvas.ZoomEnd + m_dlgCanvas.ZoomSmallInterval;
m_dlgCanvas.ZoomStart = m_dlgCanvas.ZoomEnd - m_dlgCanvas.ZoomInterval;
PEvset(m_hCanvas, PEP_fZOOMMINX, &m_dlgCanvas.ZoomStart, 1);
PEvset(m_hCanvas, PEP_fZOOMMAXX, &m_dlgCanvas.ZoomEnd, 1);
PEvgetcellEx(m_hCanvas, PEP_faXDATAII, 0, 1, &m_dlgCanvas.dx);
PEvset(m_hCanvas, PEP_fMANUALMINX, &m_dlgCanvas.dx, 1);
PEvset(m_hCanvas, PEP_fMANUALMAXX, &m_dlgCanvas.ZoomEnd, 1);
}
// Update image and force paint //
PEreinitialize(m_hCanvas);
PEresetimage(m_hCanvas, 0, 0);
::InvalidateRect(m_hCanvas, NULL, FALSE);
CFrameWndEx::OnTimer(nIDEvent);
uj5u.com熱心網友回復:
這個,用法好不簡單啊!!!uj5u.com熱心網友回復:
先編譯鏈接除錯自帶的例子代碼。uj5u.com熱心網友回復:
這樣說吧 這個繪圖程式是一個初始化函式繪制表格背景 在定時器函式中通過獲得縱坐標動態的繪制曲線;現在我將初始化函式放在一個類中,然后通過框架函式中設定一個定時器函式,進而呼叫這個類中已經定義好的控制元件句柄,但是發現呼叫不了,有沒有什么方法能正常呼叫 或者是解決我現在的問題啊 小白一名 跪求大神解決轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/125103.html
標籤:界面
上一篇:求教 PNG 圖片按鈕問題
