rsdialog.cpp

来自「银行家算法:实现了动态的进程分配资源」· C++ 代码 · 共 181 行

CPP
181
字号
// RsDialog.cpp : implementation file
//

#include "stdafx.h"
#include "Banker.h"
#include "RsDialog.h"



// RsDialog dialog

bool toInteger(CString,UINT&);

//增加这一行,为该编辑框设定ID为5000 
#define ID_MYEDT 5000

IMPLEMENT_DYNAMIC(RsDialog, CDialog)

RsDialog::RsDialog(CWnd* pParent /*=NULL*/,UINT p,UINT r,CString str)
	: CDialog(RsDialog::IDD, pParent)
	, nPro(p)
	, nRes(r)
	, hint(str)
	, boolean(true)
{ 
	Data = new UINT[nRes];
}

RsDialog::~RsDialog()
{
	delete []Data;
}

void RsDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(RsDialog, CDialog)
	ON_BN_CLICKED(IDOK, &RsDialog::OnBnClickedOk)
END_MESSAGE_MAP()


// RsDialog message handlers

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

      MyEdit = new CEdit*[nRes];
	  MyStatic = new CStatic*[nRes+1];

	  UINT i;
	  UINT id =  ID_MYEDT;
	  for(i=0; i<nRes; i++)
	  {

          // Create a child static control that centers its text horizontally.
          MyStatic[i] = new CStatic;
		  CString str = _T("");
		  str.Format("资源%d:",i);
          MyStatic[i]->Create(str, WS_CHILD|WS_VISIBLE|SS_CENTER,
                              CRect(15,30*i+10,65,30*i+35), this);
		  MyStatic[i]->ShowWindow(SW_SHOW);

		  MyEdit[i] = new CEdit;
	      MyEdit[i]->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
                             CRect(75,30*i+10,165,30*i+35), this,id);	//生成edit控件 	  
		  MyEdit[i]->SetWindowTextA(_T("0"));
          id++;
          MyEdit[i]->ShowWindow(SW_SHOW); //显示控件 
          MyEdit[i]->SetFocus(); //设置焦点 
	  } 
	  MyStatic[i] = new CStatic;
      MyStatic[i]->Create(hint, WS_CHILD|WS_VISIBLE|SS_CENTER,
                              CRect(15,30*i+10,240,30*i+35), this);
	  MyStatic[i]->ShowWindow(SW_SHOW); 
	  
	  GetDlgItem(IDOK)->MoveWindow(20,30*i+45,75,30,1);
	  GetDlgItem(IDCANCEL)->MoveWindow(115,30*i+45,75,30,1);
	  CRect rectDlg;
      GetWindowRect(rectDlg);
	  CPoint topleft = rectDlg.TopLeft();
	  this->MoveWindow(topleft.x,topleft.y,240,30*++i+105,1);

	  return true;
}


void RsDialog::OnBnClickedOk()
{
	UpdateData(true);

	CString str = _T("");
	for(UINT i=0; i<nRes; i++)
	{
		MyEdit[i]->GetWindowTextA(str);
		if(!toInteger(str,Data[i]))
		{
			boolean = false;
			break;
		}
		boolean = true;
	}
	
	for(UINT i=0; i<nRes; i++)
	{
		MyEdit[i]->DestroyWindow();
		delete MyEdit[i];
		MyStatic[i]->DestroyWindow();
		delete MyStatic[i];
	}

	MyStatic[nRes]->DestroyWindow();
	delete MyStatic[nRes];

	delete MyEdit;
	delete MyStatic;
	// TODO: Add your control notification handler code here
	OnOK();
}

bool toInteger(CString str,UINT &uint)
{
	int length = str.GetLength();
	UINT result = 0;
	for(int i=0; i<length; i++)
	{
		char chr = str.GetAt(i);
		switch(chr)
		{
		case '1':
			result *= 10;
			result += 1;
			break;
		case '2':
			result *= 10;
			result += 2;
			break;
		case '3':
			result *= 10;
			result += 3;
			break;
		case '4':
			result *= 10;
			result += 4;
			break;
		case '5':
			result *= 10;
			result += 5;
			break;
		case '6':
			result *= 10;
			result += 6;
			break;
		case '7':
			result *= 10;
			result += 7;
			break;
		case '8':
			result *= 10;
			result += 8;
			break;
		case '9':
			result *= 10;
			result += 9;
			break;
		case '0':
			result *= 10;
			break;
		default:
			CString cs;
			cs.Format("字符 '%c' 非数字型,请重新输入",chr);
			AfxMessageBox(cs);
			return false;
		}
	}
    uint = result;
	return true;
}

⌨️ 快捷键说明

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