首先是在我的vs2008裡面配置gdi+庫,以及初始化gdi+lib,參見
然後進行一些比較基礎的gdi+畫筆、影象處理(詳細請見注釋)
; imageatt.setcolormatrix(&colormatrix,colormatrixflagsdefault,coloradjusttypebitmap);
g.drawimage(&bm1,
rect(width*2+20,0,width,height),
0,0,width,height,
unitpixel,
&imageatt);
/////繪製文字
wchar str[256];
wcscpy(str,l"hello gdi+");
font ft(l"arial",30);
stringformat format;
format.setalignment(stringalignmentcenter);
format.setlinealignment(stringalignmentcenter);
solidbrush black(color(255,255,0,0));
rectf rc(10.0f,300.0f,300.0f,50.0f);
g.drawstring(
str,
wcslen(str),
&ft,
rc,&format,
&black);
g.drawrectangle(&pen(color(155,0,200),5),rc);
image bmp(l"1.bmp");
texturebrush textbrush(&bmp);//構造紋理畫刷
pen textpen(&textbrush,30);
g.drawellipse(&textpen,100,300,100,200);
pen red(color(255,0,0),10);
pen green(color(0,255,0),10);
red.setalignment(penalignmentinset);
g.drawellipse(&red,rect(340,240,100,40));
g.drawellipse(&green,rect(340,240,100,40));
/ //畫筆的縮放
pen p(color(155,0,200));
p.setwidth(5);
matrix matrix(1,0,0,2,0,0);
p.scaletransform(1,3);
g.drawrectangle(&p,rect(300,500,100,40));
//畫筆的旋轉
pen pen(color::blue,5);
pen.scaletransform(1,6);//垂直方向擴充六倍,水平方向不變
g.drawellipse(&pen,50,350,200,200);
//依次旋轉畫筆
pen.rotatetransform(60);
g.drawellipse(&pen,50,50,200,200);
pen.rotatetransform(120);
g.drawellipse(&pen,260,50,200,200);
pen.rotatetransform(180);
g.drawellipse(&pen,260,350,200,200);
//自定義畫筆的畫帽
graphicspath spath,epath;
//在路徑中新增乙個矩形
spath.addrectangle(rect(-10,-5,20,10));
epath.addline(0,-20,10,0);
epath.addline(0,-20,-10,0);
epath.addline(0,-10,10,0);
epath.addline(0,-10,-10,0);
rect rc1(10,-5,20,10);
pen p1(color(255,0,0,255),3);
customlinecap scap(null,&spath),ecap(null,&epath);
g.drawline(&p,420,30,300,30);
for(float j=0.0f;j<6.28f;j+=0.15f)
////this->redrawwindow();
// enum linejoin;
pen p2(color(255,0,0,255),15);
p2.setlinejoin(linejoinbevel);
g.drawrectangle(&p2,450,300,100,40);
p2.setlinejoin(linejoinround);
p2.setcolor(color(255,255,0,0));
g.drawrectangle(&p2,600,300,100,40);
p2.setlinejoin(linejoinmiter);
p2.setcolor(color(255,155,0,200));
g.drawrectangle(&p2,750,300,100,40);
p2.setlinejoin(linejoinmiterclipped);
p2.setcolor(color(255,0,255,0));
g.drawrectangle(&p2,900,300,100,40);
///point pt[4]=;
g.setsmoothingmode(smoothingmodehighquality);
p2.setlinejoin(linejoinmiter);
g.drawlines(&p2,pt,4);
/ pt[0].x+=100;
pt[1].x+=100;
pt[2].x+=100;
pt[3].x+=100;
p2.setcolor(color(255,200,0,155));
p2.setlinejoin(linejoinbevel);
g.drawlines(&p2,pt,4);
// pt[0].x+=100;
pt[1].x+=100;
pt[2].x+=100;
pt[3].x+=100;
p2.setcolor(color(255,0,200,155));
p2.setlinejoin(linejoinround);
g.drawlines(&p2,pt,4);
///pt[0].x+=100;
pt[1].x+=100;
pt[2].x+=100;
pt[3].x+=100;
p2.setcolor(color(255,100,200,155));
p2.setlinejoin(linejoinmiterclipped);
g.drawlines(&p2,pt,4);}
這個函式的引數最好使用cpaintdc型別,以免繪製影象後重新整理區域後消失
因此,我把這個函式放在cxxdlg::onpaint()函式中
最後執行效果如下:(按照繪製的先後順序,開始畫的被覆蓋住了)
GDI程式設計基礎
視口是基於裝置的採用的是裝置座標 單位 畫素 視窗是基於程式的採用的是邏輯座標 單位 畫素 公釐 厘公尺等 在預設的對映模式下,視口是與視窗等同的。但是如果改變其對映模式,則其對應的單位則不相同。如果將對映模式改為mm loenglish或mm lometric等,則1個裝置座標並不對應乙個邏輯座標...
GDI 程式設計基礎簡介
今天準備重新對gdi的知識進行回顧一下,以便加深認識。在進行windows程式設計時,可能經常會用到裝置描述表的型別控制代碼,例如,最廠家的hdc,它就是影象裝置描述型別控制代碼。因為gdi的繪圖函式基本上都是有狀態的,因此gdi所有的函式都要求乙個這樣的圖形裝置描述型別的控制代碼 hdc。而乙個影...
GDI程式設計注意點 1
textout的屬於比較老的文字輸出函式,但是簡單的文字輸出和格式控制使用它非常方便,廢話不多說,基本用法如下 void drawarea1 cdchandle mydc,point ptlefttop,point ptrightbottom 效果如下 可以看到,1.使用setbkmode決定背景是...