當前位置:編程學習大全網 - 編程語言 - 請vc++專家幫助制作粒子沿正弦曲線運動的動畫。

請vc++專家幫助制作粒子沿正弦曲線運動的動畫。

先寫好發給妳?留下壹封電子郵件給妳發送完整的項目。

郵件已發送,郵箱地址是建。如果有不明白的,可以回復郵件,我會給妳詳細的評論。

利用圖像雙緩沖解決了圖像閃爍問題,實現了平滑運動。

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

}

  • 上一篇:為何現在越來越多的男生開始學計算機專業?
  • 下一篇:最搞笑的10部動畫
  • copyright 2024編程學習大全網