画图函数:
void CMyDlg::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
{
CDialog::OnPaint();
}
CPen hPen;
CClientDC dc1(this);
hPen.CreatePen(PS_SOLID,1,RGB(155,100,0));
SelectObject(dc1,hPen);
dc1.MoveTo(25,25);
dc1.LineTo(300,25);
dc1.MoveTo(25,25);
dc1.LineTo(25,325);
dc1.MoveTo(25,325);
dc1.LineTo(300,325);
dc1.MoveTo(300,325);
dc1.LineTo(300,25);
dc1.MoveTo(70,25);
dc1.LineTo(70,325);
dc1.MoveTo(105,25);
dc1.LineTo(105,325);
dc1.MoveTo(140,25);
dc1.LineTo(140,325);
CString str="fsaf";
//TextOut(dc1,150,150,str,strlen(str));
CBrush hBru;
hBru.CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0));
CClientDC hdc(this);
SelectObject(hdc,hPen);
SelectObject(hdc,hBru);
for(int i=0;i<300;i++)
{
CBrush hBru;
CPen hPen;
hPen.CreatePen(PS_SOLID,1,RGB(155,100,0));
hBru.CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0));
CClientDC hdc(this);
SelectObject(hdc,hPen);
SelectObject(hdc,hBru);
str.Format("%d",block_number[i]);
TextOut(dc1,45,27+i,str,strlen(str));
str.Format("%d",Space[i]);
TextOut(dc1,75,27+i,str,strlen(str));
str.Format("%d",i);
TextOut(dc1,115,27+i,str,strlen(str));
if(Fen[i])
hdc.Rectangle(140,25+i,300,Space[i]+25+i);
hdc.MoveTo(25,Space[i]+25+i);
hdc.LineTo(300,Space[i]+25+i);
i=i+Space[i]-1;
}
}
回收函数:
void CMyDlg::OnOK()
{
// TODO: Add your control notification handler code here
// int block;
bool f=true;
UpdateData(true);
int begin;
int end;
int swap;
for(int i=0;i<300&&f;i++)
{
if(block_number[i]==m_H)
{
begin=i;
end=Space[i]+i;
swap=Space[i];
f=false;
}
else
{
// i=i+Space[i];
}
}
/*for(int j=i-1;j<Space[i-1]+i-1;j++)
{
Fen[j]=false;
}*/
//flag=true;
if(i-1>0&&Fen[i-1-Space[i-1]]==false)
{
begin=i-1-Space[i-1];
swap=swap+Space[i-1-Space[i-1]];
}
if(i<300&&Fen[i-1+Space[i-1]]==false)
{
end=i-1+Space[i-1];
swap=swap+Space[i-1+Space[i-1]];
}
for(int j=begin;j<end;j++)
{
Space[j]=swap;
block_number[j]=m_H;
Fen[j]=false;
}
Invalidate();
}
分配函数:
void CMyDlg::OnFen()
{
// TODO: Add your control notification handler code here
UpdateData(true);
bool f=true;
for(int i=0;i<300&&f;i++)
{
if(m_F<=Space[i]&&Fen[i]!=true)
{
f=false;
for(int j=i+m_F;j<Space[i]+i;j++)
{
Space[j]=Space[i]-m_F;
block_number[j]=block_number[i];
}
Count++;
for(j=i;j<i+m_F;j++)
{
Space[j]=m_F;
Fen[j]=true;
block_number[j]=Count;
}
}
else
{
i=i+Space[i]-1;
}
}
Invalidate();
}