posts - 34,comments - 2,trackbacks - 0
一、位图

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程序设计

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理