一、位图
1、三大函数
从源写到目标
BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);
从源写到目标 ,可以拉伸
BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);
选定刷子。
函数原型:BOOL PatBlt(HDC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, DWORD dwRop);
2、加载位图资源:
(1)、加载 hBitmap=LoadBitmap(hinst,MAKEINTRESOURCE(IDB_BITMAP2));
(2)、得到对象 GetObject(hBitmap,sizeof(BITMAP),&bitmap);
(3)创建内存DC hdcMem=CreateCompatibleDC(hdc); //创建内存dc
(4)把位图对象选中到内存dc上 SelectObject(hdcMem,hBitmap);
(5)用 BitBlt、StretchBlt、PatBlt画图:
注意要删除DC,和对象
DeleteDC(hdcMem);
DeleteObject(hBitmap);
3、填充bitmap创建单色小位图。
先用数据填充bitmap。然后调用CreateBitmap(&bitmap);
4、用位图做画刷 HBRUSH CreatePatternBrush(HBITMAP hbmp);
该函数可以创建具有指定位图模式的逻辑刷子,该位图不能是DIB类型的位图,DIB位图是由CreateDIBSection函数创建的。
二、透明位图/透明窗口
//改变扩展风格
DWORD dwStyle=GetWindowLong(hwnd,GWL_EXSTYLE);
SetWindowLong(hwnd,GWL_EXSTYLE,dwStyle^0x80000);
//动态链接库
hinst=LoadLibrary("User32.DLL");
if(hinst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND ,COLORREF,BYTE,DWORD);
MYFUNC fun=NULL;
//获得指针
fun=(MYFUNC)GetProcAddress(hinst,"SetLayeredWindowAttributes");
if (fun)
{
fun(hwnd,0,180,2); //设置
}
}
//扩展风格WS_EX_LAYERED
三、元文件
一、创建:
CreateMetaFile(); NULL表示存储在内存中
CloseMetaFile //返回元文件句柄
PlayMetaFile //在指定的设备场景中回放一个图元文件。与原元文件的坐标有关,故要定义原点在哪里。。。
DeleteMetaFile //删除
hmf=GetMetaFile(szFileName); //获得句柄
CopyMetaFile //为元文件制定一个副本
EnumMetaFile //为一个标准的windows图元文件枚举单独的图元文件记录
PlayMetaFileRecord //回放来自图元文件的单条记录(每条记录都包含了单个GDI绘图命令)
//EnumMetaFileProc
int CALLBACK EnumMetaFileProc(
HDC hDC, // handle to device context
HANDLETABLE FAR *lpHTable, // pointer to metafile handle table
METARECORD FAR *lpMFR, // pointer to metafile record
int nObj, // count of objects
LPARAM lpClientData // pointer to optional data
);
GetMetaFileBitsEx
SetMetaFileBitsEx
//增强型元文件
CreateEnhMetaFile //创建增强型元文件
CloseEnhMetaFile //返回元文件句柄。
PlayEnhMetaFile //显示元文件
GetEnhMetaFileHeader(hemf,cbsize,&emh); //获得ENHMETAHEADER信息。
GetEnhMetaFile //取得磁盘文件中包含的一个增强型图元文件的图元文件句柄
EnumEnhMetaFile
PlayEnhMetaFileRecord // 回放单独一条增强型图元文件记录
//
CopyEnhMetaFile
DeleteEnhMetaFile
EnhMetaFileProc
GdiComment
GetEnhMetaFileBits
GetEnhMetaFileDescription
GetEnhMetaFilePaletteEntries
GetWinMetaFileBits
SetEnhMetaFileBits
SetWinMetaFileBits
记录数据的元文件:
ENHMETAHEADER
typedef struct tagENHMETAHEADER { // enmh
DWORD iType; //类型
DWORD nSize; //大小
RECTL rclBounds; //指出图像大小
RECTL rclFrame; //
DWORD dSignature; //字符串“EMF”
DWORD nVersion; //0X00010000
DWORD nBytes; //总字节数
DWORD nRecords; //指出记录数。(头记录,GDI函数调用等记录)
WORD nHandles; //指出元文件使用图形对象的非默认句柄数量。
WORD sReserved;
DWORD nDescription; //描述串的大小
DWORD offDescription; //描述串在文件中的偏移量
DWORD nPalEntries; //调试板中条目的个数
SIZEL szlDevice; //指出以像素为单位的输出设备大小
SIZEL szlMillimeters; //以mm为单位输出的设备大小
DWORD cbPixelFormat; //描述串
DWORD offPixelFormat;
DWORD bOpenGL;
} ENHMETAHEADER;
四、字体
一、用于文本输出的函数:
1、TextOut (hdc, xStart, yStart, pString, iCount) ;
2、TabbedTextOut ( hdc, xStart, yStart, pString, iCount,iNumTabs, piTabStops, xTabOrigin) ;iNumTabs制表位数,piTabStops以像素为单位的制表位数。xTabOrigin平均字符宽度设置。
3、BOOL ExtTextOut(HDC hdc, int X, int Y, UINT fuOptions, CONST RECT *lprc, LPCTSTR lpString, UINT cbCount, CONST INT *lpDx);lpDx指定字符串中连续字符的间隔、NULL为默认。
4、int DrawText(HDC hDC, LPCTSTR lpString,int nCount, LPRECT lpRect, UINT uFormat );
5、int DrawTextEx(HDC, hdc, LPTSTR lpchText, int cchText, LPRECT lprc, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams);
二、逻辑字体
1、CreateFont 或CreateFontIndirect建立逻辑字体
2、GetTextFace (hdc, sizeof (szFaceName) / sizeof (TCHAR), szFaceName) ;获得字体名
3、GetTextMetrics (hdc, &textmetric) ;获得字体信息
三、
该函数为指定的设备环境设置图形模式。int SetGraphicsMode(HDC hdc, int iMode);
该函数用指定的方式修改与设备环境有关的全局转换。BOOL ModifyWorldTransform(HDc hdc, CONST XFORM *lpXform, DWORD iMode);
四、hPen = ExtCreatePen (iStyle, iWidth, &lBrush, 0, NULL) ;使用该函数正常地绘制线段。
五:轨迹
BeginPath {路径开始}
EndPath {路径结束}
StrokePath {绘制路径}
FillPath {填充路径}
StrokeAndFillPath {绘制并填充路径}
SelectClipPath 路径的运算
//在路径中可以使用的图形命令有:
AngleArc
Arc
ArcTo
Chord
CloseFigure
Ellipse
ExtTextOut
LineTo
MoveToEx
Pie
PolyBezier
PolyBezierTo
PolyDraw
Polygon
Polyline
PolylineTo
PolyPolygon
PolyPolyline
Rectangle
RoundRect
TextOut
六、字体效果
一、设置字体大小
LOGFONT lf;
ZeroMemory(&lf,sizeof(lf));
lf.lfCharSet=DEFAULT_CHARSET;
lf.lfHeight=m_iMineLength;
lf.lfWidth=m_iMineLength;
lf.lfWeight=1000;
HFONT hFont=CreateFontIndirect(&lf);
HFONT hOldFont=(HFONT)SelectObject(m_hMemDC,hFont);
DeleteObject(hFont);
二、输出透明底色字体
SetBkMode(hMemDc,TRANSPARENT);
TextOut(hMemDc,0,0,sNum,strlen(sNum));
三、居中输出
DrawText(hdc,str,&rt,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
//注意要同时DT_VCENTER|DT_SINGLELINE才能居中
posted on 2011-09-13 16:16
Yu_ 阅读(665)
评论(0) 编辑 收藏 引用 所属分类:
Windows程序设计