📄 mainframe.cpp
字号:
#include "StdAfx.h"
#include ".\mainframe.h"
#include "resource.h"
#include "InputDlg.h"
#include "Order.h"
COrder Order;
const char * const CMainFrame::lpClassName="CMainFrame";
HINSTANCE CMainFrame::hInstance=0;
CMainFrame::CMainFrame(void)
{
hWnd=NULL;
}
int CMainFrame::Register(HINSTANCE hInst)
{
hInstance=hInst;
WNDCLASSEX wc;
wc.cbClsExtra=0;
wc.cbSize=sizeof(wc);
wc.cbWndExtra=0;
wc.hbrBackground=HBRUSH(COLOR_BTNFACE+1);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=(WNDPROC)WinProc;
wc.lpszClassName=lpClassName;
wc.lpszMenuName=(LPCSTR)IDM_MainFrame;
wc.style=0;
return RegisterClassEx(&wc);
}
void CMainFrame::Create(void)
{
hWnd=CreateWindowEx(0,lpClassName,"实验七",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT ,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,this);
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
LRESULT CMainFrame::WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
CMainFrame *that=(CMainFrame *)GetWindowLong(hWnd,GWL_USERDATA);
if (msg==WM_CREATE)
{
SetWindowLong(hWnd,GWL_USERDATA,(LONG)((CREATESTRUCT *)lParam)->lpCreateParams);
that=(CMainFrame *)((CREATESTRUCT *)lParam)->lpCreateParams;
that->hFont=CreateFont(12,0,0,0,0,0,0,0,0,0,0,0,0,"宋体");
SendMessage(hWnd,WM_SETFONT,(WPARAM)that->hFont,1);
}
if (msg==WM_TIMER) that->OnTimer();
if (msg==WM_COMMAND)that->OnCommand(LOWORD(wParam));
if (msg==WM_PAINT)that->OnPaint();
if (msg==WM_DESTROY)
{
DeleteObject(that->hFont);
PostQuitMessage(0);
}
if (msg==WM_INITMENU)that->OnInitMenu();
return DefWindowProc(hWnd,msg,wParam,lParam);
}
void CMainFrame::OnTimer(void)
{
if (Order.State==State_Stop)
{
Order.State=State_Break;
Order.First();
}
else if (!Order.Next())
{
KillTimer(hWnd,0);
MessageBox(hWnd,"排序演示完成!","实验七",MB_ICONINFORMATION);
}
}
void CMainFrame::OnCommand(UINT wmId)
{
if (wmId==ID_Exit)DestroyWindow(hWnd);
if (wmId==ID_Start)
{
SetTimer(hWnd,0,Order.Interval ,0);
if (Order.State==State_Stop) Order.First();
Order.State=State_Run;
}
if (wmId==ID_Step)if(Order.State!=State_Run)OnTimer();
if (wmId==ID_Break)
{
Order.State=State_Break;
KillTimer(hWnd,0);
}
if (wmId==ID_End)
{
Order.State=State_Stop;
KillTimer(hWnd,0);
}
if (wmId==ID_Bubble)
{
Order.Work=Work_Bubble;
Order.First();
Order.State=State_Break;
}
if (wmId==ID_Select)
{
Order.Work=Work_Select;
Order.First();
Order.State=State_Break;
}
if (wmId==ID_Insert)
{
Order.Work=Work_Insert;
Order.First();
Order.State=State_Break;
}
if (wmId==ID_Quick)
{
Order.Work=Work_Quick;
Order.First();
Order.State=State_Break;
}
if (wmId==ID_Heap)
{
Order.Work=Work_Heap;
Order.First();
Order.State=State_Break;
}
if (wmId==ID_SpeedUp)
{
if (Order.Interval>100)Order.Interval/=2;
if (Order.State!=State_Break)SetTimer(hWnd,0,Order.Interval,0);
}
if (wmId==ID_SpeedDown)
{
if (Order.Interval<1600)Order.Interval*=2;
if (Order.State!=State_Break)SetTimer(hWnd,0,Order.Interval,0);
}
if (wmId==ID_Sp1)
{
Order.Interval=100;
if (Order.State!=State_Break)SetTimer(hWnd,0,Order.Interval,0);
}
if (wmId==ID_Sp2)
{
Order.Interval=200;
if (Order.State!=State_Break)SetTimer(hWnd,0,Order.Interval,0);
}
if (wmId==ID_Sp4)
{
Order.Interval=400;
if (Order.State!=State_Break)SetTimer(hWnd,0,Order.Interval,0);
}
if (wmId==ID_Sp8)
{
Order.Interval=800;
if (Order.State!=State_Break)SetTimer(hWnd,0,Order.Interval,0);
}
if (wmId==ID_Sp16)
{
Order.Interval=1600;
if (Order.State!=State_Break)SetTimer(hWnd,0,Order.Interval,0);
}
if (wmId==ID_Add)
{
CInputDlg InputDlg;
int a=0;
if (Order.ti<Order.n)
{
a=Order.Arrow[Order.ti];
}
Order.ti++;
if (InputDlg.DoModal(hWnd,"输入要插入的数值",a))
{
Order.State=State_Run;
Order.ToFind=InputDlg.Value;
Order.Work=Work_Add;
Order.First();
SetTimer(hWnd,0,Order.Interval,0);
}
}
if (wmId==ID_Find)
{
CInputDlg InputDlg;
if (Order.Depth())
{
if (InputDlg.DoModal(hWnd,"输入要查找的数值",10))
{
Order.State=State_Run;
Order.ToFind=InputDlg.Value;
Order.Work=Work_Find;
Order.First();
SetTimer(hWnd,0,Order.Interval,0);
}
}
else MessageBox(hWnd,"当前树为空,建树先!","实验七",MB_ICONINFORMATION);
}
if (wmId==ID_Edit)MessageBox(hWnd,"不用了把,演示版的修改原始数组干吗啊?","实验七",MB_ICONINFORMATION);
}
void CMainFrame::OnPaint(void)
{
Order.Paint(hWnd);
}
int CMainFrame::Run(void)
{
HACCEL hAccel=LoadAccelerators(hInstance,(LPCSTR)IDR_MainFrame);
MSG msg;
while (GetMessage(&msg,NULL,0,0))
{
if (!TranslateAccelerator(hWnd,hAccel,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
void CMainFrame::OnInitMenu(void)
{
HMENU hMenu=GetMenu(hWnd);
if (Order.Work==Work_Bubble)CheckMenuItem(hMenu,ID_Bubble,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Bubble,MF_UNCHECKED);
if (Order.Work==Work_Insert)CheckMenuItem(hMenu,ID_Insert,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Insert,MF_UNCHECKED);
if (Order.Work==Work_Select)CheckMenuItem(hMenu,ID_Select,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Select,MF_UNCHECKED);
if (Order.Work==Work_Quick)CheckMenuItem(hMenu,ID_Quick,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Quick,MF_UNCHECKED);
if ( Order.Work==Work_Heap)CheckMenuItem(hMenu,ID_Heap,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Heap,MF_UNCHECKED);
if (Order.Work==Work_Add)CheckMenuItem(hMenu,ID_Add,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Add,MF_UNCHECKED);
if ( Order.Work==Work_Find)CheckMenuItem(hMenu,ID_Find,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Find,MF_UNCHECKED);
if (Order.Interval==100)CheckMenuItem(hMenu,ID_Sp1,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Sp1,MF_UNCHECKED);
if (Order.Interval==200)CheckMenuItem(hMenu,ID_Sp2,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Sp2,MF_UNCHECKED);
if (Order.Interval==400)CheckMenuItem(hMenu,ID_Sp4,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Sp4,MF_UNCHECKED);
if (Order.Interval==800)CheckMenuItem(hMenu,ID_Sp8,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Sp8,MF_UNCHECKED);
if (Order.Interval==1600)CheckMenuItem(hMenu,ID_Sp16,MF_CHECKED);
else CheckMenuItem(hMenu,ID_Sp16,MF_UNCHECKED);
if (Order.Interval==1600)CheckMenuItem(hMenu,ID_Sp16,MF_CHECKED);
if (Order.State==State_Stop)
{
EnableMenuItem(hMenu,ID_End,MF_GRAYED);
EnableMenuItem(hMenu,ID_Edit,MF_ENABLED);
}
else
{
EnableMenuItem(hMenu,ID_End,MF_ENABLED);
EnableMenuItem(hMenu,ID_Edit,MF_GRAYED);
}
if (Order.State==State_Run)
{
EnableMenuItem(hMenu,ID_Bubble,MF_GRAYED);
EnableMenuItem(hMenu,ID_Insert,MF_GRAYED);
EnableMenuItem(hMenu,ID_Select,MF_GRAYED);
EnableMenuItem(hMenu,ID_Quick,MF_GRAYED);
EnableMenuItem(hMenu,ID_Heap,MF_GRAYED);
EnableMenuItem(hMenu,ID_Add,MF_GRAYED);
EnableMenuItem(hMenu,ID_Find,MF_GRAYED);
EnableMenuItem(hMenu,ID_Break,MF_ENABLED);
EnableMenuItem(hMenu,ID_Start,MF_GRAYED);
EnableMenuItem(hMenu,ID_Step,MF_GRAYED);
}
else
{
EnableMenuItem(hMenu,ID_Bubble,MF_ENABLED);
EnableMenuItem(hMenu,ID_Insert,MF_ENABLED);
EnableMenuItem(hMenu,ID_Select,MF_ENABLED);
EnableMenuItem(hMenu,ID_Quick,MF_ENABLED);
EnableMenuItem(hMenu,ID_Heap,MF_ENABLED);
EnableMenuItem(hMenu,ID_Add,MF_ENABLED);
EnableMenuItem(hMenu,ID_Find,MF_ENABLED);
EnableMenuItem(hMenu,ID_Break,MF_GRAYED);
if (Order.Work)EnableMenuItem(hMenu,ID_Start,MF_ENABLED);
else EnableMenuItem(hMenu,ID_Start,MF_GRAYED);
if (Order.Work) EnableMenuItem(hMenu,ID_Step,MF_ENABLED);
else EnableMenuItem(hMenu,ID_Step,MF_GRAYED);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -