[問題] 類似小畫家的縮放功能(不是圖片)

看板C_Sharp (C#)作者 (= =)時間11年前 (2014/04/22 23:40), 11年前編輯推噓1(106)
留言7則, 4人參與, 最新討論串1/1
各位板友晚安, 我以前是唸資工的,不過C#算是自學, 最近因為幫忙做東西,需要撰寫類似小畫家的功能,但不太一樣, 簡單的說,我用windows form來實作, 把panel加到form裡面,使用者可以新增/刪除一些特定的textbox、label, 或者是我動態產生的image(一樣動態產生picturebox來顯示), 前面這三類的control會動態add至panel裡面, 但是這個panel的尺寸比例是有限制的,width比height長很多, 實際上我最終的目的是把 「已經新增各種control的panel印出來」, 我的做法其實是比較偷懶的直接把panel轉成bitmap, 這樣的方法其實是把panel所在的螢幕區域截圖, 所以這個部分無法讓panel用scroll bar來顯示(隱藏的部分截不到) ----------前面大概簡介一下情況,以下是主要問題----------- 由於我panel尺寸的寬比高長很多,因此我想要像小畫家一樣, 實際畫布(panel)尺寸不變,但使用者的視覺上(view?)能縮放, 請參考以下小畫家畫面: http://i.imgur.com/qxqcV7o.png
這是小畫家「檢視」中的「放大」和「縮小」功能, 可以看到這樣的縮放僅是視覺上可以把原本很大(可能大於螢幕解析度) 的畫布縮小到螢幕可見範圍, 滑鼠游標在畫布上移動時,左下角顯示的座標範圍仍舊跟原始畫布一樣, 這個功能我找了很久都不知道該怎麼實現,找到的資料幾乎都是討論 Form、image的縮放,我如果用panel.scale()來做的話, 是直接改變實際上panel的大小(利用滑鼠移動時顯示座標也看的出來), 我後來找了paint.net的source code來參考, 但是在轉換版本(我用VS2010)時因為有些檔案找不到而失敗, 直接看程式碼來trace的話,因為他很多都是自定控制項, 我追了半天還是不懂他到底是怎麼做的, 其他找到的小畫家範例都沒有看到這個功能, 不曉得有沒有哪位前輩知道我應該往哪個方向去找線索呢? 希望各位不吝賜教,感激不盡! -- ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1398181231.A.4DB.html

04/23 01:21, , 1F
您是要看.NET元件的原始碼? 推薦Red Gate .NET Reflector
04/23 01:21, 1F

04/23 01:21, , 2F
或是IL Spy 另外我記得有個網站也可以看
04/23 01:21, 2F

04/24 01:11, , 3F
坐標轉換
04/24 01:11, 3F
你好,感謝你的回應,如果只是要做到panel大小不變, 但是游標移動上去時顯示的不是真實座標而是縮小後的相對座標, 單純這樣的話我應該想得出來沒有問題, 不過我卡關的癥結點是: 小畫家在我用「Ctrl+滾輪」或者「檢視中的縮放」(同樣功能)的時候, 發生的改變是 「畫布在視覺上進行縮放,但是畫布的實際大小是沒有變的」 應該說我不了解的核心是這個部分,不曉得我這樣說明我的情況是否能讓你看得懂?

04/24 09:21, , 4F
樓上解答
04/24 09:21, 4F
※ 編輯: CaMper8850 (114.42.230.139), 04/24/2014 11:43:41

04/24 16:27, , 5F
所以顯示的部分本來就應該單獨拉出來根據顯示比例重畫
04/24 16:27, 5F

04/24 16:28, , 6F
一樣是座標轉換的概念而已。
04/24 16:28, 6F

05/01 23:05, , 7F
Graphics.InterpolationMode 屬性(System.Drawing) 參考
05/01 23:05, 7F
文章代碼(AID): #1JLerlJR (C_Sharp)
文章代碼(AID): #1JLerlJR (C_Sharp)