標籤:
--------------------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);
這裡先繪的長方形是“藍邊白面”,而後繪的鈍角長方形是“藍邊紅面”。
電腦圖形初上手