void CMFCGdiView::OnPen()
{
CClientDC dc(this);
//初始化画笔
CPen Pen(PS_SOLID,10,RGB(0,255,0));
//保存旧的画笔
CPen *cOldPen=dc.SelectObject(&Pen);
//画一个矩形框
dc.Rectangle(10,10,200,200);
//还原画笔
dc.SelectObject(&cOldPen);
//dc.DeleteDC();
// TODO: Add your command handler code here
}
void CMFCGdiView::OnBrush()
{
// TODO: Add your command handler code here
CClientDC dc(this);
//初始化画笔 画刷
CPen Pen(PS_SOLID,10,RGB(0,255,0));
CBrush brush(HS_CROSS,RGB(255,0,0));
//保存旧的画笔 画刷
CPen *cOldPen=dc.SelectObject(&Pen);
CBrush *cOldBrush=dc.SelectObject(&brush);
//画一个矩形框
dc.Rectangle(10,10,200,200);
//还原画笔 画刷
dc.SelectObject(&cOldPen);
dc.SelectObject(&cOldBrush);
}
void CMFCGdiView::OnFont()
{
// TODO: Add your command handler code here
CFont font;
font.CreatePointFont(720,"宋体");
CClientDC dc(this);
CFont*pOldFont=dc.SelectObject(&font);
dc.TextOut(100,300,"Holle MFC");
dc.SelectObject(&pOldFont);
}
void CMFCGdiView::OnBit()
{
//加载位图
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
//创建DC
CClientDC dc(this);
CDC dcBmp;
dcBmp.CreateCompatibleDC(&dc);
//将加载进来的位图放入DC
CBitmap *pOldBmp=dcBmp.SelectObject(&bmp);
//绘制位图
dc.BitBlt(400,400,100,100,&dcBmp,0,0,SRCCOPY);
//选出位图
dcBmp.SelectObject(&pOldBmp);
}
/*
//在Win32里面我们以前是这样写的
PAINTSTRUCT ps={0};
HDC hDC=BeginPaint(hWnd,&ps);
DrawMine(hDC);
EndPaint(hWnd,&ps);
void DrawMine(HDC hDC){
HDC hBmpDC=CreateCompatibleDC(hDC);
HBITMAP hOldBmp=(HBITMAP)SelectObject(hBmpDC,g_hBmpMine);
BitBlt(hDC,16,16,16,16,
hBmpDC,0,0,SRCCOPY);
SelectObject(hDC,hOldBmp);
DeleteDC(hDC);
}*/
void CMFCGdiView::OnLoadimg()
{
// TODO: Add your command handler code here
//外部API加载外部图像 VC6只支持BMP的 VC高版本应该就支持
HBITMAP hBit=(HBITMAP)LoadImage(NULL,"F:\\temp.bmp",
IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR|LR_DEFAULTSIZE|LR_LOADFROMFILE);
CBitmap bmp;
bmp.Attach(hBit);
//获取图片的大小
BITMAP bitmap={0};
GetObject(hBit,sizeof(bitmap),&bitmap);
CClientDC dc(this);
CDC dcBmp;
dcBmp.CreateCompatibleDC(&dc);
CBitmap *cOldBmp=dcBmp.SelectObject(&bmp);
dc.BitBlt(20,20,bitmap.bmWidth,bitmap.bmHeight,&dcBmp,0,0,SRCCOPY);
dcBmp.SelectObject(cOldBmp);
}
void CMFCGdiView::OnPalette()
{
// TODO: Add your command handler code here
LOGPALETTE *logPalette=NULL;
//计算调色板数据长度
int nLen=sizeof(LOGPALETTE)+sizeof(PALETTEENTRY)*255;
//分配调色板的内存空间
logPalette=(LOGPALETTE*)malloc(nLen);
if(logPalette==NULL){
AfxMessageBox("调色板内存分配失败");
return;
}
memset(logPalette,0,nLen);
//版本号
logPalette->palVersion=0x300;
//颜色数量
logPalette->palNumEntries =256;
//循环加载颜色
for(int nIndex=0;nIndex<256;nIndex++)
{
logPalette->palPalEntry[nIndex].peRed=0;
logPalette->palPalEntry[nIndex].peGreen=0;
logPalette->palPalEntry[nIndex].peBlue=nIndex;
}
//创建调色板
CPalette palette;
palette.CreatePalette(logPalette);
//创建DC
CClientDC dc(this);
CPalette *pOldPalette=dc.SelectPalette(&palette,false);
//加载调色板
dc.RealizePalette();
CRect rcClient;
GetClientRect(&rcClient);
for(nIndex=0;nIndex<256;nIndex++){
int nX1=0;
//把客户区分成256,根据nIndex绘画到不同位置
int nY1=rcClient.Height()*nIndex/256;
//长度为客户区的长度
int nX2=rcClient.Width();
int nY2=rcClient.Height()*(nIndex+1)/256;
dc.FillSolidRect(nX1,nY1,nX2,nY2,PALETTEINDEX(255-nIndex));
}
//dc.FillSolidRect(0,100,50,50,PALETTEINDEX(47));
dc.SelectPalette(pOldPalette,false);
free(logPalette);
}
void CMFCGdiView::OnRegion()
{
// TODO: Add your command handler code here
CRgn rgnLeft;
CRgn rgnRight;
CRgn rgnMid;
//这个就像是DIV的左上右下的边距一样
//绘画一个圆形 左上右下XY位置
rgnLeft.CreateEllipticRgn(100,100,200,200);
//绘画另一个圆形 左上右下XY位置
rgnRight.CreateEllipticRgn(400,100,500,200);
//绘画一个矩形 左上右下XY位置
rgnMid.CreateRectRgn(150,130,450,170);
//合并区域运算
rgnMid.CombineRgn(&rgnMid,&rgnLeft,RGN_OR);
rgnMid.CombineRgn(&rgnMid,&rgnRight,RGN_OR);
CClientDC dc(this);
CBrush brush(HS_CROSS,RGB(0,255,0));
//填充
dc.FillRgn(&rgnMid,&brush);
CBrush brush2(HS_CROSS,RGB(0,0,255));
//边框
dc.FrameRgn(&rgnMid,&brush2,2,2);
}
程序下载 http://pan.baidu.com/s/1jG3Irp8