Re: [問題] 如何用MFC實做一個情況:按鍵盤讓圖形移動

看板C_and_CPP (C/C++)作者 (鄉民)時間16年前 (2010/03/16 08:04), 編輯推噓2(207)
留言9則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《shorttime (鄉民)》之銘言: : 遇到的問題: (題意請描述清楚) : 我想要用MFC實作一種情況: : 假設存在一個幾何圖形 座標位於(0,0) : 現在我按下"→" : 這個圖形就往右移動 : 請問 這該如何實作呢? : 希望得到的正確結果: : (1)假設存在一個圖形 位於(0,0) : (2)按下鍵盤"→" : (3)此圖形消失了 : (4)新的圖形出現了 位於(0,1) : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) : MFC : 補充說明: : 我目前卡在的問題是 如何做到上述的(3) : 也就是不知道怎麼讓原本的圖形消失.... : 可否請知道的人指導一下 : 謝謝....

03/15 09:18,
你已經有部份程式碼了嗎?不妨貼上來看看
03/15 09:18

03/15 09:18,
如果還沒有寫,就先寫你能寫的部份,再貼上來討論吧
03/15 09:18

03/15 11:00,
3+4一起,把畫面重新畫成一個圖形在(0,1)的樣子就好
03/15 11:00
感謝兩位版友的答覆 不好意思...要如何做到把畫面重新畫成一個圖形在(0,1)的樣子呢? 我的問題是卡在沒辦法重新畫 因為我畫出了(0,1) 結果(0,0)的圖形卻還存在 這是我拙劣的程式碼(檔名:move_picture.cpp): #include <afxwin.h> #include "move_picture.h" CMyApp myApp; int X = 0; ///////////////////////////////////////////////////////////////////////// // CMyApp member functions BOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow (); return TRUE; } ///////////////////////////////////////////////////////////////////////// // CMainWindow message map and member functions BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) ON_WM_PAINT () ON_WM_KEYDOWN () END_MESSAGE_MAP () CMainWindow::CMainWindow () { Create(NULL,_T("move picture"),WS_OVERLAPPEDWINDOW); } void CMainWindow::OnPaint () { CPaintDC dc (this); DrawEllipse(&dc); //程式一開始執行時 先畫一個圓 } void CMainWindow::DrawEllipse (CDC* pDC) { //這個function是詳細定義如何畫圓 CPen pen (PS_SOLID, 16, RGB (0, 0, 0)); CPen* pOldPen = pDC->SelectObject (&pen); pDC->Ellipse(0,0,100,100); pDC->SelectObject (pOldPen); } void CMainWindow::OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags) { switch (nChar) { case VK_RIGHT: //如果按下鍵盤的"->" 就會執行此部份 // 會在原本右邊一點點的位置畫出一個新的圓     //但是原本位置的圓還是存在   X++; CClientDC dc (this); dc.Ellipse(0+X,0,100+X,100); break; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.18.69 ※ 編輯: shorttime 來自: 112.104.18.69 (03/16 08:05)

03/16 16:08, , 1F
你需要一個刷新的動作,像FillRect之類的
03/16 16:08, 1F

03/16 18:27, , 2F
意思是用FillRect之類的函式 把圖形變得跟背景顏色一樣
03/16 18:27, 2F

03/16 18:29, , 3F
嗎? 如果背景色是花花綠綠的話,那是否還可以可使用這個
03/16 18:29, 3F

03/16 18:29, , 4F
方法呢?
03/16 18:29, 4F

03/17 02:58, , 5F
把你的"畫布",全部塗成你要的背景色,顏色你自己決定,這樣
03/17 02:58, 5F

03/17 02:58, , 6F
就是一個刷新的動作,等於回到初始狀態,再重新畫上你的圖形
03/17 02:58, 6F

03/17 03:00, , 7F
你原本說的讓舊的圖形消失,就是要利用刷新
03/17 03:00, 7F

03/18 11:00, , 8F
謝謝你 我ok了
03/18 11:00, 8F

03/18 11:01, , 9F
謝謝樓上各位的指教
03/18 11:01, 9F
文章代碼(AID): #1BdiiISV (C_and_CPP)
文章代碼(AID): #1BdiiISV (C_and_CPP)