電腦圖形初上手

來源:互聯網
上載者:User

標籤:

--------------------Configuration: PenBrush - Win32 Debug--------------------
Compiling...
PenBrushView.cpp
d:\program files (x86)\microsoft visual studio\myprojects\penbrush\penbrushview.cpp(4) : fatal error C1083: Cannot open precompiled header file: ‘Debug/PenBrush.pch‘: No such file or directory
Error executing cl.exe.

PenBrushView.obj - 1 error(s), 0 warning(s)
答:當按F4,錯誤定位到#include "stdafx.h";解決方案“這是編譯時間出現的錯誤,可暫不管這個錯誤,繼續連結,可發現連結無誤,如下
--------------------Configuration: PenBrush - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
PenBrush.cpp
MainFrm.cpp
PenBrushDoc.cpp
PenBrushView.cpp
Generating Code...
Linking...

PenBrush.exe - 0 error(s), 0 warning(s)
這時我們再次對這個工程進行編譯就會這樣
--------------------Configuration: PenBrush - Win32 Debug--------------------
Compiling...
Skipping... (no relevant changes detected)
PenBrushView.cpp

PenBrushView.obj - 0 error(s), 0 warning(s)
可以看到之前報的錯誤消失。這時再次連結,得到
--------------------Configuration: PenBrush - Win32 Debug--------------------
Linking...

PenBrush.exe - 0 error(s), 0 warning(s)
如此可以解決問題。
代碼部分
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);

rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);
rect.DeflateRect(100, 100);

CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

CBrush NewBrush, *pOldBrush;
NewBrush.CreateSolidBrush(RGB(255, 0, 0));
pOldBrush = pDC ->SelectObject(&NewBrush);

pDC ->Rectangle(&rect);
pDC ->SelectObject(pOldPen);
pDC ->SelectObject(pOldBrush);

代碼1
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);
pDC ->Rectangle(rect);
這時得到的長方形顯示在第一象限,而且只能顯示它的一部分(左下角部分)

代碼2
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);

rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);

CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

pDC ->Rectangle(rect);
這時得到的長方形就會是視圖區範圍

代碼3
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);

rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);
rect.DeflateRect(100, 100);

CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

pDC ->Rectangle(rect);
這時間長度方形就會縮小置中

回到最初的代碼部分
在裡面有這樣的一段代碼
CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

CBrush NewBrush, *pOldBrush;
NewBrush.CreateSolidBrush(RGB(255, 0, 0));
pOldBrush = pDC ->SelectObject(&NewBrush);
知道它是建立畫筆和畫刷,並將它們選入裝置上下文
然後在繪製時
pDC ->Rectangle(&rect);
可以看到,並沒有什麼顏色參數在裡面;Pen用來畫線,Brush用來填充;當使用者沒有建立畫筆和畫刷就是“黑筆白刷”。
這樣,圖形是會被覆蓋的,底層的會被後來的上層給覆蓋。
下面的代碼可以解釋這種情形
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);

rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);
rect.DeflateRect(100, 100);

CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

pDC ->Rectangle(rect);

CBrush NewBrush, *pOldBrush;
NewBrush.CreateSolidBrush(RGB(255, 0, 0));
pOldBrush = pDC ->SelectObject(&NewBrush);

pDC ->RoundRect(rect, CPoint(50, 50));

pDC ->SelectObject(pOldPen);
pDC ->SelectObject(pOldBrush);
這裡先繪的長方形是“藍邊白面”,而後繪的鈍角長方形是“藍邊紅面”。

電腦圖形初上手

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.