1.输出文本
// 输出文本
1 COLORREF clrOldTextColor = SetTextColor(hDC, RGB(,,)); //设置字体颜色,但最后都要返回原来的字体格式 COLORREF clrBackColor = SetBkColor(hDC, RGB(,,)); //设置背景颜色,仅仅指的是文本区域的颜色 HFONT hFont = CreateFont( // nHeight //创造一个字体格式,其中包含14个参数,前两个是字体的大小,其他的详见MSDN , // nWidth , // nEscapement , // nOrientation , // nWeight , FALSE // nItalic , FALSE // nUnderline , // cStrikeOut , ANSI_CHARSET // nTCHARSet , OUT_DEFAULT_PRECIS // nOutPrecision , CLIP_DEFAULT_PRECIS // nClipPrecision , DEFAULT_QUALITY // nQuality , DEFAULT_PITCH|FF_SWISS// nPitchAndFamily , _T("arial") ); // lpszFacename HFONT hOldFont = (HFONT)::SelectObject(hDC, (HGDIOBJ)hFont); //设置字体 { DrawText(hDC, _T("www.itxueba.org"), _tcslen(_T("www.itxueba.org")), &rcClient, DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS | DT_SINGLELINE); //最后一个参数表示输出格式,其中 DT_WORD_ELLIPSIS 在本本区域不够时输出省略号 可以指定输出的格式 比TextOut灵活 // TextOut(hDC, 0, 0,_T("www.itxueba.org"), _tcslen(_T("www.itxueba.org"))); } //SetTextAlign(hDC,TA_RIGHT|TA_TOP); //显示文本的对齐方式,右对齐 //SetTextAlign(hDC,TA_LEFT|TA_TOP); //显示文本的对齐方式,左对齐 ::SelectObject(hDC, (HGDIOBJ)hOldFont); //返回原来的字体 DeleteObject((HGDIOBJ)hFont); //删除掉所创建的字体,不然可能会出现内存泄露 SetBkColor(hDC, clrBackColor); // 返回原来的背景颜色 SetTextColor(hDC, clrOldTextColor); //f返回原来的字体颜色
2. 输出点
因为一个点不是很明显,所以用输出矩形的方式。
SetPixel表示输出点,有四个参数,第一表示设备句柄,我们所说的画家,第二和第三分别表示点画的位置,最后一个是像素点的颜色。
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
SetPixel(hDC,i,j,RGB(,,));
}
}
3.绘制线条函数
HPEN hPen = CreatePen(PS_DASH,,RGB(,,)); // 产生画笔,设置线条格式
HPEN hOldPen = (HPEN)::SelectObject(hDC,hPen); MoveToEx(hDC,rcClient.left,rcClient.top,NULL); //画线函数
LineTo(hDC,rcClient.right,rcClient.bottom); ::SelectObject(hDC,hOldPen);
DeleteObject(hPen);
4.绘制面
//HPEN hPen =(HPEN) ::GetStockObject(NULL_PEN); //设置为没有颜色的边框,同样也可以设置一个无填充的 背景NULL_BRUSH
HPEN hPen = CreatePen(PS_SOLID,,RGB(,,)); // 产生画笔,设置线条格式
HPEN hOldPen = (HPEN)::SelectObject(hDC,hPen); HBRUSH hBrush = CreateSolidBrush(RGB(,,)); //设置画刷颜色
HBRUSH hOldBrush =(HBRUSH)::SelectObject(hDC,hBrush);
{
//::Rectangle(hDC,0,0,100,50); //绘制矩形 ::Ellipse(hDC,,,,); //绘制椭圆
}
::SelectObject(hDC,hOldBrush);
DeleteObject(hBrush);
::SelectObject(hDC,hOldPen);
DeleteObject(hPen);
5.双缓冲绘图模式
HDC hMenDC = ::CreateCompatibleDC(hDC); //产生一个能兼容hDC的设备句柄
assert(hMenDC); HBITMAP hCompatibaleMap = ::CreateCompatibleBitmap(hDC,rcClient.right-rcClient.left,rcClient.bottom-rcClient.top); //创造出一个图层,当然所有创建的最后都要进行销毁
assert(hCompatibaleMap);
{
HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMenDC,hCompatibaleMap);
{ //HPEN hPen =(HPEN) ::GetStockObject(NULL_PEN); //设置为没有颜色的边框,同样也可以设置一个无填充的 背景NULL_BRUSH
HPEN hPen = CreatePen(PS_SOLID,,RGB(,,)); // 产生画笔,设置线条格式
HPEN hOldPen = (HPEN)::SelectObject(hMenDC,hPen); HBRUSH hBrush = CreateSolidBrush(RGB(,,)); //设置画刷颜色
HBRUSH hOldBrush =(HBRUSH)::SelectObject(hMenDC,hBrush);
{ for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
SetPixel(hMenDC,i,j,RGB(,,));
}
} //::Rectangle(hDC,0,0,100,50); //绘制矩形 // ::Ellipse(hMenDC,0,0,100,50); //绘制椭圆
}
::SelectObject(hMenDC,hOldBrush);
DeleteObject(hBrush);
::SelectObject(hMenDC,hOldPen);
DeleteObject(hPen);
::BitBlt(hDC,rcClient.left,rcClient.top,rcClient.right-rcClient.left,rcClient.bottom-rcClient.top,
hMenDC,,,SRCCOPY);
}
::SelectObject(hMenDC,hOldBitmap);
}
::DeleteObject((HGDIOBJ)hCompatibaleMap);
DeleteDC(hMenDC);
6. 输出位图
位图的输出要在双缓冲的基础上进行
HDC hMenDC = ::CreateCompatibleDC(hDC);
assert(hMenDC); HBITMAP hBitMap = (HBITMAP)::LoadBitmap((HINSTANCE)GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1));
assert(hBitMap); BITMAP bm;
::GetObject(hBitMap,sizeof(BITMAP),&bm); //获取位置的尺寸信息 {
HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMenDC,hBitMap);
{
for(int i= ; i< ;i++)
{
for(int j=;j<;j++)
{
::BitBlt(hDC,rcClient.left+bm.bmWidth*i,rcClient.top+bm.bmHeight*j,rcClient.right-rcClient.left,rcClient.bottom-rcClient.top,
hMenDC,,,SRCCOPY);
}
} /* ::BitBlt(hDC,rcClient.left,rcClient.top,rcClient.right-rcClient.left,rcClient.bottom-rcClient.top,
hMenDC,0,0,SRCCOPY);*/ //::StretchBlt(hDC, rcClient.left, rcClient.top, //放大位图
//rcClient.right-rcClient.left, rcClient.bottom-rcClient.top, hMenDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
}
::SelectObject(hMenDC,hOldBitmap);
}
::DeleteObject((HGDIOBJ)hBitMap);
DeleteDC(hMenDC);