www.pudn.com > OSDemo.rar > D3.cpp


// D3.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "OSDemo.h" 
#include "D3.h" 
#include "safecheck.h" 
 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CD3 dialog 
 
 
CD3::CD3(CWnd* pParent /*=NULL*/) 
	: CDialog(CD3::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CD3) 
	m_resnum = 0; 
	//}}AFX_DATA_INIT 
	m_procnum = 0; 
} 
 
 
void CD3::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CD3) 
	DDX_Control(pDX, IDC_SAVE, m_save_ctrl); 
	DDX_Control(pDX, IDC_LOAD, m_load_ctrl); 
	DDX_Control(pDX, IDC_REQUEST, m_request_ctrl); 
	DDX_Control(pDX, IDC_OUT, m_out_ctrl); 
	DDX_Control(pDX, IDC_PROC, m_proc_ctrl); 
	DDX_Control(pDX, IDC_SETNUM, m_setnum_ctrl); 
	DDX_Control(pDX, IDC_REMOVE, m_remove_ctrl); 
	DDX_Control(pDX, IDC_ADD, m_add_ctrl); 
	DDX_Control(pDX, IDC_NUM, m_num_ctrl); 
	DDX_Text(pDX, IDC_NUM, m_resnum); 
	//}}AFX_DATA_MAP 
    DDX_GridControl(pDX, IDC_LIST, m_GridCtrl); 
	DDX_GridControl(pDX, IDC_LIST2, m_avlist); 
	DDX_GridControl(pDX, IDC_LIST3, m_reqlist); 
} 
 
 
BEGIN_MESSAGE_MAP(CD3, CDialog) 
	//{{AFX_MSG_MAP(CD3) 
	ON_BN_CLICKED(IDC_SETNUM, OnSetNum) 
	ON_BN_CLICKED(IDC_ADD, OnAdd) 
	ON_BN_CLICKED(IDC_REMOVE, OnRemove) 
	ON_BN_CLICKED(IDC_PROC, OnProc) 
	ON_BN_CLICKED(IDC_REQUEST, OnRequest) 
	ON_BN_CLICKED(IDC_SAVE, OnSave) 
	ON_BN_CLICKED(IDC_LOAD, OnLoad) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CD3 message handlers 
void CD3::EnabeControls() 
{ 
	this->UpdateData(); 
	if(m_resnum<=0) 
	{ 
		m_add_ctrl.EnableWindow(false); 
		m_remove_ctrl.EnableWindow(false); 
		m_proc_ctrl.EnableWindow(false); 
		m_setnum_ctrl.EnableWindow(true); 
		m_reqlist.EnableWindow(false); 
		m_request_ctrl.EnableWindow(false); 
		m_load_ctrl.EnableWindow(true); 
		m_save_ctrl.EnableWindow(false); 
		return; 
	} 
	else 
	{ 
		m_add_ctrl.EnableWindow(true); 
		m_setnum_ctrl.EnableWindow(false); 
		m_num_ctrl.EnableWindow(false); 
		m_load_ctrl.EnableWindow(false); 
 
	} 
	if(m_procnum>0) 
	{ 
		m_remove_ctrl.EnableWindow(true); 
		m_proc_ctrl.EnableWindow(true); 
		m_reqlist.EnableWindow(true); 
		m_request_ctrl.EnableWindow(true); 
		m_save_ctrl.EnableWindow(true); 
	} 
	else 
	{ 
		m_remove_ctrl.EnableWindow(false); 
		m_proc_ctrl.EnableWindow(false); 
		m_reqlist.EnableWindow(false); 
		m_request_ctrl.EnableWindow(false); 
		m_save_ctrl.EnableWindow(false); 
	} 
	 
 
} 
 
BOOL CD3::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
	 
 
	m_GridCtrl.SetRowCount(1); 
    m_GridCtrl.SetFixedRowCount(1); 
    m_GridCtrl.SetColumnCount(1); 
    m_GridCtrl.SetFixedColumnCount(1); 
	m_GridCtrl.SetColumnResize(FALSE); 
	m_GridCtrl.SetRowResize(FALSE); 
	 
	m_avlist.SetRowCount(2); 
	m_avlist.SetFixedRowCount(1); 
    m_avlist.SetColumnCount(0); 
    m_avlist.SetFixedColumnCount(0); 
	m_avlist.SetColumnResize(FALSE); 
	m_avlist.SetRowResize(FALSE); 
 
 
	m_reqlist.SetComboBoxStyle(CBS_DROPDOWNLIST); 
	m_reqlist.SetRowCount(2); 
	m_reqlist.SetFixedRowCount(1); 
    m_reqlist.SetColumnCount(1); 
    m_reqlist.SetFixedColumnCount(0); 
	m_reqlist.SetColumnResize(FALSE); 
	m_reqlist.SetRowResize(FALSE); 
 
	GV_ITEM Item; 
	Item.mask = GVIF_TEXT|GVIF_FORMAT; 
	Item.row = 0; 
	Item.col = 0; 
	Item.szText = _T("进程号"); 
	m_GridCtrl.SetItem(&Item); 
 
	m_reqlist.SetItem(&Item); 
	m_reqlist.AutoSizeColumns(); 
	m_reqlist.EnableWindow(false); 
	// fill rows/cols with text 
/*	 
	for (int row = 0; row < m_GridCtrl.GetRowCount(); row++) 
		for (int col = 0; col < m_GridCtrl.GetColumnCount(); col++) 
		{  
			GV_ITEM Item; 
			Item.mask = GVIF_TEXT|GVIF_FORMAT; 
			Item.row = row; 
			Item.col = col; 
			if (row < 1 ) { 
				if(col>0) 
				{ 
					Item.nFormat = DT_LEFT|DT_WORDBREAK; 
					Item.szText.Format(_T("Column %d"),col); 
				} 
			} else if (col < 1 ) { 
				Item.nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; 
				Item.szText.Format(_T("Row %d"),row); 
			} else { 
			//	Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; 
			//	Item.szText.Format(_T("%d"),row*col); 
			} 
			m_GridCtrl.SetItem(&Item); 
		} 
*/	 
 
	m_GridCtrl.AutoSize(); 
     
	return TRUE;  // return TRUE  unless you set the focus to a control 
 
 
}	 
 
void CD3::OnSetNum()  
{ 
	// TODO: Add your control notification handler code here 
	this->UpdateData(TRUE); 
	if(m_resnum<=0) 
	{ 
		MessageBox("错误的资源数!","错误",MB_OK|MB_ICONERROR); 
	} 
	m_GridCtrl.SetColumnCount(m_resnum*2+1); 
	int row=0; 
	for (int col = 1; col <=m_resnum; col++) 
	{  
			GV_ITEM Item; 
			Item.mask = GVIF_TEXT|GVIF_FORMAT; 
			Item.row = row; 
			Item.col = col; 
 
					Item.nFormat = DT_LEFT|DT_WORDBREAK; 
					Item.szText.Format(_T("资源%d(已分配)"),col); 
 
			m_GridCtrl.SetItem(&Item); 
	} 
	for (col = m_resnum+1; col <=m_resnum*2; col++) 
	{  
			GV_ITEM Item; 
			Item.mask = GVIF_TEXT|GVIF_FORMAT; 
			Item.row = row; 
			Item.col = col; 
 
					Item.nFormat = DT_LEFT|DT_WORDBREAK; 
					Item.szText.Format(_T("资源%d(最大需求)"),col-m_resnum); 
 
			m_GridCtrl.SetItem(&Item); 
	} 
	m_GridCtrl.AutoSize(); 
	 
	m_avlist.SetColumnCount(m_resnum); 
	for (col = 0; col available[col-1])) 
		{ 
			delete alloc; 
			delete need; 
			delete available; 
			delete max; 
			delete request; 
			MessageBox("资源请求:缺少数据或数据出错!","错误!",MB_OK|MB_ICONERROR); 
			return; 
		} 
		if(col==0) 
		{ 
			if(data>m_procnum) 
			{ 
				delete alloc; 
				delete need; 
				delete available; 
				delete max; 
				delete request; 
				MessageBox("进程号错误!","错误!",MB_OK|MB_ICONERROR); 
				return; 
			} 
			nProc=data-1; 
		} 
		else 
		{ 
			request[col-1]=data; 
		} 
 
	} 
//计算need 处理request 
	for(col=0;colm_resnum),sizeof(int)); 
	UpdateData(false); 
	OnSetNum(); 
	for(int i=0;i