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

📄 setdialog.cpp

📁 这是软件工程的关于模拟进程调度的课程论文
💻 CPP
字号:
// SetDialog.cpp : implementation file
//

#include "stdafx.h"
#include "ProcessManager.h"
#include "SetDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSetDialog dialog


CSetDialog::CSetDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CSetDialog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetDialog)
	m_nprio = 0;
	m_ntime = 0;
	m_npid = 0;
	//}}AFX_DATA_INIT
	uState = MODE_NOTHING;
	strWinName = _T("未命名");
}


void CSetDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetDialog)
	DDX_Text(pDX, IDC_EDTPRIO, m_nprio);
	DDX_Text(pDX, IDC_EDTTIME, m_ntime);
	DDX_Text(pDX, IDC_EDTPID, m_npid);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetDialog, CDialog)
	//{{AFX_MSG_MAP(CSetDialog)
	ON_BN_CLICKED(IDOK, OnDoAction)
	//}}AFX_MSG_MAP
	ON_MESSAGE(UM_RECEIVEINFO, OnChangeMode)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetDialog message handlers

void CSetDialog::OnDoAction() 
{
	// TODO: Add your control notification handler code here

	CString str = _T("");
	CString strTemp;
	ProInfo * pi = NULL;

	//UpdateData();
	
	switch(uState)
	{
	case MODE_CREATE:
		if(str.IsEmpty())
			((CEdit *)this->GetDlgItem(IDC_EDTPID))->GetWindowText(str);
		((CEdit *)this->GetDlgItem(IDC_EDTPID))->SetWindowText("0");
		
		UpdateData();
		//::AfxMessageBox(str);
		if(0 == str.Compare("0"))
		{
			MessageBox("请输入进程名字!\t\t","Error");
		}
		else if(m_nprio<1 || (m_nprio>10))
		{
			MessageBox("进程优先级取值介于 1-10 之间,请重新输入!","Error");
			((CEdit *)this->GetDlgItem(IDC_EDTPID))->SetWindowText(str);
		}else if(m_ntime<50 || (m_ntime>500))
		{
			MessageBox("进程运行时间取值介于 50-500 之间,请重新输入!","Error");
			((CEdit *)this->GetDlgItem(IDC_EDTPID))->SetWindowText(str);
		}else
		{
			pi = new ProInfo(m_nprio, 0, m_ntime);
			ASSERT(pi!=NULL);
			pi->strname = str;
			//传递消息
			::SendMessage(::AfxGetMainWnd()->m_hWnd,UM_SENDINFO,(WPARAM)pi,MODE_CREATE);
			CDialog::OnOK();
		}
		break;

	case MODE_KILL:
		UpdateData();
		if(m_npid<1 || (m_npid>255))
		{
			MessageBox("进程ID取值介于 1-255 之间,请重新输入!","Error");
		}else
		{
			pi = new ProInfo(0,m_npid,0);
			ASSERT(pi!=NULL);
			//传递消息
			::SendMessage(::AfxGetMainWnd()->m_hWnd,UM_SENDINFO,(WPARAM)pi,MODE_KILL);
			CDialog::OnOK();
		}
		break;

	case MODE_SUPPOND:
		UpdateData();
		if(m_npid<1 || (m_npid>255))
		{
			MessageBox("进程ID取值介于 1-255 之间,请重新输入!","Error");
		}else
		{
			pi = new ProInfo(0,0,m_npid);
			ASSERT(pi!=NULL);
			//传递消息
			::SendMessage(::AfxGetMainWnd()->m_hWnd,UM_SENDINFO,(WPARAM)pi,MODE_SUPPOND);
			CDialog::OnOK();
		}
		break;

	case MODE_MODIFY:
		UpdateData();
		if(m_npid<1 || (m_npid>255))
		{
			MessageBox("进程ID取值介于 1-255 之间,请重新输入!","Error");
		}else if(m_nprio<1 || (m_nprio>10))
		{
			MessageBox("进程优先级取值介于 1-10 之间,请重新输入!","Error");
		}else
		{
			pi = new ProInfo(m_nprio, m_npid, m_ntime);
			ASSERT(pi!=NULL);
			//传递消息
			::SendMessage(::AfxGetMainWnd()->m_hWnd,UM_SENDINFO,(WPARAM)pi,MODE_MODIFY);
			CDialog::OnOK();
		}
		break;
	default:
		break;
	}
	
}

BOOL CSetDialog::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	cs.style = WS_TILED;
	cs.lpszName = strWinName;
	return CDialog::PreCreateWindow(cs);
}


LRESULT CSetDialog::OnChangeMode(WPARAM wparam, LPARAM lparam)
{
	ASSERT(lparam!=NULL);
	
	uState = (UINT)lparam;
	switch(uState)
	{
	case MODE_CREATE:	//修改显示
		((CStatic*)this->GetDlgItem(IDC_PID))->SetWindowText("进程名字:");
		((CStatic*)this->GetDlgItem(IDC_RANGA))->ShowWindow(SW_HIDE);
		strWinName = _T("创建进程窗口");
		break;

	case MODE_KILL:		//只显示pid窗口
		this->GetDlgItem(IDC_RANGB)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_RANGC)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_EDTPRIO)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_EDTTIME)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_PRIO)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_TIME)->ShowWindow(SW_HIDE);
		strWinName = _T("杀死进程窗口");
		break;

	case MODE_SUPPOND:	//只显示pid窗口
		this->GetDlgItem(IDC_RANGB)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_RANGC)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_EDTPRIO)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_EDTTIME)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_PRIO)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_TIME)->ShowWindow(SW_HIDE);
		strWinName = _T("挂起进程窗口");
		break;

	case MODE_MODIFY:
		this->GetDlgItem(IDC_RANGC)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_EDTTIME)->ShowWindow(SW_HIDE);
		this->GetDlgItem(IDC_TIME)->ShowWindow(SW_HIDE);
		strWinName = _T("修改进程窗口");
		break;

	default:
		break;
	}
	
	this->SetWindowText(strWinName);	//设置窗口标题

	return 0;
}

⌨️ 快捷键说明

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