📄 dialog34.cpp
字号:
// Dialog34.cpp : implementation file
//
#include "stdafx.h"
#include "最近邻法分类器.h"
#include "Dialog34.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
/////////////////////////////////////////////////////////////////////////////
// CDialog34 dialog
CDialog34::CDialog34(CWnd* pParent /*=NULL*/)
: CDialog(CDialog34::IDD, pParent)
{
//{{AFX_DATA_INIT(CDialog34)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON11);
}
void CDialog34::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDialog34)
DDX_Control(pDX, IDC_LIST1, m_l);
DDX_Control(pDX, IDC_BUTTON7, m_b7);
DDX_Control(pDX, IDC_BUTTON6, m_b6);
DDX_Control(pDX, IDC_BUTTON5, m_b5);
DDX_Control(pDX, IDC_BUTTON4, m_b4);
DDX_Control(pDX, IDC_BUTTON3, m_b3);
DDX_Control(pDX, IDC_BUTTON2, m_b2);
DDX_Control(pDX, IDC_BUTTON1, m_b1);
DDX_Control(pDX, IDC_STATIC4, m_2);
DDX_Control(pDX, IDC_STATIC3, m_1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDialog34, CDialog)
//{{AFX_MSG_MAP(CDialog34)
ON_WM_ERASEBKGND()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDialog34 message handlers
BOOL CDialog34::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
int cx, cy;
HDC dc = ::GetDC(NULL);
cx = GetDeviceCaps(dc,HORZRES) +
GetSystemMetrics(SM_CXBORDER);
cy = GetDeviceCaps(dc,VERTRES) +
GetSystemMetrics(SM_CYBORDER)-20;
::ReleaseDC(0,dc); //
::SetWindowPos(m_hWnd, HWND_TOPMOST,
-(GetSystemMetrics(SM_CXBORDER)+1),
-(GetSystemMetrics(SM_CYBORDER)+1),
cx+1,cy+1, SWP_NOZORDER);
mybitmap.LoadBitmap(IDB_BITMAP1);
CRect rect,rects,rects1,rectp,rects2,rects3,rect5,rect6;
int tempw,temph;
GetClientRect(rect);
GetDlgItem(IDC_STATIC1)->GetClientRect(rects);
temph=rects.Height();
rects.left=rect.left;
rects.right=rect.right;
rects.top=rect.top;
rects.bottom=rect.top+temph;
GetDlgItem(IDC_STATIC1)->MoveWindow(rects,true);
///////////////
fb1=false,fb2=false;fb3=false;f4=false;f5=false;f7=false;f6=false;
CRect rt1,rt2,rt3,rt4,rt5,rt6,rt7;
GetDlgItem(IDC_BUTTON1)->GetWindowRect(rt1);ScreenToClient(rt1);
tempw=rt1.Width();
rt1.top=rects.top+10;
rt1.bottom=rects.bottom-10;
rt1.left=rect.left+6;
rt1.right=rt1.left+tempw;
GetDlgItem(IDC_BUTTON1)->MoveWindow(rt1,true);
GetDlgItem(IDC_BUTTON2)->GetWindowRect(rt2);ScreenToClient(rt2);
tempw=rt2.Width();
rt2.top=rects.top+10;
rt2.bottom=rects.bottom-10;
rt2.left=rt1.right+6;
rt2.right=rt2.left+tempw;
GetDlgItem(IDC_BUTTON2)->MoveWindow(rt2,true);
GetDlgItem(IDC_BUTTON3)->GetWindowRect(rt3);ScreenToClient(rt3);
tempw=rt3.Width();
rt3.top=rects.top+10;
rt3.bottom=rects.bottom-10;
rt3.left=rt2.right+6;
rt3.right=rt3.left+tempw;
GetDlgItem(IDC_BUTTON3)->MoveWindow(rt3,true);
GetDlgItem(IDC_BUTTON4)->GetWindowRect(rt4);ScreenToClient(rt4);
tempw=rt4.Width();
rt4.top=rects.top+10;
rt4.bottom=rects.bottom-10;
rt4.left=rt3.right+6;
rt4.right=rt4.left+tempw;
GetDlgItem(IDC_BUTTON4)->MoveWindow(rt4,true);
GetDlgItem(IDC_BUTTON5)->GetWindowRect(rt5);ScreenToClient(rt5);
tempw=rt5.Width();
rt5.top=rects.top+10;
rt5.bottom=rects.bottom-10;
rt5.left=rt4.right+6;
rt5.right=rt5.left+tempw;
GetDlgItem(IDC_BUTTON5)->MoveWindow(rt5,true);
GetDlgItem(IDC_BUTTON6)->GetWindowRect(rt6);ScreenToClient(rt6);
tempw=rt6.Width();
rt6.top=rects.top+10;
rt6.bottom=rects.bottom-10;
rt6.left=rt5.right+6;
rt6.right=rt6.left+tempw;
GetDlgItem(IDC_BUTTON6)->MoveWindow(rt6,true);
GetDlgItem(IDC_BUTTON7)->GetWindowRect(rt7);ScreenToClient(rt7);
tempw=rt7.Width();
rt7.top=rects.top+10;
rt7.bottom=rects.bottom-10;
rt7.left=rt6.right+6;
rt7.right=rt7.left+tempw;
GetDlgItem(IDC_BUTTON7)->MoveWindow(rt7,true);
rectp.top=rects.bottom+10;
rectp.bottom=rect.bottom-50;
rectp.left=rect.left+10;
rectp.right=rectp.left+600;
GetDlgItem(IDC_STATIC2)->MoveWindow(rectp,true);
rects1.left=rects.left+10;
rects1.right=rects1.left+250;
rects1.top=rectp.bottom+10;
rects1.bottom=rects1.top+20;
GetDlgItem(IDC_STATIC3)->MoveWindow(rects1,true);
rects2.left=rectp.right+3;
rects2.right=rects2.left+250;
rects2.top=rects.bottom+10;
rects2.bottom=rects2.top+20;
GetDlgItem(IDC_STATIC4)->MoveWindow(rects2,true);
GetDlgItem(IDC_LIST1)->GetWindowRect(rect5);ScreenToClient(rect5);
tempw=rect5.Width();temph=rect5.Height();
rect5.left= rectp.right+10+(rect.right-rectp.right)/2-tempw/2;
rect5.right=rect5.left+tempw;
rect5.top=rects2.bottom+10;
rect5.bottom =rect5.top+2*temph-348;
GetDlgItem(IDC_LIST1)->MoveWindow(rect5,true);
GetDlgItem(IDOK2)->GetWindowRect(rect6);ScreenToClient(rect6);
tempw=rect6.Width();temph=rect6.Height();
rect6.left= rectp.right+10+(rect.right-rectp.right)/2-tempw/2;
rect6.right=rect6.left+tempw;
rect6.top=rect5.bottom+20;;
rect6.bottom =rect6.top+temph;
GetDlgItem(IDOK2)->MoveWindow(rect6,true);
strcpy(m_2.mychar,"三个圆的半径为100,1类120,2类130,3类150,(k,k')NNR时考虑2,3类");
//////////////////////////////////
m_l.SetExtendedStyle (LVS_OWNERDRAWFIXED);
CRect ClientRect;
GetDlgItem(IDC_LIST1)->GetClientRect(&ClientRect);
m_l.InsertColumn (0, "圆心间距离");
m_l.InsertColumn (1, "准确率");
m_l.InsertColumn (2, "拒判率");
m_l.InsertColumn (3, "错误率");
m_l.InsertColumn (4, "运行时间");
m_l.SetColumnWidth (0, ClientRect.Width() / 5+15);
m_l.SetColumnWidth (1, ClientRect.Width() / 5-5);
m_l.SetColumnWidth (2, ClientRect.Width() / 5-5);m_l.SetColumnWidth (3, ClientRect.Width() / 5-5);
m_l.SetColumnWidth (4, LVSCW_AUTOSIZE_USEHEADER+100);
for(int i=0;i<20;i++)
{
m_l.InsertItem (i, " ");
}
m_b4.flagv=true;GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
m_b5.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
m_b6.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
m_b7.flagv=true;GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDialog34::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect(rect);
//////////////////////////////////////////////////////
CDC memdc;
BITMAP bm1;
mybitmap.GetObject(sizeof(BITMAP),&bm1);
memdc.CreateCompatibleDC(pDC);
CBitmap* oldbitmap=memdc.SelectObject(&mybitmap);
int wide=rect.Width()/4;
int mheight=rect.Height()/4;
for (int j=0;j<4;j++)
{
for(int i=0;i<4;i++)
{
pDC->StretchBlt(rect.left,rect.top,wide,mheight,&memdc,0,0,bm1.bmWidth,bm1.bmHeight,SRCCOPY);
rect.left+= wide;
}
rect.left-=wide*4;
rect.top+=mheight;
}
CRect rects;GetClientRect(rect);
GetDlgItem(IDC_STATIC1)->GetClientRect(rects);
for(int i=0;i<18;i++)
{
rects.top=rect.top+i*3;
rects.bottom=rects.top+3;
pDC->FillSolidRect(rects,RGB(188+i,212+i,249));
}
CRect rectp,rectp1;
CPen *pOldPen;
GetDlgItem(IDC_STATIC2)->GetWindowRect(rectp);ScreenToClient(rectp);
pDC->FillSolidRect(rectp,RGB(255,255,255));
CPen mypen1(PS_SOLID,1,RGB(0,0,0));
pOldPen=pDC->SelectObject(&mypen1);
pDC->MoveTo(rectp.left+20, rectp.bottom-20);
pDC->LineTo(rectp.left+20, rectp.bottom-560);
pDC->LineTo(rectp.left+15, rectp.bottom-545);
pDC->MoveTo(rectp.left+20, rectp.bottom-560);
pDC->LineTo(rectp.left+25, rectp.bottom-545);
pDC->MoveTo(rectp.left+20, rectp.bottom-20);
pDC->LineTo(rectp.left+20+560, rectp.bottom-20);
pDC->LineTo(rectp.left+20+545, rectp.bottom-25);
pDC->MoveTo(rectp.left+20+560, rectp.bottom-20);
pDC->LineTo(rectp.left+20+545, rectp.bottom-15);
if(f4)
{
CPoint lp[19];
for(int i=0;i<19;i++)
{
int k=zt[i];
lp[i].x=rectp.left+70+2*(k-110);
lp[i].y=rectp.bottom-20-int(ct[i]*540);
}
CPen mypen2(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&mypen2);
pDC->PolyBezier(lp,19);
}
if(f5)
{
CPoint lp[19];
for(int i=0;i<19;i++)
{
int k=zt[i];
lp[i].x=rectp.left+70+2*(k-110);
lp[i].y=rectp.bottom-20-int(rt[i]*540);
}
CPen mypen2(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&mypen2);
pDC->PolyBezier(lp,19);
}
if(f6)
{
CPoint lp[19];
for(int i=0;i<19;i++)
{
int k=zt[i];
lp[i].x=rectp.left+70+2*(k-110);
lp[i].y=rectp.bottom-20-int(et[i]*540);
}
CPen mypen2(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&mypen2);
pDC->PolyBezier(lp,19);
}
if(f7)
{
double max=0;
for(i=0;i<20;i++)
{
if(max<tt[i])max=tt[i];
}
CPoint lp[19];
for(int i=0;i<19;i++)
{
int k=zt[i];
lp[i].x=rectp.left+70+2*(k-110);
lp[i].y=rectp.bottom-20-int(tt[i]*540/max);
}
CPen mypen2(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&mypen2);
pDC->PolyBezier(lp,19);
}
return true;
}
void CDialog34::OnButton1()
{
// TODO: Add your control notification handler code here
if(fb1 )return;
fb1=true;fb2=false;
fb3=false;f4=false;f5=false;f6=false;f7=false;
m_b2.down =false;
m_b3.down =false;
m_b1.down=true;
m_b1.Invalidate();m_b2.Invalidate();
m_b4.flagv=true;GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
m_b5.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
m_b6.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
m_b7.flagv=true;GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
for(int yt=0;yt<20;yt++)
{
m_l.flag[yt]=false;
}
for(int i=0;i<20;i++)
{
m_l.SetItemText (i, 0, " ");
m_l.SetItemText (i, 1, "");
m_l.SetItemText (i, 2, "");
m_l.SetItemText (i, 3, "");
m_l.SetItemText (i, 4, " ");
}
Invalidate();
UpdateWindow();
}
void CDialog34::OnButton2()
{
// TODO: Add your control notification handler code here
if(fb2 )return;
fb2=true;fb2=false;
fb1=false;f4=false;f5=false;f6=false;f7=false;
m_b1.down =false;
m_b3.down =false;
m_b2.down=true;
m_b1.Invalidate();m_b2.Invalidate();m_b3.Invalidate();
m_b4.flagv=true;GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
m_b5.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
m_b6.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
m_b7.flagv=true;GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
for(int yt=0;yt<20;yt++)
{
m_l.flag[yt]=false;
}
for(int i=0;i<20;i++)
{
m_l.SetItemText (i, 0, " ");
m_l.SetItemText (i, 1, "");
m_l.SetItemText (i, 2, "");
m_l.SetItemText (i, 3, "");
m_l.SetItemText (i, 4, " ");
}
Invalidate();
UpdateWindow();
}
void CDialog34::OnButton3()
{
// TODO: Add your control notification handler code here
if(fb3 )return;
fb3=true;fb2=false;
fb1=false;f4=false;f5=false;f6=false;f7=false;
m_b1.down =false;
m_b2.down =false;
m_b3.down=true;
m_b1.Invalidate();m_b2.Invalidate();m_b3.Invalidate();
m_b4.flagv=true;GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
m_b5.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
m_b6.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
m_b7.flagv=true;GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
for(int yt=0;yt<20;yt++)
{
m_l.flag[yt]=false;
}
for(int i=0;i<20;i++)
{
m_l.SetItemText (i, 0, " ");
m_l.SetItemText (i, 1, "");
m_l.SetItemText (i, 2, "");
m_l.SetItemText (i, 3, "");
m_l.SetItemText (i, 4, " ");
}
Invalidate();
UpdateWindow();
}
BEGIN_EVENTSINK_MAP(CDialog34, CDialog)
//{{AFX_EVENTSINK_MAP(CDialog34)
ON_EVENT(CDialog34, IDOK2, 1 /* Click */, OnClickOk2, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CDialog34::OnClickOk2()
{
// TODO: Add your control notification handler code here
if(m_b1.down)
{
for(int i1=0;i1<20;i1++)
{
int x,y;
LARGE_INTEGER litmp;
LONGLONG qt1,qt2;
double dff;
QueryPerformanceFrequency(&litmp);//获得时钟频率
dff=(double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);//获得初始值
qt1=litmp.QuadPart;
int r=300-10*i1;
zt[i1]=r;
int i=0;
srand( (unsigned)time( NULL ) );
while(i<120)
{
x=(int)(rand()%200);
y=(int)(rand()%200)+100+r-100;
BOOL flag=false;
if((x-100)*(x-100)+(y-100-r)*(y-100-r)<10000)
{
for(int j=0;j<i;j++)
{
if(*(onep+2*j)==x&&*(onep+2*j+1)==y)
{
flag=true;
j=i;
}
}
if(!flag)
{
*(onep+2*i)=x;
*(onep+2*i+1)=y;i++;
}
}
}
//////////////////////////////////////////////////////////////////////////////
i=0;
while(i<130)
{
x=(int)(rand()%200);
y=(int)(rand()%200);
BOOL flag=false;
if((x-100)*(x-100)+(y-100)*(y-100)<10000)
{
for(int j=0;j<i;j++)
{
if(*(towp+2*j)==x&&*(towp+2*j+1)==y)
{
flag=true;
j=i;
}
}
if(!flag)
{
*(towp+2*i)=x;
*(towp+2*i+1)=y;i++;
}
}
}
///////////////////////////////
i=0;
while(i<150)
{
x=(int)(rand()%200)+int((r/2)*1.732);
y=(int)(rand()%200);
BOOL flag=false;
if((x-100-int((r/2)*1.732))*(x-100-int((r/2)*1.732))+(y-100)*(y-100)<10000)
{
for(int j=0;j<i;j++)
{
if(*(threep+2*j)==x&&*(threep+2*j+1)==y)
{
flag=true;
j=i;
}
}
if(!flag)
{
*(threep+2*i)=x;
*(threep+2*i+1)=y;i++;
}
}
}
////////////////////////////////////////////////////////////
i=0;
while(i<100)
{
x=(int)(rand()%200);
y=(int)(rand()%200)+100+r-100;
BOOL flag=false;
if((x-100)*(x-100)+(y-100-r)*(y-100-r)<10000)
{
for(int j=0;j<i;j++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -