培训一:GDI绘图方法
2011-10-31 15:44
169 查看
http://blog.sina.com.cn/s/blog_493309600100cqft.html
//矢量图和位图的区别
//介绍DC、了解DC
//CBrush brush(RGB(255,0,0));
//CClientDC dc(this->GetParent()->GetParent());
//CWindowDC dc(this);
//dc.FillRect(CRect(0,0,500,500),&brush);
//基本图形的绘制
//线段
pDC->MoveTo(20,30);
pDC->LineTo(300,30);
//矩形
pDC->Rectangle(20,50,300,200);
//椭圆
pDC->Ellipse(20,50,300,200);
CPen pen, *pOldPen;
CBrush brush, *pOldBrush;
//1.使用画笔
pen.CreatePen(PS_SOLID,6,RGB(255,0,0));
pOldPen=pDC->SelectObject(&pen);
pDC->MoveTo(20,250);
pDC->LineTo(300,250);
pDC->SelectObject(pOldPen);
//2.使用画刷(填充)
//创建一个蓝色的画刷
brush.CreateSolidBrush(RGB(0,0,255));
pOldBrush=pDC->SelectObject(&brush);
pDC->Rectangle(20,300,300,400);
pDC->SelectObject(pOldBrush);
//创建一个蓝色的网格画刷
brush.DeleteObject();
brush.CreateHatchBrush(HS_CROSS,RGB(0,0,255));
pOldBrush=pDC->SelectObject(&brush);
pDC->Rectangle(20,420,300,520);
pDC->SelectObject(pOldBrush);
//创建一个位图画刷
brush.DeleteObject();
CBitmap bitmap_brush;
bitmap_brush.LoadBitmap(IDB_BITMAP1);
brush.CreatePatternBrush(&bitmap_brush);
pOldBrush=pDC->SelectObject(&brush);
pDC->Rectangle(20,540,300,640);
pDC->SelectObject(pOldBrush);
//空画刷
brush.DeleteObject();
brush.CreateStockObject(NULL_BRUSH);
pDC->Rectangle(20,660,300,760);
pDC->SelectObject(pOldBrush);
//3.使用位图
//定义位图
CBitmap bitmap;
//保存位图信息;
BITMAP bmp;
//建立兼容设备
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
//从资源中装入位图
bitmap.LoadBitmap(IDB_BITMAP1);
//将位图选入设备
dcCompatible.SelectObject(&bitmap);
//获取位图信息
bitmap.GetBitmap(&bmp);
//拷贝
pDC->BitBlt(600,0,bmp.bmWidth,bmp.bmHeight,&dcCompatible,0,0,SRCCOPY);
//从文件中获取位图
HBITMAP hBitmap;
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
"res\\ball.bmp", //实际位图文件的路径
IMAGE_BITMAP,0, 0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//从文件中装入位图
bitmap.Detach();
bitmap.Attach(hBitmap);
bitmap.GetBitmap(&bmp);
dcCompatible.SelectObject(&bitmap);
//绘制非透明位图(将dcCompatible上的内容拷贝到pDC中)
pDC->BitBlt(600,40,bmp.bmWidth,bmp.bmHeight,&dcCompatible,0,0,SRCCOPY);
pDC->StretchBlt(600,100,bmp.bmWidth*2,bmp.bmHeight*2,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
//绘制透明位图(将dcCompatible上的内容拷贝到pDC中,同时去掉最后一个参数指定的颜色)
pDC->TransparentBlt(600,200,bmp.bmWidth,bmp.bmHeight,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,RGB(255,0,0));
//4.输出文字
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkMode(TRANSPARENT);
CFont font;//当前字体
font.CreateFont(32,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,DEFAULT_PITCH | FF_SWISS,"宋体");
CFont *pOldFont=pDC->SelectObject(&font);
pDC->TextOut(50,320,"输出文字");
CSize cs;
cs=pDC->GetTextExtent("输出文字");
pDC->TextOut(50+cs.cx,320,"abcdefg");
pDC->SelectObject(pOldFont);
//复杂图形
int step=30;
int center_x=700;
int center_y=500;
float x,y;
x=center_x-300;
y=sin(x/600*6*3.14)*100;
pDC->MoveTo(x,center_y+y);
while (x<center_x+300)
{
y=sin(x/600*6*3.14)*100;
pDC->LineTo(x,center_y+y);
x+=step;
}
SDK 程序
#include <windows.h>
#include <stdio.h>
//声明窗口过程函数
LRESULT CALLBACK WinProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
//入口函数
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
//设计窗口类
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinProc;
wndcls.lpszClassName="win32";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
//注册窗口类
RegisterClass(&wndcls);
//创建窗口
HWND hwnd;
hwnd=CreateWindow("win32","wind32程序",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);
//显示和更新窗口
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
//处理消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//定义窗口过程函数
LRESULT CALLBACK WinProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"win32",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","win32",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"LbutonDown",strlen("LbutonDown"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"win32程序",strlen("win32程序"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?","win32程序",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
培训一:GDI绘图方法
MFC程序,使用GDI绘图//矢量图和位图的区别
//介绍DC、了解DC
//CBrush brush(RGB(255,0,0));
//CClientDC dc(this->GetParent()->GetParent());
//CWindowDC dc(this);
//dc.FillRect(CRect(0,0,500,500),&brush);
//基本图形的绘制
//线段
pDC->MoveTo(20,30);
pDC->LineTo(300,30);
//矩形
pDC->Rectangle(20,50,300,200);
//椭圆
pDC->Ellipse(20,50,300,200);
CPen pen, *pOldPen;
CBrush brush, *pOldBrush;
//1.使用画笔
pen.CreatePen(PS_SOLID,6,RGB(255,0,0));
pOldPen=pDC->SelectObject(&pen);
pDC->MoveTo(20,250);
pDC->LineTo(300,250);
pDC->SelectObject(pOldPen);
//2.使用画刷(填充)
//创建一个蓝色的画刷
brush.CreateSolidBrush(RGB(0,0,255));
pOldBrush=pDC->SelectObject(&brush);
pDC->Rectangle(20,300,300,400);
pDC->SelectObject(pOldBrush);
//创建一个蓝色的网格画刷
brush.DeleteObject();
brush.CreateHatchBrush(HS_CROSS,RGB(0,0,255));
pOldBrush=pDC->SelectObject(&brush);
pDC->Rectangle(20,420,300,520);
pDC->SelectObject(pOldBrush);
//创建一个位图画刷
brush.DeleteObject();
CBitmap bitmap_brush;
bitmap_brush.LoadBitmap(IDB_BITMAP1);
brush.CreatePatternBrush(&bitmap_brush);
pOldBrush=pDC->SelectObject(&brush);
pDC->Rectangle(20,540,300,640);
pDC->SelectObject(pOldBrush);
//空画刷
brush.DeleteObject();
brush.CreateStockObject(NULL_BRUSH);
pDC->Rectangle(20,660,300,760);
pDC->SelectObject(pOldBrush);
//3.使用位图
//定义位图
CBitmap bitmap;
//保存位图信息;
BITMAP bmp;
//建立兼容设备
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
//从资源中装入位图
bitmap.LoadBitmap(IDB_BITMAP1);
//将位图选入设备
dcCompatible.SelectObject(&bitmap);
//获取位图信息
bitmap.GetBitmap(&bmp);
//拷贝
pDC->BitBlt(600,0,bmp.bmWidth,bmp.bmHeight,&dcCompatible,0,0,SRCCOPY);
//从文件中获取位图
HBITMAP hBitmap;
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
"res\\ball.bmp", //实际位图文件的路径
IMAGE_BITMAP,0, 0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//从文件中装入位图
bitmap.Detach();
bitmap.Attach(hBitmap);
bitmap.GetBitmap(&bmp);
dcCompatible.SelectObject(&bitmap);
//绘制非透明位图(将dcCompatible上的内容拷贝到pDC中)
pDC->BitBlt(600,40,bmp.bmWidth,bmp.bmHeight,&dcCompatible,0,0,SRCCOPY);
pDC->StretchBlt(600,100,bmp.bmWidth*2,bmp.bmHeight*2,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
//绘制透明位图(将dcCompatible上的内容拷贝到pDC中,同时去掉最后一个参数指定的颜色)
pDC->TransparentBlt(600,200,bmp.bmWidth,bmp.bmHeight,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,RGB(255,0,0));
//4.输出文字
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkMode(TRANSPARENT);
CFont font;//当前字体
font.CreateFont(32,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,DEFAULT_PITCH | FF_SWISS,"宋体");
CFont *pOldFont=pDC->SelectObject(&font);
pDC->TextOut(50,320,"输出文字");
CSize cs;
cs=pDC->GetTextExtent("输出文字");
pDC->TextOut(50+cs.cx,320,"abcdefg");
pDC->SelectObject(pOldFont);
//复杂图形
int step=30;
int center_x=700;
int center_y=500;
float x,y;
x=center_x-300;
y=sin(x/600*6*3.14)*100;
pDC->MoveTo(x,center_y+y);
while (x<center_x+300)
{
y=sin(x/600*6*3.14)*100;
pDC->LineTo(x,center_y+y);
x+=step;
}
SDK 程序
#include <windows.h>
#include <stdio.h>
//声明窗口过程函数
LRESULT CALLBACK WinProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
//入口函数
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
//设计窗口类
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinProc;
wndcls.lpszClassName="win32";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
//注册窗口类
RegisterClass(&wndcls);
//创建窗口
HWND hwnd;
hwnd=CreateWindow("win32","wind32程序",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);
//显示和更新窗口
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
//处理消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//定义窗口过程函数
LRESULT CALLBACK WinProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"win32",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","win32",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"LbutonDown",strlen("LbutonDown"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"win32程序",strlen("win32程序"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?","win32程序",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
相关文章推荐
- android简单的GDI绘图方法
- GDI绘图方法的初步分析
- 有关c#GDI绘图的一些方法
- GDI绘图方法的初步分析
- C# GDI在控件上绘图的方法
- 使用GDI在windows下绘图(二)——GDI绘图方法
- Quartz2d 使用UIkit绘图方法 CADisplayLink 定时器
- MFC学习笔记——GDI绘图
- GDI+ 与 GDI (平铺与拉伸)PNG背景图贴图片的方法
- GDI 绘图 内存泄漏问题
- Windows GDI绘图基础知识
- 【Visual C++】游戏开发笔记之六——游戏画面绘图(三)透明特效的制作方法
- HTML5中Canvas绘图方法性能测试
- C# GDI+ 简单绘图(3)
- C#使用GDI绘制矩形的方法
- MFC中的GDI绘图
- C#-gdi绘图,双缓冲绘图,Paint事件的触发
- Android绘图之Paint的使用方法详解
- Java知多少(98)Graphics类的绘图方法
- Python 绘图 MatPlotLib常用方法