久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當前位置:首頁>時尚>vc開發環境設計圖(VC設計漂亮界面)

vc開發環境設計圖(VC設計漂亮界面)

發布時間:2024-09-18閱讀(16)

導讀1.2.2構造和析構CDC對象voidCMyView::MyFunction(),下面我們就來說一說關于vc開發環境設計圖?我們一起去了解并探討一下這個問題....

1.2.2構造和析構CDC對象void CMyView::MyFunction(),下面我們就來說一說關于vc開發環境設計圖?我們一起去了解并探討一下這個問題吧!

vc開發環境設計圖(VC設計漂亮界面)

vc開發環境設計圖

vc 圖形編程基礎 轉載

1.2.2構造和析構CDC對象

void CMyView::MyFunction()

{.......

CRect rect;

CClientDC dc(this);

dc.GetClipBox(rect);

.............

}

or

void CMyView::MyFunction()

{.......

CRect rect;

CDC* pDC=GetDC();

pDC->GetClipBox(rect);

.......

ReleaseDC(pDC);

}

1.3設備環境中的坐標映射

顯示器的邏輯尺寸和物理尺寸

設備坐標,邏輯坐標和物理坐標

映射模式:1.

MM_TEXT映射模式

*************************************************************************************************************

『VC 技術內幕』學習筆記(6)

第六篇:映射模式  在此篇之前我們已經學會了在窗口顯示圖形,更準確的說是在窗口指定位置顯示圖形或文字,我們使用的坐標單位是象素,稱之為設備坐標。看下面語句:pDC->Rectangle(CRect(0,0,200,200));  畫一個高和寬均為200個象素的方塊,因為采用的是默認的MM_TEXT映射模式,所以在設備環境不一樣時,畫的方塊大小也不一樣,在1024*768的顯示器上看到的方塊會比640*480的顯示器上的小(在不同分辨率下的屏幕象素,在WINDOWS程序設計一書中有示例程序可以獲得,或者可以用GetClientRect函數獲得客戶區的矩形大小。在這里就不說了,大家只要知道就行了),在輸出到打印機時也會有類似的情況發生。如何做才能保證在不同設備上得到大小一致的方塊或者圖形、文字呢?就需要我們進行選擇模式映射,來轉換設備坐標和邏輯坐標。Windows提供了以下幾種映射模式:MM_TEXTMM_LOENGLISHMM_HIENGLISHMM_LOMETRICMM_HIMETRICMM_TWIPSMM_ISOTROPICMM_ANISOTROPIC下面分別講講這幾種映射模式:MM_TEXT:  默認的映射模式,把設備坐標被映射到象素。x值向右方向遞增;y值向下方向遞增。坐標原點是屏幕左上角(0,0)。但我們可以通過調用CDC的SetViewprotOrg和SetWindowOrg函數來改變坐標原點的位置看下面兩個例子://************************************************// 例子6-1void CMyView::OnDraw(CDC * pDC){pDC->Rectangle(CRect(0,0,200,200));//全部采用默認畫一個寬和高為200象素的方塊}//**************************************************// 例子6-2void CMyView::OnDraw(CDC * pDC){pDC->SetMapMode(MM_TEXT);//設定映射模式為MM_TEXTpDC->SetWindowOrg(CPoint(100,100));//設定邏輯坐標原點為(100,100)pDC->Rectangle(CRect(100,100,300,300));//畫一個寬和高為200象素的方塊}  這兩個例子顯示出來的圖形是一樣的,都是從屏幕左上角開始的寬和高為200象素的方塊,可以看出例子2將邏輯坐標(100,100)映射到了設備坐標(0,0)處,這樣做有什么用?滾動窗口使用的就是這種變換。

固定比例映射模式:MM_LOENGLISH、MM_HIENGLISH、MM_LOMETRIC、MM_HIMETRIC、MM_TWIPS這一組是Windows提供的重要的固定比例映射模式。它們都是x值向右方向遞增,y值向下遞減,并且無法改變。它們之間的區別在于比例因子見下:(我想書上P53頁肯定是印錯了,因為通過程序實驗x值向右方向也是遞增的)

MM_LOENGLISH 0.01英寸MM_HIENGLISH 0.001英寸MM_LOMETRIC 0.1mmMM_HIMETRIC 0.01mmMM_TWIPS 1/1440英寸 //應用于打印機,一個twip相當于1/20磅,一磅又相當于1/72英寸。看例3

//**************************************************// 例子6-3void CMyView::OnDraw(CDC * pDC){pDC->SetMapMode(MM_HIMETRIC);//設定映射模式為MM_HIMETRICpDC->Rectangle(CRect(0,0,4000,-4000));//畫一個寬和高為4厘米的方塊}  還有一種是可變比例映射模式,MM_ISOTROPIC、MM_ANISOTROPIC。用這種映射模式可以做到當窗口大小發生變化時圖形的大小也會相應的發生改變,同樣當翻轉某個軸的伸展方向時圖象也會以另外一個軸為軸心進行翻轉,并且我們還可以定義任意的比例因子,怎么樣很有用吧。MM_ISOTROPIC、MM_ANISOTROPIC兩種映射模式的區別在于MM_ISOTROPIC模式下無論比例因子如何變化縱橫比是1:1而M_ANISOTROPIC模式則可以縱橫比獨立變化。讓我們看例子4

//**************************************************// 例子6-4void CMy002View::OnDraw(CDC* pDC){CRect rectClient; //GetClientRect(rectClient);//返回客戶區矩形的大小pDC->SetMapMode(MM_ANISOTROPIC);//設定映射模式為MM_ANISOTROPICpDC->SetWindowExt(1000,1000);pDC->SetViewportExt (rectClient.right ,-rectClient.bottom );//用SetWindowExt和SetViewportExt函數設定窗口為1000邏輯單位高和1000邏輯單位寬pDC->SetViewportOrg(rectClient.right/2,rectClient.bottom/2 );//設定邏輯坐標原點為窗口中心pDC->Ellipse(CRect(-500,-500,500,500));//畫一個撐滿窗口的橢圓。// TODO: add draw code for native data here}怎么樣,屏幕上有一個能跟隨窗口大小改變而改變的橢圓。把 pDC->SetMapMode(MM_ANISOTROPIC);這句改為pDC->SetMapMode(MM_ISOTROPIC)會怎樣?大家可以試試。那還有一個問題就是上例的比例因子是多少呢?看下面公式(注意是以例子4為例的)x比例因子=rectClient.right/1000 //視窗的寬除以窗口范圍y比例因子=-rectClient.bottom/1000 //視窗的高除以窗口范圍  從Windows的鼠標消息可以獲得鼠標指針的當前坐標值(point.x和point.y)此坐標值是設備坐標。很多MFC庫函數尤其是CRect的成員函數只能工作在設備坐標下。還有我們有時需要利用物理坐標,物理坐標的概念就是現實世界的實際尺寸。設備坐標-邏輯坐標-物理坐標之間如何進行轉換便成為我們要考慮的一個問題,物理坐標和邏輯坐標是完全要我們自己來做的,但WINDOWS提供了函數來幫助我們轉換邏輯坐標和設備坐標。CDC的LPtoDP函數可以將邏輯坐標轉換成設備坐標CDC的DPtoLP函數可以將設備坐標轉換成邏輯坐標下面列出我們應該在什么時候使用什么樣的坐標系一定要記住:◎CDC的所有成員函數都以邏輯坐標為參數◎CWnd的所有成員函數都以設備坐標為參數◎區域的定義采用設備坐標◎所有的選中測試操作應考慮使用設備坐標。◎需要長時間使用的值用邏輯坐標或物理坐標來保存。因設備坐標會因窗口的滾動變化而改變。用書上的例子作為以前幾篇的復習,如果你能夠獨立完成它說明前面的內容已經掌握。另外有些東西是新的,我會比較詳細的做出說明,例如客戶區、滾動窗口等。

"可變比例”映射模式

歡迎分享轉載→http://www.avcorse.com/read-426411.html

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖