📄 bsq_dispdlg.cpp
字号:
// bsq_dispDlg.cpp : implementation file
//
#include "stdafx.h"
#include "bsq_disp.h"
#include "bsq_dispDlg.h"
#include <math.h> // for trigonometry functions
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
struct uipq
{char dat_num;
int max;
};
struct uipq ddd[16]=
{
{6,10},{8,10},{10,10},{0,200},{2,200},{4,200},{36,360},{38,360},{40,360},
{12,2000},{14,2000},{16,2000},{28,1},{30,1},{32,1},{44,50}
};
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBsq_dispDlg dialog
CBsq_dispDlg::CBsq_dispDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBsq_dispDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBsq_dispDlg)
m_adl = _T("");
m_ady = _T("");
m_agl = _T("");
m_axj = _T("");
m_ays = _T("");
m_bdl = _T("");
m_bdy = _T("");
m_bgl = _T("");
m_bxj = _T("");
m_bys = _T("");
m_cdl = _T("");
m_cdy = _T("");
m_cgl = _T("");
m_cxj = _T("");
m_cys = _T("");
m_apl = _T("");
m_bpl = _T("");
m_cpl = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CBsq_dispDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBsq_dispDlg)
DDX_Text(pDX, IDC_EDIT_ADL, m_adl);
DDV_MaxChars(pDX, m_adl, 10);
DDX_Text(pDX, IDC_EDIT_ADY, m_ady);
DDV_MaxChars(pDX, m_ady, 10);
DDX_Text(pDX, IDC_EDIT_AGL, m_agl);
DDV_MaxChars(pDX, m_agl, 10);
DDX_Text(pDX, IDC_EDIT_AXJ, m_axj);
DDV_MaxChars(pDX, m_axj, 10);
DDX_Text(pDX, IDC_EDIT_AYS, m_ays);
DDV_MaxChars(pDX, m_ays, 10);
DDX_Text(pDX, IDC_EDIT_BDL, m_bdl);
DDV_MaxChars(pDX, m_bdl, 10);
DDX_Text(pDX, IDC_EDIT_BDY, m_bdy);
DDV_MaxChars(pDX, m_bdy, 10);
DDX_Text(pDX, IDC_EDIT_BGL, m_bgl);
DDV_MaxChars(pDX, m_bgl, 10);
DDX_Text(pDX, IDC_EDIT_BXJ, m_bxj);
DDV_MaxChars(pDX, m_bxj, 10);
DDX_Text(pDX, IDC_EDIT_BYS, m_bys);
DDV_MaxChars(pDX, m_bys, 10);
DDX_Text(pDX, IDC_EDIT_CDL, m_cdl);
DDV_MaxChars(pDX, m_cdl, 10);
DDX_Text(pDX, IDC_EDIT_CDY, m_cdy);
DDV_MaxChars(pDX, m_cdy, 10);
DDX_Text(pDX, IDC_EDIT_CGL, m_cgl);
DDV_MaxChars(pDX, m_cgl, 10);
DDX_Text(pDX, IDC_EDIT_CXJ, m_cxj);
DDV_MaxChars(pDX, m_cxj, 10);
DDX_Text(pDX, IDC_EDIT_CYS, m_cys);
DDV_MaxChars(pDX, m_cys, 10);
DDX_Text(pDX, IDC_EDIT_APL, m_apl);
DDV_MaxChars(pDX, m_apl, 10);
DDX_Text(pDX, IDC_EDIT_BPL, m_bpl);
DDV_MaxChars(pDX, m_bpl, 10);
DDX_Text(pDX, IDC_EDIT_CPL, m_cpl);
DDV_MaxChars(pDX, m_cpl, 10);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBsq_dispDlg, CDialog)
//{{AFX_MSG_MAP(CBsq_dispDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBsq_dispDlg message handlers
BOOL CBsq_dispDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
if(m_port.InitPort(this, 1, 4800,'N',8,1,EV_RXCHAR|EV_TXEMPTY,512))
{
m_port.StartMonitoring();
}
SetTimer(102,500,0);
GetDlgItem(IDC_ICON_RECT)->GetWindowRect(&icon_rect);
ScreenToClient(&icon_rect);
return TRUE; // return TRUE unless you set the focus to a control
}
void CBsq_dispDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CBsq_dispDlg::OnPaint()
{
static int k=0;
int x,y,r=80;
double PI=3.1415926535,w,wa,wb,wc;
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
// Do not call CDialog::OnPaint() for painting messages
}
else
{
CPaintDC memdc(this); // device context for painting
CPen newpen,newpen2,newpen3;
CPen *poldpen;
newpen.CreatePen(PS_SOLID,1,RGB(0,0,0));
poldpen=memdc.SelectObject(&newpen);
memdc.SetROP2(R2_COPYPEN);
CFont newfont;
newfont.CreateFont(12,0,0,0,FW_NORMAL,0,0,0,
GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_DONTCARE,"宋体");
CFont *poldfont=memdc.SelectObject(&newfont);
int oldmode=memdc.SetBkMode(TRANSPARENT);
memdc.SetTextColor(RGB(0,0,0));
x=icon_rect.left+(icon_rect.right-icon_rect.left)/2;
y=icon_rect.top+(icon_rect.bottom-icon_rect.top)/2+5;
wa=-PI/2;
if(r_buf[0]&0x80)
{
wb=PI*4/3-PI/2;
wc=PI*2/3-PI/2;
}
else
{
wc=PI*4/3-PI/2;
wb=PI*2/3-PI/2;
}
memdc.MoveTo(x,y);
memdc.LineTo(x+80*cos(wa),y+80*sin(wa));
memdc.TextOut(x+80*cos(wa),y+80*sin(wa),"UA");
memdc.MoveTo(x,y);
memdc.LineTo(x+80*cos(wb),y+80*sin(wb));
memdc.TextOut(x+80*cos(wb),y+80*sin(wb),"UB");
memdc.MoveTo(x,y);
memdc.LineTo(x+80*cos(wc),y+80*sin(wc));
memdc.TextOut(x+80*cos(wc),y+80*sin(wc),"UC");
memdc.SetTextColor(RGB(255,0,0));
newpen2.CreatePen(PS_SOLID,1,RGB(255,0,0));
memdc.SelectObject(&newpen2);
w=atof(m_axj);
w=wa+(double)w/180*PI;
memdc.MoveTo(x,y);
memdc.LineTo(x+60*cos(w),y+60*sin(w));
memdc.TextOut(x+60*cos(w),y+60*sin(w),"IA");
w=atof(m_bxj);
w=wb+(double)w/180*PI;
memdc.MoveTo(x,y);
memdc.LineTo(x+60*cos(w),y+60*sin(w));
memdc.TextOut(x+60*cos(w),y+60*sin(w),"IB");
memdc.MoveTo(x,y);
w=atof(m_cxj);
w=wc+(double)w/180*PI;
memdc.LineTo(x+60*cos(w),y+60*sin(w));
memdc.TextOut(x+60*cos(w),y+60*sin(w),"IC");
newpen3.CreatePen(2,1,RGB(0,0,255));
memdc.SelectObject(&newpen3);
memdc.SelectStockObject(NULL_BRUSH);
memdc.Ellipse(x-80,y-80,x+80,y+80);
memdc.Ellipse(x-60,y-60,x+60,y+60);
memdc.SelectObject(poldpen);
memdc.SelectObject(poldfont);
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CBsq_dispDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
CString turn_data(BYTE dat1,BYTE dat2,BYTE dot)
{
CString str;
char cc[2]={0,0};
cc[0]=((dat1>>4)&0x0f)+'0';str=cc;
if(dot==3) str+=".";
cc[0]=(dat1&0x0f)+'0';str+=cc;
if(dot==2) str+=".";
cc[0]=((dat2>>4)&0x0f)+'0';str+=cc;
if(dot==1) str+=".";
cc[0]=(dat2&0x0f)+'0';str+=cc;
return str;
}
void CBsq_dispDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static unsigned int gl_tmp[3][3]={{0,0,0},{0,0,0},{0,0,0}};
static unsigned int xj_tmp[3][3]={{0,0,0},{0,0,0},{0,0,0}};
WORD i,k;
float fm;
char cc_tmp[10];
if(revice_ok)
{
revice_ok=0;
/* m_ady=turn_data(r_buf[1],r_buf[2],1);//电压
m_bdy=turn_data(r_buf[3],r_buf[4],1);
m_cdy=turn_data(r_buf[5],r_buf[6],1);
m_adl=turn_data(r_buf[7],r_buf[8],2);//电流
m_bdl=turn_data(r_buf[9],r_buf[10],2);
m_cdl=turn_data(r_buf[11],r_buf[12],2);
for(i=0;i<3;i++)
{
for(k=0;k<2;k++) gl_tmp[i][k]=gl_tmp[i][k+1];
gl_tmp[i][2]=((r_buf[i*2+13]>>4)&0x0f)*1000+(r_buf[i*2+13]&0x0f)*100+((r_buf[i*2+14]>>4)&0x0f)*10+(r_buf[i*2+14]&0x0f);
}
for(i=0;i<3;i++)
{
gl_tmp[i][0]=(gl_tmp[i][0]+gl_tmp[i][1]+gl_tmp[i][2])/3;
r_buf[i*2+13]=gl_tmp[i][0]/1000;
gl_tmp[i][0]=gl_tmp[i][0]%1000;
r_buf[i*2+13]=(r_buf[i*2+13]<<4)|(gl_tmp[i][0]/100);
gl_tmp[i][0]=gl_tmp[i][0]%100;
r_buf[i*2+14]=gl_tmp[i][0]/10;
gl_tmp[i][0]=gl_tmp[i][0]%10;
r_buf[i*2+14]=(r_buf[i*2+14]<<4)|gl_tmp[i][0];
}
m_agl=turn_data(r_buf[13],r_buf[14],0);//功率
if(r_buf[0]&0x10) m_agl="-"+m_agl;
m_bgl=turn_data(r_buf[15],r_buf[16],0);
if(r_buf[0]&0x20) m_bgl="-"+m_bgl;
m_cgl=turn_data(r_buf[17],r_buf[18],0);
if(r_buf[0]&0x40) m_cgl="-"+m_cgl;
/* for(i=0;i<3;i++)
{
for(k=0;k<2;k++) wgl_tmp[i][k]=wgl_tmp[i][k+1];
wgl_tmp[i][2]=(r_buf[i*2+19]>>4)*1000+(r_buf[i*2+19]&0x0f)*100+(r_buf[i*2+20]>>4)*10+(r_buf[i*2+20]&0x0f);
}
for(i=0;i<3;i++)
{
wgl_tmp[i][0]=(wgl_tmp[i][0]+wgl_tmp[i][1]+wgl_tmp[i][2])/3;
r_buf[i*2+19]=wgl_tmp[i][0]/1000;
wgl_tmp[i][0]=wgl_tmp[i][0]%1000;
r_buf[i*2+19]=(r_buf[i*2+19]<<4)|(wgl_tmp[i][0]/100);
wgl_tmp[i][0]=wgl_tmp[i][0]%100;
r_buf[i*2+20]=wgl_tmp[i][0]/10;
wgl_tmp[i][0]=wgl_tmp[i][0]%10;
r_buf[i*2+20]=(r_buf[i*2+20]<<4)|wgl_tmp[i][0];
}
m_awg=turn_data(r_buf[19],r_buf[20],0);//无功
if(r_buf[0]&0x01) m_awg="-"+m_awg;
m_bwg=turn_data(r_buf[21],r_buf[22],0);
if(r_buf[0]&0x02) m_bwg="-"+m_bwg;
m_cwg=turn_data(r_buf[23],r_buf[24],0);
if(r_buf[0]&0x04) m_cwg="-"+m_cwg;
*/
/* m_ays=turn_data(r_buf[25],r_buf[26],3);//功率因数
m_bys=turn_data(r_buf[27],r_buf[28],3);
m_cys=turn_data(r_buf[29],r_buf[30],3);
for(i=0;i<3;i++)
{
for(k=0;k<2;k++) xj_tmp[i][k]=xj_tmp[i][k+1];
xj_tmp[i][2]=(r_buf[i*2+31]>>4)*1000+(r_buf[i*2+31]&0x0f)*100+(r_buf[i*2+32]>>4)*10+(r_buf[i*2+32]&0x0f);
}
for(i=0;i<3;i++)
{
xj_tmp[i][0]=(xj_tmp[i][0]+xj_tmp[i][1]+xj_tmp[i][2])/3;
r_buf[i*2+31]=xj_tmp[i][0]/1000;
xj_tmp[i][0]=xj_tmp[i][0]%1000;
r_buf[i*2+31]=(r_buf[i*2+31]<<4)|(xj_tmp[i][0]/100);
xj_tmp[i][0]=xj_tmp[i][0]%100;
r_buf[i*2+32]=xj_tmp[i][0]/10;
xj_tmp[i][0]=xj_tmp[i][0]%10;
r_buf[i*2+32]=(r_buf[i*2+32]<<4)|xj_tmp[i][0];
}
m_axj=turn_data(r_buf[31],r_buf[32],1);//相角
m_bxj=turn_data(r_buf[33],r_buf[34],1);
m_cxj=turn_data(r_buf[35],r_buf[36],1);
m_apl=turn_data(r_buf[37],r_buf[38],2);//频率
m_bpl=turn_data(r_buf[39],r_buf[40],2);
m_cpl=turn_data(r_buf[41],r_buf[42],2);
*/
for(i=0;i<16;i++)
{
k=r_buf[ddd[i].dat_num];
k=(k<<8)|r_buf[ddd[i].dat_num+1];
if((i>=9)&&(i<15)&&(k&0x8000))//***********
{
k=(~k)+1;
fm=(double)k*ddd[i].max/(-16384);
}
else
fm=(float)k/16384*ddd[i].max;
sprintf(cc_tmp,"%.3f",fm);
if(i==0)
{m_adl=cc_tmp;}
if(i==1)
{m_bdl=cc_tmp;}
if(i==2)
{m_cdl=cc_tmp;}
if(i==3)
{m_ady=cc_tmp;}
if(i==4)
{m_bdy=cc_tmp;}
if(i==5)
{m_cdy=cc_tmp;}
if(i==6)
{m_axj=cc_tmp;}
if(i==7)
{m_bxj=cc_tmp;}
if(i==8)
{m_cxj=cc_tmp;}
if(i==9)
{m_agl=cc_tmp;}
if(i==10)
{m_bgl=cc_tmp;}
if(i==11)
{m_cgl=cc_tmp;}
if(i==12)
{m_ays=cc_tmp;}
if(i==13)
{m_bys=cc_tmp;}
if(i==14)
{m_cys=cc_tmp;}
if(i==15)
{m_apl=m_bpl=m_cpl=cc_tmp;}
}
UpdateData(0);
// RedrawWindow();
}
CDialog::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -