⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elecdemodlg.cpp

📁 模拟电子课程的教学演示程序
💻 CPP
字号:
// ElecDemoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ElecDemo.h"
#include "ElecDemoDlg.h"
#include "OptionDlg.h"
#include "pages.h"
#include "PathDlg.h"
#include "helpdlg.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()

/////////////////////////////////////////////////////////////////////////////
// CElecDemoDlg dialog

CElecDemoDlg::CElecDemoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CElecDemoDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CElecDemoDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_bDemoHide=TRUE;
}

void CElecDemoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CElecDemoDlg)
	DDX_Control(pDX, IDC_HELPBTN, m_Help);
	DDX_Control(pDX, IDC_CONTAINER3, m_Container3);
	DDX_Control(pDX, IDC_CONTAINER2, m_Container2);
	DDX_Control(pDX, IDC_OPTION, m_Option);
	DDX_Control(pDX, IDOK, m_Exit);
	DDX_Control(pDX, IDC_CHAPTERS, m_Container1);
	DDX_Control(pDX, IDC_CHAPTER1, m_Ch1);
	DDX_Control(pDX, IDC_CHAPTER2, m_Ch2);
	DDX_Control(pDX, IDC_CHAPTER3, m_Ch3);
	DDX_Control(pDX, IDC_CHAPTER4, m_Ch4);
	DDX_Control(pDX, IDC_CHAPTER5, m_Ch5);
	DDX_Control(pDX, IDC_CHAPTER6, m_Ch6);
	DDX_Control(pDX, IDC_CHAPTER7, m_Ch7);
	DDX_Control(pDX, IDC_CHAPTER8, m_Ch8);
	DDX_Control(pDX, IDC_CHAPTER9, m_Ch9);
	DDX_Control(pDX, IDC_CHAPTER10, m_Ch10);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CElecDemoDlg, CDialog)
	//{{AFX_MSG_MAP(CElecDemoDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CHAPTER1, OnChapter1)
	ON_BN_CLICKED(IDC_CHAPTER2, OnChapter2)
	ON_BN_CLICKED(IDC_CHAPTER3, OnChapter3)
	ON_BN_CLICKED(IDC_CHAPTER4, OnChapter4)
	ON_BN_CLICKED(IDC_CHAPTER5, OnChapter5)
	ON_BN_CLICKED(IDC_CHAPTER6, OnChapter6)
	ON_BN_CLICKED(IDC_CHAPTER7, OnChapter7)
	ON_BN_CLICKED(IDC_CHAPTER8, OnChapter8)
	ON_BN_CLICKED(IDC_CHAPTER9, OnChapter9)
	ON_BN_CLICKED(IDC_CHAPTER10, OnChapter10)
	ON_BN_CLICKED(IDC_OPTION, OnOption)
	ON_BN_CLICKED(IDC_HELPBTN, OnHelp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CElecDemoDlg message handlers

BOOL CElecDemoDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

    m_ppPath=AfxGetApp()->GetProfileString("Settings","pppath","");
	m_bDemoHide=AfxGetApp()->GetProfileInt("Settings","hide",1);
	if(m_ppPath=="")
	{
		CPathDlg dlg;
		if(dlg.DoModal()==IDOK)
		{
			m_ppPath=dlg.m_Path;
			AfxGetApp()->WriteProfileString("Settings","pppath",m_ppPath);
		}
	}
	
	// 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
	m_Demo.Create(WS_EX_CLIENTEDGE,WS_VISIBLE|WS_CHILD, IDC_DEMO, this, 2);	
    m_Demo.AddPage("",IDD_PAGE1,RUNTIME_CLASS(CPage1),0);
    m_Demo.AddPage("",IDD_PAGE2,RUNTIME_CLASS(CPage2),1);
	m_Demo.AddPage("",IDD_PAGE3,RUNTIME_CLASS(CPage3),2);
	m_Demo.AddPage("",IDD_PAGE4,RUNTIME_CLASS(CPage4),3);
	m_Demo.AddPage("",IDD_PAGE5,RUNTIME_CLASS(CPage5),4);
	m_Demo.AddPage("",IDD_PAGE6,RUNTIME_CLASS(CPage6),5);
	m_Demo.AddPage("",IDD_PAGE7,RUNTIME_CLASS(CPage7),6);
	m_Demo.AddPage("",IDD_PAGE8,RUNTIME_CLASS(CPage8),7);
	m_Demo.AddPage("",IDD_PAGE9,RUNTIME_CLASS(CPage9),8);
	m_Demo.AddPage("",IDD_PAGE10,RUNTIME_CLASS(CPage10),9);
    m_Demo.ShowPage(0);
	// TODO: Add extra initialization here
	int cx=::GetSystemMetrics(SM_CXSCREEN);
	int cy=::GetSystemMetrics(SM_CYSCREEN);
	if(cx!=1024||cy!=768)
	{
		AfxMessageBox("请将分辨率设置成1024 X 768再启动本软件!");
		SendMessage(WM_CLOSE);
		return FALSE;
	}
	MoveWindow(0,0,cx,cy);

	m_Container1.MoveWindow(cx/6,cy/5);
	m_Container2.MoveWindow(cx/4+100,cy/5-20);
	m_Container3.MoveWindow(cx-360,cy-180);

    m_Ch1.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch1.SetIcon(IDI_ICON1,BS_LEFT,IDI_ICON12);
	m_Ch1.SetToolTipText("半导体器件");
	m_Ch2.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch2.SetToolTipText("放大电路基本原理");
	m_Ch2.SetIcon(IDI_ICON2,BS_LEFT,IDI_ICON12);
	m_Ch3.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch3.SetToolTipText("放大电路的频率特性");
	m_Ch3.SetIcon(IDI_ICON3,BS_LEFT,IDI_ICON12);
	m_Ch4.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch4.SetToolTipText("集成运算放大器");
	m_Ch4.SetIcon(IDI_ICON4,BS_LEFT,IDI_ICON12);
	m_Ch5.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch5.SetToolTipText("放大电路中的反馈");
	m_Ch5.SetIcon(IDI_ICON5,BS_LEFT,IDI_ICON12);
	m_Ch6.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch6.SetToolTipText("集成运放的线性应用");
	m_Ch6.SetIcon(IDI_ICON6,BS_LEFT,IDI_ICON12);
	m_Ch7.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch7.SetToolTipText("成运放的非线性应用");
	m_Ch7.SetIcon(IDI_ICON7,BS_LEFT,IDI_ICON12);
	m_Ch8.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch8.SetToolTipText("波形发生电路");
	m_Ch8.SetIcon(IDI_ICON8,BS_LEFT,IDI_ICON12);
	m_Ch9.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch9.SetToolTipText("功率放大器");
	m_Ch9.SetIcon(IDI_ICON9,BS_LEFT,IDI_ICON12);
	m_Ch10.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Ch10.SetToolTipText("直流电源");
	m_Ch10.SetIcon(IDI_ICON10,BS_LEFT,IDI_ICON12);

	m_Exit.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Exit.SetToolTipText("退出演示");
	m_Exit.SetIcon(IDI_EXIT,BS_LEFT);

	m_Option.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Option.SetToolTipText("设置");
	m_Option.SetIcon(IDI_ICON11,BS_LEFT);

	m_Help.SetShade(SHS_METAL|SHS_NOISE,8,10,20,RGB(242,86,192));
	m_Help.SetToolTipText("帮助");
	m_Help.SetIcon(IDI_ICON6,BS_LEFT);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CElecDemoDlg::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 CElecDemoDlg::OnPaint() 
{
	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);
	}
	else
	{
		CPaintDC dc(this);
		if(m_bmpBack.m_hObject==NULL)
		{
			CString str;
			str=getPath()+"main.jpg";
			LoadPictureFile(str,&m_bmpBack,m_bmpSize);
		}
		CRect rect;
		GetWindowRect(rect);
		CDC memDC,tmpDC;
		CBitmap memBmp;
		memDC.CreateCompatibleDC(&dc);
        tmpDC.CreateCompatibleDC(&dc);
		memBmp.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
		memDC.SelectObject(&memBmp);
		tmpDC.SelectObject(&m_bmpBack);
		memDC.StretchBlt(0,0,rect.Width(),rect.Height(),&tmpDC,0,0,m_bmpSize.cx,
			m_bmpSize.cy,SRCCOPY);
		dc.BitBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);
		memDC.DeleteDC();
		tmpDC.DeleteDC();
		memBmp.DeleteObject();
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CElecDemoDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
void CElecDemoDlg::OpenEWBFile(int ch,int sub)
{
	STARTUPINFO si={sizeof(si)};
	PROCESS_INFORMATION pi;
	CString file;
	file.Format("演示文件\\%d\\%d.%d.ewb",ch,ch,sub);
	CString path=getPath()+"wb\\WEWB32.EXE";
	CString ComLine=path+" "+getPath()+file;
	BOOL bSuc=CreateProcess(NULL,ComLine.GetBuffer(ComLine.GetLength()),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
	if(bSuc)
	{
		if(m_bDemoHide)
		{
			ShowWindow(SW_HIDE);
			WaitForSingleObject(pi.hProcess,INFINITE);
			ShowWindow(SW_SHOW);
			CloseHandle(pi.hProcess);
		}
	}
}
void CElecDemoDlg::OpenPPSFile(int ch,int sub)
{
	STARTUPINFO si={sizeof(si)};
	PROCESS_INFORMATION pi;
	CString file;
	file.Format("演示文件\\%d\\%d.%d.pps",ch,ch,sub);
	CString ComLine=m_ppPath+" "+getPath()+file;
	BOOL bSuc=CreateProcess(NULL,ComLine.GetBuffer(ComLine.GetLength()),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
	if(bSuc)
	{
		if(m_bDemoHide)
		{
			ShowWindow(SW_HIDE);
			WaitForSingleObject(pi.hProcess,INFINITE);
			ShowWindow(SW_SHOW);
			CloseHandle(pi.hProcess);
		}
	}
}

void CElecDemoDlg::OpenExeFile(int ch,int sub)
{
	STARTUPINFO si={sizeof(si)};
	PROCESS_INFORMATION pi;
	CString file;
	file.Format("演示文件\\%d\\%d.%d.exe",ch,ch,sub);
	CString ComLine=getPath()+file;
	BOOL bSuc=CreateProcess(NULL,ComLine.GetBuffer(ComLine.GetLength()),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
	if(bSuc)
	{
		if(m_bDemoHide)
		{
			ShowWindow(SW_HIDE);
			WaitForSingleObject(pi.hProcess,INFINITE);
			ShowWindow(SW_SHOW);
			CloseHandle(pi.hProcess);
		}
	}
}
void CElecDemoDlg::OnChapter1() 
{
	m_Demo.ShowPage(0);
}

void CElecDemoDlg::OnChapter2() 
{
m_Demo.ShowPage(1);	
}

void CElecDemoDlg::OnChapter3() 
{
m_Demo.ShowPage(2);	
}

void CElecDemoDlg::OnChapter4() 
{
m_Demo.ShowPage(3);	
}

void CElecDemoDlg::OnChapter5() 
{
m_Demo.ShowPage(4);	
}

void CElecDemoDlg::OnChapter6() 
{
m_Demo.ShowPage(5);	
}

void CElecDemoDlg::OnChapter7() 
{
m_Demo.ShowPage(6);	
}

void CElecDemoDlg::OnChapter8() 
{
m_Demo.ShowPage(7);	
}

void CElecDemoDlg::OnChapter9() 
{
m_Demo.ShowPage(8);	
}

void CElecDemoDlg::OnChapter10() 
{
m_Demo.ShowPage(9);	
}

void CElecDemoDlg::OnOption() 
{
	COptionDlg dlg;
	if(dlg.DoModal()==IDOK)
	{
		m_ppPath=dlg.m_Path;
		m_bDemoHide=!dlg.m_rHide;
	}
}

void CElecDemoDlg::OnHelp() 
{
/*	STARTUPINFO si={sizeof(si)};
	PROCESS_INFORMATION pi;
	CString ComLine="NOTEPAD ";
	ComLine+="help.txt";
	BOOL bSuc=CreateProcess(NULL,ComLine.GetBuffer(ComLine.GetLength()),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);*/

	CHelpDlg dlg;
	dlg.DoModal();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -