çªå£åè§å£
1.çªå£æ¯åºäºé»è¾åæ ç.
2.è§å£æ¯åºäºè®¾å¤åæ .
3.设å¤åæ æ¯ä»¥åç´ ä¸ºåä½ç,é»è¾åæ æ¯ä»¥.cm,m,mm,.....
4.ç³»ç»æåä¸å®è¦æé»è¾åæ å为设å¤åæ .
5.设å¤åæ æ3ç§: a.GetDC() 客æ·åºåæ . b.GetWindowDC().çªå£åæ . c.GetDC(NULL)ï¼or CreateDC().å±å¹åæ . è®°ä½ä¸¤ä¸ªååï¼
1.æ»æ¯ç±çªå£åç¹æ å°ä¸ºè§å£åç¹ãå³æ è®ºä½ çªå£çåç¹åè§å£çåç¹æä¹åï¼çªå£çåç¹æ»æ¯æ å°å°è§å£çåç¹ã(è®°ä½ï¼æ å°æ¹åæ¯çªå£å°è§å£ï¼èä¸æ¯è§å£åçªå£æ å°)
2.ä¸ç®¡å©ç¨å½æ°(å¦:SetViewportOrgExtåSetWindowOrgEx)对çªå£åè§å£çåç¹åæä¹æ¹åï¼è®¾å¤ç¹(0,0)å§ç»æ¯å®¢æ·åºçå·¦ä¸è§ãç»å¾æä½åªè½å¨å®¢æ·åºä¸è¿è¡ãé¤å®¢æ·åºä»¥å¤çé¨åé½å«é客æ·åº
å¨ Windowsçä½å¾å½æ°ä¸ï¼æ¶åé»è¾åæ å°è®¾å¤åæ ç转æ¢ãè¿éæå°ççªå£ï¼windowï¼ãè§å£(viewport)æ¯å¯¹åºçæ¦å¿µãè§å£æ¯ä¸è®¾å¤ç¸å
³çä¸ä¸ªç©å½¢åºåï¼åæ åä½æ¯ä¸è®¾å¤ç¸å
³çãçªå£çåæ æ¯é»è¾åæ ï¼ä¸è®¾å¤æ å
³ãçªå£åæ çåç¹ä¸è§å£åæ çåç¹å§ç»å¯¹åºäºåä¸ç¹ãçªå£åç¹æ¯ä¸è§å£åç¹ç¸åçï¼ï¼ä¹å°±æ¯è¯´ï¼ä½äºå±å¹ä¸çåä¸ä¸ªä½ç½®ï¼ï¼ä¸ºäºä½ä¼ä¸çªå£åæ ä¸è§å£åæ ç转æ¢ï¼å
ç¨SetwindowtOrg(100, -300)å°çªå£ç§»å°(100,-300)ï¼è¿ç¸å½äºæ é»è¾ç¹(100,-300)æ å°å°è®¾å¤ç¹ï¼0,0ï¼ï¼æ³¨æï¼å¦ææ¹ç¨SetviewportOrg移å¨åç¹ï¼åå
¶åç¹ç移å¨å°ºå¯¸ä¸æ å°æ¨¡å¼æ å
³ï¼å
¶300个é¿åº¦åä½çäº9åç±³ï¼(注ï¼è¿ä¸ªè®¾å¤ç¹ä¹æ¯ç¸å¯¹äºå½åçDCèè¨ï¼å¦æå½åçDCæ¯æ´ä¸ªå±å¹ï¼é£ä¹è®¾å¤ç¹ï¼100ï¼-300ï¼çåç¹å°±å¨å±å¹çå·¦ä¸è§ï¼å¦æå½åçDCæ¯æ个åºç¨ç¨åºç客æ·åºï¼é£ä¹è®¾å¤ç¹ï¼100ï¼-300ï¼çåç¹å°±æ¯åºç¨ç¨åºç客æ·åºçå·¦ä¸è§ï¼)ç°å¨å设å½åDCæ¯æ个åºç¨ç¨åºç客æ·åºï¼æ å°æ¨¡å¼ä¸º MM_LOMETRIC
(å¨è¿ç§æ å°æ¨¡å¼ä¸ï¼è®¾å¤åæ 以0.1 毫米为ä¸ä¸ªé¿åº¦åä½,Yè½´çæ£æ¹å为åä¸ï¼ä¹å°±æ¯è¯´ï¼å±å¹ä¸çå·¦ä¸è§çYåæ 为0,ä¸é¢çYåæ åå°äº0),å½ä½¿ç¨è¯å¥ï¼MoveTo(100,-600);
LineTo(100,-800);//Yè½´è´æ¹ååä¸ï¼æ以ç¨è´å¼è¿è¡ç»å¾æ¶ï¼å®ç转æ¢è¿ç¨å¦ä¸ï¼
1)çªå£ä¸è§å£åæ 转æ¢ï¼ç±äºçªå£åæ ï¼100,-300 ),æ å°ä¸ºè®¾å¤åæ ï¼0,0ï¼,æ 以
çªå£(100,-600)æ å°ä¸ºè§å£(0,-300)
çªå£(100,-800)è§æ å°ä¸ºè§å£(0,-500)2)é»è¾ä¸è®¾å¤åæ 转æ¢
ç±äºæ¯ MM_LOMETRIC æ å°æ¨¡å¼ï¼è®¾å¤åæ çåä½é¿åº¦ä¸º 0.1mmï¼èå¨è¾åºæ¶ç¨çæ¯è§å£åæ ï¼æ以è§å£åæ ï¼100ï¼-600ï¼è¾åºå°å±å¹ä¸æ¶ï¼è¯¥ç¹çä½ç½®
è·å®¢æ·åºå·¦è¾¹ 0 åç±³ï¼è·å®¢æ·åºä¸è¾¹ 3åç±³ãè¿å°±æ¯ç´çº¿çèµ·ç¹ï¼
åæç´çº¿ç»ç¹çè§å£åæ (100ï¼-800ï¼è¾åºå°è·å®¢æ·åºå·¦è¾¹0åç±³ï¼è·å®¢æ·åºä¸è¾¹ 5åç±³å¤ã对äºåä¸ä¸ªå¾å½¢ï¼ç¨çªå£åæ ç³»ç»è¡¨è¾¾ç该åºåçé¿å宽ä¸è§å£çåæ ç³»ç»è¡¨è¾¾çé¿å宽æ¯ä¸åçãäºè
å°±å®ä¹äºè¿ä¸¤ä¸ªåæ ç³»ç»çæ¯ä¾å
³ç³»ãç¨åºä½å¾æ¶ï¼ä½¿ç¨çåæ æ»æ¯æ¯çªå£åæ ãèå®é
çæ¾ç¤ºæè¾åºè®¾å¤å´åæèªå·±çåæ ãä¾å¦ï¼æçæå°æºè®¾å¤æ°´å¹³ååç´å辨çä¸åï¼å
¶è±¡ç´ å®é
ä¸æ¯é¿æ¹å½¢ãç¨åºç¼åç»ä¸ä¸ªåï¼è¥ä¸ç»ä»»ä½åæ 转æ¢ï¼å¨æå°æºä¸è¾åºçå°±æ¯ä¸ªæ¤åãä¸é¢ç¨åºç¤ºèäºå¦ä½å°çªå£é»è¾åæ çx,yåè±¡ç´ å®½åº¦åæ å°ä¸ºè¾åºè®¾å¤ä¸ç 1/64 è±å¯¸ã
[code]
SetMapMode(hDC, MM_ISOTROPIC);
SetWindowExtEx(hDC, 64, 64, NULL);
SetViewportExtEx(hDC, GetDeviceCaps(hDC, LOGPIXELSX),
GetDeviceCaps(hDC, LOGPIXELSY), NULL);
[/code]
è°ç¨SetWindowExt()å½æ°åï¼ç´§æ¥çåºè°ç¨SetViewportExt()å½æ°ï¼å®çä»»å¡æ¯è§å®æ°´å¹³ååç´åæ è½´çåä½ãå¯ä»¥è¿æ ·è®¤ä¸ºï¼SetWindowExt()å½æ°å¯¹åºçâçªå£âï¼SetViewportExt()å½æ°å¯¹åºçâè§å£âãå ç¹:
1.çªå£æ¯åºäºé»è¾åæ ç.
2.è§å£æ¯åºäºè®¾å¤åæ .
3.设å¤åæ æ¯ä»¥åç´ ä¸ºåä½ç,é»è¾åæ æ¯ä»¥.cm,m,mm,.....
4.ç³»ç»æåä¸å®è¦æé»è¾åæ å为设å¤åæ .
5.设å¤åæ æ3ç§:
a.GetDC() 客æ·åºåæ .
b.GetWindowDC().çªå£åæ .
c.GetDC(NULL),or CreateDC() .å±å¹åæ .
é®é¢å¦ä¸ï¼
void CMyView::OnDraw(CDC *pDC)
{
...
(1):pDC->SetMapMode(MM_ISOTROPIC);
(2):pDC->SetWindowExt(4000,3000);
(3):AfxGetMainWnd()->GetClientRect(cRect);
(4):pDC->SetViewportExt(cRect.Width(),-cRect.Height());
(5):pDC->DPtoLP(cRect);
(6):pDC->SetWindowOrg(-(cRect.Width()/2),-(cRect.Height()/2));
(7):pDC->TextOut(-850,1400,"abc");
...
}第ä¸å¥ï¼å®ä¹é»è¾åä½åå
·ä½ç设å¤åä½çæ å°æ¨¡å¼
第äºå¥ï¼è®¾ç½®ä¸è®¾å¤ä¸ä¸æå
³èççªå£çXåYåæ çèå´ãå
¶ä¸4000å3000æ¯é»è¾åæ ãæ¤æ¶çªå£å¤§å°ä¸ºï¼4000ï¼3000ï¼ï¼è§å£å¤§å°æªç¥ã
第ä¸å¥ï¼å¾å°å®¢æ·åºå°ºå¯¸ãæ¤å°ºå¯¸å°±æ¯å½åè§å£å°ºå¯¸ãå¦æï¼800ï¼600ï¼ï¼å¨æ大åæ¶æ¤å°ºå¯¸ä¸º(800,5XX).
第åå¥ï¼è®¾ç½®è§å£çèå´ï¼ç¬¬äºä¸ªåæ°ä¸ºè´æ°ï¼è¡¨ç¤ºè§å£åæ å¾ä¸ç§»äºcRecté«åº¦çä¸åã
第äºå¥ï¼å°è®¾å¤åæ 转æ¢æé»è¾åæ ãå 为GetClientRectå¾å°ç设å¤åæ
第å
å¥ï¼è®¾ç½®è®¾å¤ä¸ä¸æçªå£çèµ·å§åæ ã
æåä¸å¥ï¼å¨ç¬¬å
å¥çåºç¡ä¸ï¼å¨é»è¾åæ ä½ç½®è¾åºææ¬abc. è®°ä½ä¸¤ä¸ªååï¼
1.æ»æ¯ç±çªå£åç¹æ å°ä¸ºè§å£åç¹ãå³æ è®ºä½ çªå£çåç¹åè§å£çåç¹æä¹åï¼çªå£çåç¹æ»æ¯æ å°å°è§å£çåç¹ã(è®°ä½ï¼æ å°æ¹åæ¯çªå£å°è§å£ï¼èä¸æ¯è§å£åçªå£æ å°)
2.ä¸ç®¡å©ç¨å½æ°(å¦:SetViewportOrgExtåSetWindowOrgEx)对çªå£åè§å£çåç¹åæä¹æ¹åï¼è®¾å¤ç¹(0,0)å§ç»æ¯å®¢æ·åºçå·¦ä¸è§ã
ç°å°å
¶å
³é®ç¹å½çº³å¦ä¸ï¼
1ã è§å£çå客æ·åºï¼ä½¿ç¨è®¾å¤åæ ã
2ã çªå£ä¸è§å£ä¸ºåä¸åºåï¼ä½ä½¿ç¨é»è¾åæ ã
3ã çªå£ä¸è§å£ä½¿ç¨ä¸åçåæ ç³»ï¼ä½æ¯ä¸¤å¥åæ ç³»çåç¹å§ç»ä¸ºåä¸ç¹ãä½è¯¥ç¹åæ ï¼ä¸ç®¡æ¯è§å£åæ åç¹è¿æ¯çªå£åæ åç¹ï¼ä¸ä¸å®ä¸ºï¼0ï¼0ï¼ã
4ã åæ ç¹çä½ç½®ï¼ç¸å¯¹äºå®¢æ·åºå·¦ä¸è§ï¼ä»
ä»
ç±SetViewportOrgEx (x,y) å½æ°æ¥ç§»å¨ï¼x,yç¸å¯¹äºå®¢æ·åºå·¦ä¸è§ç设å¤åæ ï¼å³åç´ ï¼ï¼èSetWindowOrgExï¼x,yï¼ä»
ä»
设置该åç¹ä½ä¸ºçªå£åæ åç¹æ¶æ对åºçé»è¾åæ 为ï¼xï¼yï¼ï¼èä¸ä¼æ¹åå
¶ç¸å¯¹äºå®¢æ·åºå·¦ä¸è§çä½ç½®ã
5ã ç解çªå£ä¸è§å£çåæ 转æ¢å
¬å¼ï¼
Xviewport=ï¼Xwindow-Xwinorgï¼* Xviewext / Xwinext + Xvieworgï¼
Yviewport=ï¼Ywindow-Xwinorgï¼* Yviewext / Ywinext + Yvieworgï¼
æ¤å
¬å¼åçä¸å»ä¸å¥½ç解ï¼åå½¢å¦ä¸ï¼
ï¼Xviewport-Xvieworgï¼/ï¼Xwindow-Xwinorgï¼= Xviewext / Xwinextï¼
ï¼Yviewport-Yvieworgï¼/ï¼Ywindow-Xwinorgï¼= Yviewext / Ywinextï¼
å¦æ¤å°±å¾å¥½ç解äºï¼åºäºä¸è¿°1ã2ã3ç¹ï¼å¨è¿ä¸ªåºåçä»»æä¸ç¹å°åç¹çè·ç¦»ä¹æ¯ï¼å°±æ¯å
¶é»è¾åæ åä½ä¸è®¾å¤åæ åä½çæ¯ï¼å³æ¯ä¾å åã
6ã 对äºå®ä¹ç客æ·åºå大äºç¨åºæå建ççªå£æ¶ï¼å°±éè¦ææ»å¨æ¡æ¥æ»å¨æ¾ç¤ºï¼æè½æ¾ç¤ºå®æ´ç客æ·åºåã
7ã å¤çæ»å¨çªå£ï¼å设æªæ»å¨çªå£æ¶ï¼å®¢æ·åºå·¦ä¸è§å¯¹åº çªå£åè§å£çåç¹åæ ï¼ä¸é»è®¤å为(0,0), å¦ææ»å¨çªå£æ¶ï¼æ°´å¹³æ¹ååå³æ»å¨äºX个åç´ ï¼åç´æ¹ååä¸æ»å¨äºY个åç´ ï¼ååºè¯¥è®¤ä¸ºå®¢æ·åºåçå·¦ä¸è§ä¸ºçªå£åç¹ï¼åæ¶ä¹æ¯è§å£åç¹ï¼ä¸èµ·æ»å¨ï¼å¹¶ä¸çªå£åç¹çåæ å§ç»ä¸ºï¼0ï¼0ï¼ä¸åï¼ä½æ¯è§å£çåç¹æå½±å°çåæ åºè¯¥åçååï¼ä¸ä¸ºï¼-X,-Yï¼ãå¯ä»¥éè¿SetViewportOrgEx (-X,-Y)ãéè¿è°è¯MFCä¸CSrollViewç±»å½æ°ï¼åç°ï¼å®å°±æ¯éè¿SetViewportOrgEx (X,Y)å½æ°æ¹åè§å£çåæ åç¹æ¥å®ç°çªå£çæ»å¨ã
8ã åæ åç¹ï¼ä¸è®ºæ¯è§å£è¿æ¯çªå£ï¼ä¸çäºåæ é¶ç¹ï¼å¿
éæç½ï¼ã
9ãè§å£çåæ åç¹å¯ä»¥ä»»æ移å¨ï¼ä½å
¶é¶ç¹å§ç»å¨å®¢æ·åºå·¦ä¸è§ã
10ãçªå£åç¹åé¶ç¹åå¯ä»»æ移å¨ã
ä¸æ£ç¡®ä¹å¤ï¼æ¬¢è¿åä½é«æææ£ï¼å¨ Windows çä½å¾å½æ°ä¸ï¼æ¶åé»è¾åæ å°è®¾å¤åæ ç转æ¢ãè¿éæå°ççªå£ï¼windowï¼ãè§å£(viewport)æ¯å¯¹åºçæ¦å¿µãè§å£æ¯ä¸è®¾å¤ç¸å
³çä¸ä¸ªç©å½¢åºåï¼åæ åä½æ¯ä¸è®¾å¤ç¸å
³çãçªå£çåæ æ¯é»è¾åæ ï¼ä¸è®¾å¤æ å
³ãçªå£åæ çåç¹ä¸è§å£åæ çåç¹å§ç»å¯¹åºäºåä¸ç¹ã对äºåä¸ä¸ªå¾å½¢ï¼ç¨çªå£åæ ç³»ç»è¡¨è¾¾ç该åºåçé¿å宽ä¸è§å£çåæ ç³»ç»è¡¨è¾¾çé¿å宽æ¯ä¸åçãäºè
å°±å®ä¹äºè¿ä¸¤ä¸ªåæ ç³»ç»çæ¯ä¾å
³ç³»ãç¨åºä½å¾æ¶ï¼ä½¿ç¨çåæ æ»æ¯æ¯çªå£åæ ãèå®é
çæ¾ç¤ºæè¾åºè®¾å¤å´åæèªå·±çåæ ãä¾å¦ï¼æçæå°æºè®¾å¤æ°´å¹³ååç´å辨çä¸åï¼å
¶è±¡ç´ å®é
ä¸æ¯é¿æ¹å½¢ãç¨åºç¼åç»ä¸ä¸ªåï¼è¥ä¸ç»ä»»ä½åæ 转æ¢ï¼å¨æå°æºä¸è¾åºçå°±æ¯ä¸ªæ¤åãä¸é¢ç¨åºç¤ºèäºå¦ä½å°çªå£é»è¾åæ çx,yåè±¡ç´ å®½åº¦åæ å°ä¸ºè¾åºè®¾å¤ä¸ç 1/64 è±å¯¸ã
SetMapMode(hDC, MM_ISOTROPIC);
SetWindowExtEx(hDC, 64, 64, NULL);
SetViewportExtEx(hDC, GetDeviceCaps(hDC, LOGPIXELSX),
GetDeviceCaps(hDC, LOGPIXELSY), NULL);æè°è§å£ä»£è¡¨è®¾å¤ï¼æ¯å¦å±å¹ã
çªå£ä»£è¡¨æ们çæç»´ã
æ们对windows说å¨ï¼5ï¼6ï¼å¤ç»ä¸ªç¹ï¼è°ç¨GDIå½æ°ï¼ãwindows认为æ¯å¨æ们çæç»´çï¼5ï¼6ï¼ å¤ç»äºä¸ªç¹ãï¼ä¹å°±æ¯è¯´5ï¼6æ¯é»è¾åæ ï¼GDIå½æ°ä¸ç大é¨åé½æ¯é»è¾åæ ï¼
é£ä¹ï¼è¦æå®æ å°å°å±å¹ä¸ï¼å¿
é¡»ä½ä¸äºè§£éã
解éå
æ¬ï¼
åç¹å¨åªéï¼5ï¼6代表ä»ä¹ï¼æ³¨æï¼è§£é5ï¼6æ¶ä¸å
æ¯è·ç¦»é®é¢ï¼è¿ææ¹åå¢ï¼
SetViewportOrgExåSetWindowOrgExæ¯ç®¡ç¬¬ä¸ä¸ªé®é¢çã
设置Xè½´Yè½´æ¹å(SetMapMode)ï¼è¿æSetViewportExtExåSetWindowExtExæ¯ç®¡ç¬¬äºä¸ªé®é¢çã
å
¶å®æ³è±¡ä¸ä¸ä¹å¯ä»¥ç¥éï¼5å6åºè¯¥æ¯ä¹ä¸ä¸ä¸ªæ¯çæ¥åæåç´ åä½ãèåæ ¹æ®åç¹å¹¶æç
§Xè½´Yè½´æ¹åå»ç»å°±å¯ä»¥äºã
SetViewportExtExåSetWindowExtExå°±æ¯å³å®æ¯ççå½æ°ãï¼ä»ä»¬ç第äºä¸ªå第ä¸ä¸ªåæ°åå«ç¸é¤æ¥ä»£è¡¨æ¨ªçºµåæ çæ¯çãï¼
å¥ä¸ªä¾åï¼æå¸æ使ç¨ç¬å¡å°åæ ç³»ï¼ä¹å°±æ¯Xåå³å¢å ï¼Yåä¸å¢å ï¼ï¼å¹¶ä¸åæ åä½æ¯åç±³ï¼é£ä¹æ¤æ¶å°±åºè¯¥ææ个æ¯çæ¥æ5,6åç±³åææ¯å¤å°ä¸ªåç´ ï¼å¨ windowsæä¾çæç§æ å°æ¨¡å¼ä¸ç¡®å®æè¿ä¸ªæ¯çï¼ãåå»ç»ãï¼æ¤æ¶ä½ ä¹ä¸è½ä¹±æ¹æ¯çï¼æ¯ç«ä¸åç±³å¤å°åç´ æ¯ä¸ªå¸¸æ°ï¼ä½ 设置äºæ å°æ¨¡å¼åä¹å°±å³å®äºæ¯çï¼
å¨æ们çä¾åä¸ï¼
SetWindowExtEx(hDC, 64, 64, NULL);
SetViewportExtEx(hDC, GetDeviceCaps(hDC, LOGPIXELSX),
GetDeviceCaps(hDC, LOGPIXELSY), NULL);
è¿æ ·ä¹åï¼5代表5* ï¼64/GetDeviceCaps(hDC, LOGPIXELSXï¼è¿ä¹å¤ä¸ªåç´ ã
6代表6* ï¼64/GetDeviceCaps(hDC, LOGPIXELSXï¼è¿å¤ä¸ªåç´ ã
æ们修æ¹äºæ¯çï¼ç±æ¤å¯ç¥æ å°æ¨¡å¼ä¹æ¯æ们èªå®ä¹çãï¼
温馨提示:答案为网友推荐,仅供参考