Re: [問題] 用win32 api 寫類似小畫家的程式問題

看板C_and_CPP (C/C++)作者 (無聊的書)時間10年前 (2015/07/07 17:31), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《greenlinux (GreenLinux)》之銘言: : Visual C++ (Win32 api) : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : Visual C++ (Win32 api) : 問題(Question): : 寫一個類似 小畫家的程式. 但我發現在畫線時,用 invalidate()重畫只會 : 畫出這次要畫的線段, 之前的線段會不見 : 例如: 若線段上有 (x0, y0)連到 (x1, y1) 再連到 (x2, y2) --> (x3, y3) : 但每次只出現: (x0, y0) --> (x1, y1) : 下一時間只出現:(x1, y1) --> (x2, y2); : (x0, y0) --> (x1, y1)那段不見了.. : 我的code 大致上是: : http://paste.plurk.com/show/2198891/ : 請各位協助.. 希望能連在一起, : 難道真的要將所有的點都存起來, 然後每次重畫時都要 : 從 第0點畫到第N點, : 下一刻就要從第0點畫到第N+1點??? : 謝謝... 我本來以為她是畫到暫存區然後再畫到顯示的hdc 後來仔細看根本錯了 ReleaseDC(hWnd, memDC); BitBlt(hdc, 0,0, client.right, client.bottom, memDC, 0,0, SRCCOPY); 都releaseDC下面的程式怎麼可能有反應 MoveToEx(hdc, X, Y, NULL); 他的線都劃在顯示的hdc上這種是無法暫存的 這程式問題很大 正確寫法應該把 if (!memDC) { memDC = CreateCompatibleDC(hdc); hMemBmp = CreateCompatibleBitmap(hdc, client.right, client.bottom); hOldBmp = (HBITMAP)SelectObject(memDC, hMemBmp); HBRUSH backgroundBrush = CreateSolidBrush(RGB(200,200,200)); FillRect(memDC, &client, backgroundBrush);//整片塗掉只能跑一次不然畫面就被蓋過 } 下面不能砍掉memDC hMemBmp 在WM_DESTROY 在砍掉 然後所有畫到hdc都改畫到memDC 這樣就可達到效果了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.70.82 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1436261479.A.929.html

07/09 15:00, , 1F
謝謝您..
07/09 15:00, 1F
文章代碼(AID): #1Lcvndaf (C_and_CPP)
文章代碼(AID): #1Lcvndaf (C_and_CPP)