📄 insertvaluedlg.cpp
字号:
// InsertValueDlg.cpp : implementation file
//
#include "stdafx.h"
#include "InsertValue.h"
#include "InsertValueDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// 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()
/////////////////////////////////////////////////////////////////////////////
// CInsertValueDlg dialog
CInsertValueDlg::CInsertValueDlg(CWnd* pParent /*=NULL*/)
: CDialog(CInsertValueDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CInsertValueDlg)
m_x0 = 1.0f;
m_dengju = 3;
m_y0 = 1.0f;
m_x1 = 4.0f;
m_y1 = 2.0f;
m_x2 = 10.0f;
m_y2 = 10.0f;
m_insert2x = 2.0f;
m_insert3x = 2.5f;
m_insert1x = 5.0f;
m_insert4x = 8.5f;
m_radio = 1;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CInsertValueDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CInsertValueDlg)
DDX_Control(pDX, IDC_graphic, m_graphic);
DDX_Control(pDX, IDC_BUTTON1, m_generate);
DDX_Text(pDX, IDC_EDIT3, m_x0);
DDX_Text(pDX, IDC_EDIT10, m_dengju);
DDX_Text(pDX, IDC_EDIT4, m_y0);
DDX_Text(pDX, IDC_EDIT5, m_x1);
DDX_Text(pDX, IDC_EDIT6, m_y1);
DDX_Text(pDX, IDC_EDIT7, m_x2);
DDX_Text(pDX, IDC_EDIT8, m_y2);
DDX_Text(pDX, IDC_EDIT9, m_insert2x);
DDX_Text(pDX, IDC_EDIT12, m_insert3x);
DDX_Text(pDX, IDC_EDIT1, m_insert1x);
DDX_Text(pDX, IDC_EDIT13, m_insert4x);
DDX_Radio(pDX, IDC_RADIO2, m_radio);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CInsertValueDlg, CDialog)
//{{AFX_MSG_MAP(CInsertValueDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
ON_BN_CLICKED(IDC_BUTTON1, OnGenerate)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CInsertValueDlg message handlers
BOOL CInsertValueDlg::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
return TRUE; // return TRUE unless you set the focus to a control
}
void CInsertValueDlg::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 CInsertValueDlg::OnPaint()
{
int t1=25,t2=275,s=m_dengju;//s为等分数
float valuex[3],valuey[3],mix,miy,max,may,temp1,m0,m1,m2,insert[4];
CPaintDC dc(this);
CRect rect;
CWnd *pwnd=GetDlgItem(IDC_graphic);
CDC *pdc=pwnd->GetDC();
pwnd->Invalidate();
pwnd->UpdateWindow();
//绘制x轴
pdc->MoveTo(20,270);
pdc->LineTo(420,270);
//绘制x轴箭头
pdc->MoveTo(410,265);
pdc->LineTo(420,270);
pdc->MoveTo(410,275);
pdc->LineTo(420,270);
pdc->TextOut(400,275,"X");
//绘制x轴刻度
for(int i=0;i<10;i++)
{
t1+=35;
pdc->MoveTo(t1,270);
pdc->LineTo(t1,267);
if(i<9)
pdc->TextOut(t1,273,char(i+49));
}
pdc->TextOut(t1-3,273,char(49));
pdc->TextOut(t1+3,273,char(48));
//绘制y轴
pdc->MoveTo(25,275);
pdc->LineTo(25,10);
//绘制y轴箭头
pdc->MoveTo(20,15);
pdc->LineTo(25,10);
pdc->MoveTo(30,15);
pdc->LineTo(25,10);
pdc->TextOut(10,5,"Y");
//绘制y轴刻度
for(int w=0;w<10;w++)
{
t2-=25;
pdc->MoveTo(25,t2);
pdc->LineTo(28,t2);
if(w<9)
pdc->TextOut(15,t2-5,char(w+49));
}
pdc->TextOut(10,t2-5,char(49));
pdc->TextOut(15,t2-5,char(48));
valuex[0]=m_x0;
valuex[1]=m_x1;
valuex[2]=m_x2;
valuey[0]=m_y0;
valuey[1]=m_y1;
valuey[2]=m_y2;
m0=m_y0;
m1=(m_y1-m_y0)/(m_x1-m_x0);
m2=((m_y2-m_y0)/(m_x2-m_x0)-(m_y1-m_y0)/(m_x1-m_x0))/(m_x2-m_x1);
mix=valuex[0];
max=valuex[0];
miy=valuey[0];
may=valuey[0];
for(int u=1;u<3;u++)
{
if (mix<valuex[u] && max<valuex[u])
{
max=valuex[u];
may=valuey[u];
}
else if(mix>valuex[u])
{
mix=valuex[u];
miy=valuey[u];
}
};
if (m_radio==1)
{
//这里是等距和非等距两种情况的分支
temp1=(max-mix)/s;//temp为等距情况下每等份的长度
pdc->MoveTo(int(mix*35+25),int(270-miy*25));
//pdc->LineTo(int(max*35+25),int(270-may*25));
for(int v=1;v<s;v++)
pdc->LineTo(int((mix+v*temp1)*35+25),int(270-(m0+m1*((mix+v*temp1)-m_x0)+m2*((mix+v*temp1)-m_x0)*((mix+v*temp1)-m_x1))*25));
pdc->LineTo(int(max*35+25),int(270-may*25));
}
else
{
//下面是非等距
insert[0]=m_insert1x;
insert[1]=m_insert2x;
insert[2]=m_insert3x;
insert[3]=m_insert4x;
for(int r=0;r<3;r++)
{
temp1=insert[r];
for(int t=r+1;t<4;t++)
{
if(temp1>insert[t])
{
insert[r]=insert[t];
insert[t]=temp1;
temp1=insert[r];
}
}
}
pdc->MoveTo(int(mix*35+25),int(270-miy*25));
for(int d=0;d<4;d++)
pdc->LineTo(int(insert[d]*35+25),int(270-(m0+m1*(insert[d]-m_x0)+m2*(insert[d]-m_x0)*(insert[d]-m_x1))*25));
pdc->LineTo(int(max*35+25),int(270-may*25));
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CInsertValueDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CInsertValueDlg::OnRadio2()
{
(CEdit*)GetDlgItem(IDC_EDIT10)->ShowWindow(SW_HIDE);
}
void CInsertValueDlg::OnRadio1()
{
(CEdit*)GetDlgItem(IDC_EDIT10)->ShowWindow(SW_SHOW);
}
void CInsertValueDlg::OnGenerate()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
Invalidate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -