郵件已發送,郵箱地址是建。如果有不明白的,可以回復郵件,我會給妳詳細的評論。
利用圖像雙緩沖解決了圖像閃爍問題,實現了平滑運動。
h文件如下:
//?粒子Dlg.h?:?表頭?文件
//
#如果?!已定義(AFX _ DLG _ H _ _ 105 bfc 1D _ 4E0A _ 400 f _ 97BF _ e 8919e 51b 130 _ _ INCLUDED _)
#定義?AFX _ DLG _ H _ _ 105 bfc 1D _ 4E0A _ 400 f _ 97BF _ e 8919e 51b 130 _ _包含_
#如果?_MSC_VER?& gt?1000
#pragma?壹次
#endif?//?_MSC_VER?& gt?1000
/////////////////////////////////////////////////////////////////////////////
//?CMyDlg?對話
班級?CMyDlg?:?公共?CDialog
{
//?建築
公共:
CMyDlg(CWnd*?很明顯?=?NULL);?//?標準?構造器
//?對話?數據
//{{AFX_DATA(CMyDlg)
enum?{?國際直撥電話?=?IDD_MY_DIALOG?};
//?註意:?那個?ClassWizard?威爾。補充?數據?成員?這裏
//}}AFX_DATA
//?ClassWizard?生成的?虛擬的?功能?無視
//{{AFX_VIRTUAL(CMyDlg)
受保護:
虛擬的?作廢?DoDataExchange(CDataExchange*?pDX);?//?DDX/DDV?支持
//}}AFX_VIRTUAL
//?履行
受保護:
希康?m _ hIcon
//?生成的?留言?地圖?功能
//{{AFX_MSG(CMyDlg)
虛擬的?布爾?OnInitDialog();
afx_msg?作廢?OnSysCommand(UINT?nID?LPARAM?lParam);
afx_msg?作廢?OnPaint();
afx_msg?HCURSOR?OnQueryDragIcon();
afx_msg?作廢?OnTimer(UINT?nide vent);
afx_msg?作廢?OnBtnStart();
afx_msg?作廢?OnBtnStop();
//}}AFX_MSG
聲明消息映射()
};
//{{AFX_INSERT_LOCATION}}
//?微軟?視覺?C++?威爾。插入?附加?申報?立即?之前?那個?以前的?線。
#endif?//?!已定義(AFX _ DLG _ H _ _ 105 bfc 1D _ 4E0A _ 400 f _ 97BF _ e 8919e 51b 130 _ _ INCLUDED _)
CPP文件如下所示:
//?粒子Dlg.cpp?:?實施?文件
//
#包含?" stdafx.h "
#包含?“粒子。h "
#包含?"粒子Dlg.h "
#ifdef?_調試
#定義?新的?調試_新
# undef?這個文件
靜電?夏爾?THIS_FILE[]?=?_ _ FILE _ _
#endif
/////////////////////////////////////////////////////////////////////////////
//?CAboutDlg?對話?二手?為了什麽?App?關於
班級?CAboutDlg?:?公共?CDialog
{
公共:
CAboutDlg();
//?對話?數據
//{{AFX_DATA(CAboutDlg)
enum?{?國際直撥電話?=?IDD_ABOUTBOX?};
//}}AFX_DATA
//?ClassWizard?生成的?虛擬的?功能?無視
//{{AFX_VIRTUAL(CAboutDlg)
受保護:
虛擬的?作廢?DoDataExchange(CDataExchange*?pDX);//?DDX/DDV?支持
//}}AFX_VIRTUAL
//?履行
受保護:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
聲明消息映射()
};
CAboutDlg::CAboutDlg()?:?CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
作廢?CAboutDlg::DoDataExchange(CDATA exchange *?pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,?CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//?沒有嗎?留言?經理人
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//?CMyDlg?對話
CMyDlg::CMyDlg(CWnd*?很明顯?/*=NULL*/)
:?CDialog(CMyDlg::IDD,?(家長)
{
//{{AFX_DATA_INIT(CMyDlg)
//?註意:?那個?ClassWizard?威爾。補充?會員?初始化?這裏
//}}AFX_DATA_INIT
//?筆記?那個?LoadIcon?是嗎?不是嗎?要求?答?後續?DestroyIcon?在?Win32
m_hIcon?=?AfxGetApp()-& gt;load icon(IDR _ MAINFRAME);
}
作廢?CMyDlg::DoDataExchange(CDATA exchange *?pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
//?註意:?那個?ClassWizard?威爾。補充?DDX?然後呢。DDV?來電?這裏
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg,?CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BTN_START,?OnBtnStart)
ON_BN_CLICKED(IDC_BTN_STOP,?OnBtnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//?CMyDlg?留言?經理人
布爾?CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//?補充?“關於……”?菜單?物品?去哪?系統?菜單。
//?IDM_ABOUTBOX?必須?是嗎?在?那個?系統?指揮?範圍。
ASSERT((IDM_ABOUTBOX?& amp?0xFFF0)?==?IDM _ about box);
ASSERT(IDM_ABOUTBOX?& lt?0xf 000);
CMenu*?pSysMenu?=?getsystem menu(FALSE);
如果?(pSysMenu?!=?空)
{
CString?strAboutMenu
斯特拉布特菜單。LoadString(IDS _ about box);
如果?(!斯特拉布特菜單。IsEmpty())
{
pSysMenu-& gt;AppendMenu(MF _ SEPARATOR);
pSysMenu-& gt;AppendMenu(MF_STRING,?IDM_ABOUTBOX,?strAboutMenu);
}
}
//?設置?那個?圖標?為了什麽?這個?對話。那個?框架?是嗎?這個?自動地
//什麽時候?那個?應用程序的?主要?窗戶?是嗎?不是嗎?答?對話
SetIcon(m_hIcon,?真);?//?設置?大?圖標
SetIcon(m_hIcon,?假);//?設置?小?圖標
//?TODO:?補充?額外?初始化?這裏
回歸?真實;//?回歸?真的除非?妳呢。設置?那個?專註?去哪?答?控制
}
作廢?CMyDlg::OnSysCommand(UINT?nID?LPARAM?lParam)
{
如果?((nID?& amp?0xFFF0)?==?IDM_ABOUTBOX)
{
CAboutDlg?dlgAbout
dlgAbout。DoModal();
}
其他
{
CDialog::OnSysCommand(nID,?lParam);
}
}
//?如果?妳呢。補充?答?最小化?按鈕?去哪?妳的?對話框,?妳呢。威爾。需要?那個?代碼?在下面
//到?畫畫?那個?圖標。為了什麽?MFC?應用程序?使用?那個?文檔/視圖?型號,
//這個?是嗎?自動?完成了嗎?為了什麽?妳呢。被誰?那個?框架。
作廢?CMyDlg::OnPaint()?
{
如果?(IsIconic())
{
CPaintDC?dc(這個);?//?設備?語境?為了什麽?繪畫
SendMessage(WM_ICONERASEBKGND,(WPARAM)?華盛頓。GetSafeHdc(),?0);
//?中心?圖標?在?客戶?矩形
int?cxIcon?=?GetSystemMetrics(SM _ CXICON);
int?cyIcon?=?getsystem metrics(SM _ CYICON);
CRect?rect
GetClientRect(& amp;rect);
int?x?=?(rect。Width()?-?cxIcon?+?1)?/?2;
int?y?=?(rect。身高()?-?cyIcon?+?1)?/?2;
//?畫畫?那個?圖標
華盛頓。DrawIcon(x,y,?m _ hIcon);
}
其他
{
CDialog::OnPaint();
}
}
//?那個?系統?來電?這個?去哪?獲得?那個?光標?去哪?展示?什麽時候?那個?用戶?錠模列車
//the?最小化?窗戶。
HCURSOR?CMyDlg::OnQueryDragIcon()
{
回歸?(HCURSOR)?m _ hIcon
}
#包含?& ltmath.h & gt
作廢?CMyDlg::OnTimer(UINT?nIDEvent)?
{
//?TODO:?補充?妳的?留言?漢德勒?代碼?這裏嗎?和/或?打電話?系統默認值
CBrush?Brush1,Brush2,Brush3
刷1。CreateSolidBrush(RGB(0,0,0));
畫筆2。CreateSolidBrush(RGB(0,255,0));
CBrush?* Pb rush 3 = CB rush::from handle((HBRUSH)get stock object(NULL _ BRUSH));
CPen?pen1(0,1,RGB(0,0,0));
CPen?pen2(0,2,RGB(0,255,0));
CClientDC?* pDC =新?CClientDC(這個);
int?寬度= 450;
int?身高= 200;
疾控中心?m _ dcCompatible
m _兼容。CreateCompatibleDC(pDC);
CBitmap?位圖;
位圖。CreateCompatibleBitmap(pDC,width,height);
m _兼容。選擇對象(& amp位圖);
m _兼容。select object(brush 1);
m _兼容。select object(pen 1);
m _兼容。矩形(0,0,寬度,高度);
m _兼容。select object(pen 2);
//繪制正弦曲線
int?x = 0;
int?y = 0;
m _兼容。MoveTo(0,100);
for(x = 0;x & lt450;x++)
{
y = sin(x/30.0)* 80+100;
m _兼容。LineTo(x,y);
}
//繪制壹個粒子
靜電?int?pos = 0;
m _兼容。select object(brush 2);
int?YY = sin(pos/30.0)* 80+100;
m _兼容。橢圓(位置-10,yy-10,位置+10,YY+10);
pos++;
pos % = 450
pDC->;BitBlt(0,0,寬度,高度和大小;m_dcCompatible,0,0,src copy);
m _兼容。DeleteDC();
pDC->;DeleteDC();
CDialog::on timer(nIDEvent);
}
作廢?CMyDlg::OnBtnStart()?
{
//?TODO:?補充?妳的?控制?通知?漢德勒?代碼?這裏
SetTimer(1,30,NULL);
}
作廢?CMyDlg::OnBtnStop()?
{
//?TODO:?補充?妳的?控制?通知?漢德勒?代碼?這裏
kill timer(1);
}