为什么CPU达到100%

CreScert 2015-02-19 10:43:23
我的思路是这样的,只是实现翻书效果,刚开始时是慢慢打开书,可是到了第二页第三页的时候,CPU达到100%,是哪里的原因啊?
// Happy Birthday_2Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "Happy Birthday_2.h"
#include "Happy Birthday_2Dlg.h"

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

#define IDB_PLAY 2000
#define BMP_SIZE 10000000
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

/////////////////////////////////////////////////////////////////////////////
// CHappyBirthday_2Dlg dialog

CHappyBirthday_2Dlg::CHappyBirthday_2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CHappyBirthday_2Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CHappyBirthday_2Dlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CHappyBirthday_2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CHappyBirthday_2Dlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CHappyBirthday_2Dlg, CDialog)
//{{AFX_MSG_MAP(CHappyBirthday_2Dlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, OnOpen)
ON_WM_TIMER()
ON_WM_ERASEBKGND()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHappyBirthday_2Dlg message handlers

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


// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here
SetWindowPos(&wndTop,700,100,400,500,SWP_NOZORDER); //设置位置
TurnPage=1200;
Process=0;//进度为0,开始页面

x=0;

//初始化
Bitmap=IDB_BITMAP;
Bitmap1=IDB_BITMAP1;
Bitmap2=IDB_BITMAP2;


SecondTrunLeft=0;
SecondTrun=0;


return TRUE; // return TRUE unless you set the focus to a control
}


// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CHappyBirthday_2Dlg::OnPaint()
{
if(Process==0)
{
CPaintDC dc(this);

dc.SetStretchBltMode(HALFTONE);

dctwo.CreateCompatibleDC(&dc);//增加兼容DC


//初始化图像
bitmap.LoadBitmap(Bitmap);
bitmap.GetBitmap(&bit);

bitmapold=dctwo.SelectObject(&bitmap);//0
dc.StretchBlt(0,0,TurnPage-800,500,&dctwo,0,0,400,500,SRCCOPY);

}

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();
}
}

//下一页按钮响应函数
void CHappyBirthday_2Dlg::OnOpen()
{
Process++;

if(Process>=3) SecondTrunLeft=400;
Control();

}


//定时器函数
void CHappyBirthday_2Dlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
//定时器1,实现翻页效果
case 1:
if(TurnPage<=400)//结束定时器,并清理内存
{
KTimer(1);
GetDlgItem(IDOK)->ShowWindow(SW_SHOW);

}
else if (TurnPage>=800&&TurnPage<=1200)//从右边翻页
{
TurnPage-=2;
if(Process>=3) SecondTrun=400;
Invalidate();
}
else if(TurnPage<800&&TurnPage>=400)//翻到左边
{
TurnPage-=2;
if(Process==1) Process++;
if(Process==2) SetWindowPos(&wndTop,TurnPage-100,100,(800-TurnPage)+400,500,SWP_NOZORDER);

if(Process>=3) SecondTrunLeft-=2;
if(x<400)
x=800-TurnPage;

Invalidate();//刷新背景

}

/***************************翻页效果********************************/
{
CPaintDC dc(this);

dc.SetStretchBltMode(HALFTONE);
dctwo.CreateCompatibleDC(&dc);//增加兼容DC


//初始化图像
bitmap.LoadBitmap(Bitmap);
bitmap.GetBitmap(&bit);

bitmap1.LoadBitmap(Bitmap1);
bitmap1.GetBitmap(&bit);

bitmap2.LoadBitmap(Bitmap2);
bitmap2.GetBitmap(&bit);

bitmap3.LoadBitmap(Bitmap3);
bitmap3.GetBitmap(&bit);

//翻页效果
//不动的左页
if(Process>=3&&TurnPage<=1200&&TurnPage>=400)
{
bitmapold=dctwo.SelectObject(&bitmap3);//3
dc.StretchBlt(0,0,400,500,&dctwo,0,0,400,500,SRCCOPY);
}
//动的左书页
if(TurnPage<800&&TurnPage>=400)
{
bitmapold=dctwo.SelectObject(&bitmap1);
dc.StretchBlt(SecondTrunLeft,0,(800-TurnPage),500,&dctwo,0,0,400,500,SRCCOPY);


}
//不动的右书页,
if(TurnPage>=400&&TurnPage<=1200)
{
bitmapold=dctwo.SelectObject(&bitmap2);
dc.StretchBlt(x,0,400,500,&dctwo,0,0,400,500,SRCCOPY);
}

//动的右书页,第一次是书的开始
if(TurnPage>=800&&TurnPage<=1200)
{
bitmapold=dctwo.SelectObject(&bitmap);//0
dc.StretchBlt(SecondTrun,0,TurnPage-800,500,&dctwo,0,0,400,500,SRCCOPY);

}

}

/*************************************************************/
break;


}



CDialog::OnTimer(nIDEvent);
}


//这是控制中心,
void CHappyBirthday_2Dlg::Control()
{
switch(Process)//如果等于1时,代表刚开始,隐藏按钮,开启定时器,
{
case 3:

Bitmap=IDB_BITMAP2;
Bitmap1=IDB_BITMAP3;
Bitmap2=IDB_BITMAP4;
Bitmap3=IDB_BITMAP1;

break;
case 4:

Bitmap=IDB_BITMAP4;
Bitmap1=IDB_BITMAP5;
Bitmap2=IDB_BITMAP6;
Bitmap3=IDB_BITMAP3;
break;
}


TurnPage=1200;

SetTimer(0x01,40,NULL);//开启计时器

//按钮的操作
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
SetDlgItemText(IDOK,"下一页");//改变按钮的显示文本
GetDlgItem(IDOK)->SetWindowPos(NULL,380,440,400,450,SWP_NOZORDER | SWP_NOSIZE);//设置按钮位置

Invalidate();//刷新背景
}


//处理最后的清理工作
void CHappyBirthday_2Dlg::KTimer(int nIDEvent)
{

KillTimer(nIDEvent);

bitmap.DeleteObject();
bitmap1.DeleteObject();
bitmap2.DeleteObject();
bitmap3.DeleteObject();

}



// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CHappyBirthday_2Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}


BOOL CHappyBirthday_2Dlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;

// return CDialog::OnEraseBkgnd(pDC);
}

void CHappyBirthday_2Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
}

最后都卡的厉害了
...全文
84 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoveForever_FeiFei 2015-02-19
  • 打赏
  • 举报
回复
没有释放内存,在每次调用后释放一次 http://hi.baidu.com/xyh2007/item/2761aff02f155d0cd89e72dc
CreScert 2015-02-19
  • 打赏
  • 举报
回复
找到原因了,是没有释放内存,在每次调用后释放一次 http://hi.baidu.com/xyh2007/item/2761aff02f155d0cd89e72dc

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧