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 + -
显示快捷键?