Graphic知识点摘记

时间:2021-12-03 11:56:45

对于程序的绘图操作,现将知识点摘记如下。


1.COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);该函数将指定坐标处的像素设为指定的颜色。

变形函数:public final void setPixel( Point pt, Color color )


2.CColorDialog 对象是具有用于显示系统定义颜色的列表的对话框。

数据成员:CColorDialog::m_cc
CHOOSECOLOR m_cc;
用于的结构自定义对话框的设置。
在构造 CColorDialog 对象之后,可以使用 m_cc 在调用 DoModal 成员函数之前设置对话框的各个方面。

构造函数:CColorDialog::CColorDialog
CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL );
构造 CColorDialog 对象。

参数

lrInit 默认颜色选择。 如果未指定任何值,则默认值为RGB (0,0,0) (黑色)。

dwFlags 自定义对话框的功能和外观的设置标志。 有关更多信息,请参见 Windows SDK的CHOOSECOLOR 结构。

pParentWnd 指针到对话框的父级或所有者窗口。


3.CHOOSECOLOR 结构。该结构包含了ChooseColor函数用于初始化颜色对话框的信息。在用户关闭对话框之后,系统返回关于用户选择的颜色信息。

typedef struct {
DWORD lStructSize;
HWND hwndOwner;
HWND hInstance;
COLORREF rgbResult;
COLORREF *lpCustColors;
DWORD Flags;
LPARAM lCustData;
LPCCHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} CHOOSECOLOR, *LPCHOOSECOLOR;

成员
lStructSize指定结构的长度(字节)

hwndOwner拥有对话框的窗口的句柄。该成员可以是任意有效的窗口句柄,或在对话框没有所有者时,可为NULL

hInstance
如果Flag成员设置了CC_ENABLETEMPLATEHANDLE标识符时,该成员是一个包含了对话框模板的内存对象的句柄。如果 CC_ENABLETEMPLATE 标识符被设置时,该成员是一个包含了对话框的模块句柄。如果上述两个标识符都未被设置,则该成员被忽略。

rgbResult
如果CC_RGBINIT标识符被设置时,该成员指定了对话框打开时默认的选择颜色。如果指定的颜色值不在有效的范围内,系统会自动选择最近的颜色值。如果该成员为0或CC_RGBINIT未被设置,初始颜色是黑色。如果用户单击OK按钮,该成员指定了用户选择的颜色。

lpCustColors
指向一个包含16个值的数组,该数组包含了对话框中自定义颜色的红、绿、蓝(RGB)值。如果用户修改这些颜色,系统将用新的颜色值更新这个数组。如果要在多个ChooseColor函数中保存这个新的数组,你应该为该数组分配静态内存空间。

Flags一个可以让你初始化颜色对话框的位集。当对话框返回时,它用来这些标识符来标识用户的输入。该成员可以为下列标识符的任意组合。

CC_ANYCOLOR对话框显示所有可用的基于基本颜色的颜色。

CC_ENABLEHOOK激活由lpfnHook成员指定的钩子程序。该标识仅用于初始化对话框时。

CC_ENABLETEMPLATE表示利用由hInstance 和 lpTemplateName 成员指定的对话框模板。该标识符仅用于初始化对话框。

CC_ENABLETEMPLATEHANDLE
表示hInstance成员标识一个包含了预加载的对话框模板的数据块。如果该标识被指定,系统会忽略 lpTemplateName 成员。该标识符仅用于初始化对话框。

CC_FULLOPEN让对话框显示额外的控件以使用户创建自定义的颜色。如果该标识未设置,用户必须点击【自定义颜色】按钮才能显示自定颜色控件。

CC_PREVENTFULLOPEN使自定义颜色按钮失效。

CC_RGBINIT让对话框默认使用由rgbResult成员指定的颜色

CC_SHOWHELP让对话框显示帮助按钮。hwndOwner成员必须在用户点击【帮助】按钮时发送HELPMSGSTRING消息的窗口

CC_SOLIDCOLOR让对话框仅显示基本颜色组成的纯色。

lCustData
指定应用程序自定义的数据,该数据会被系统发送给钩子程序。当系统的发送WM_INITDIALOG消息给钩子程序时,消息的lParam参数是一个指向CHOOSECOLOR结构的指针。钩子程序可以利用该指针获得该成员的值。

lpfnHook
指向CCHookProc钩子程序的指针,该钩子可以处理发送给对话框的消息。该成员只在CC_ENABLEHOOK标识被设定的情况下才可用,否则该成员会被忽略。

lpTemplateName指向一个NULL结尾的字符串,该字符串是对话框模板资源的名字。


4.CFontDialog可以使你向应用添加一个字体选择对话框。一个CFontDialog对象是一个带有当前安装到系统的字体列表对话框,用户可从列表中选择一种字体并将选择传递给应用。
数据成员
m_cf
一个用于定制CFontDialog对象的结构

构造函数

CFontDialog 构造一个CFontDialog对象操作。
构造函数原型如下:
CFontDialog::CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL );
构造一个对象,其中参数lplfInitial指向一个LOGFONG结构.如果该参数设置为NULL表示不设置初始字体。pdcPrinter指向一个代表打印机设备环境的DC对象,若设置该参数则选择的字体就为打印机所用。pParentWnd用于指定父窗口。通过调用DoModal()创建对话框,在返回后通过调用以下函数来得到用户选择:

操作

DoModal 显示对话框并使用用户选择。
GetCurrentFont 获取当前选定字体的名字。
GetFaceName 返回选择字体的字样名称。
GetStyleName 返回选择字体的风格名称。
GetSize 返回选择字体的点大小。
GetColor 返回选择字体的颜色。
GetWeight 返回选择字体的磅数。
IsStrikeOut 判断字体是否突出。
IsUnDerline 判断字体是否有下划线。
IsBold 判断字体是否是黑体。
IsItalic 判断字体是否是斜体。


5.CHOOSEFONT结构体
typedef struct {
    DWORD lStructSize;
    HWND hwndOwner;
    HDC hDC;
    LPLOGFONT lpLogFont;
    INT iPointSize;
    DWORD Flags;
    COLORREF rgbColors;
    LPARAM lCustData;
    LPCFHOOKPROC lpfnHook;
    LPCTSTR lpTemplateName;
    HINSTANCE hInstance;
    LPTSTR lpszStyle;
    WORD nFontType;
    INT nSi*;
    INT nSizeMax;
} CHOOSEFONT, *LPCHOOSEFONT;

CHOOSEFON结构体中有个成员lpLogFont,它是指向LOGFONT结构体变量的指针,就像上面所说,LOGFONT中包含了字体特征,例如,我们可以通过LOGFONT的lfFaceName得知字体名。


6.LOGFONT结构体
typedef struct tagLOGFONT {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;


7.ScreenToClient也就是Screen(屏幕坐标) 到 Client(客户区坐标)的转换。也就是说这个函数可以把你在屏幕上鼠标的位置转换为你打开的程序的客户区的坐标(位置)。
函数功能:该函数把屏幕上指定点的屏幕 坐标转换成用户坐标。
函数原型:BOOL ScreenToClient(HWND hWnd, LPPOINT lpPoint);
BOOL ScreenToClient(HWND hWnd ,// handle to window, LPPOINT lpPoint// screen coordinates );

hWnd
指向窗口的 句柄,此窗口的 用户空间将被用来转换。

lpPoint

指向POINT结构 指针,该结构含有要转换的屏幕坐标。

返回值

如果 函数调用成功,返回值为非零值,否则为零。

Windows NT

若想获得更多错误信息,请调用 GetLastError函数。

注释

该函数应用 hWnd参数标识的窗口和POINT结构给定的屏幕坐标来计算用户坐标,然后以用户坐标来替代屏幕坐标,新坐标是相对于指定窗口的领域的左上角。


8.UpdateData() 是 MFC窗口函数,用来 刷新数据的。

总的来说:操作系统会调用这个函数来初始化对话框中的数据,或者检索或者验证对话框中的数据。
简单说就是:如果Updatedata(TRUE) == 将控件的值赋值给成员变量;Updatedata(FALSE) == 将成员变量的值赋值给控件。
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
参数说明
bSaveAndValidate:标明那对话框是初始化(FALSE)还是数据恢复(TRUE)。


9.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。
BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);

hdcDest:指向目标设备环境的句柄。
nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。
nYOriginDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。
nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。
nHeightDest:指定目标矩形的高度,按逻辑单位表示高度。
hdcSrc:指向源设备环境的句柄。
nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。
nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。
nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。
nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。
dwRop:指定要进行的光栅操作。光栅 操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源 位图和目标位图等对象。参考BitBlt可了解常用的光栅操作码列表。


10.typedef    struct    tagBITMAP    {    
   
           LONG    bmType;                //必需为0  
           LONG    bmWidth;              //位图的宽度( Graphic知识点摘记以像素为单位)  
           LONG    bmHeight;            //位图的高度(以像素为单位)  
   
           /*指定每条光栅所占字节数。此值必须取偶数,  
              因为图形设备接口(GDI)默认为一个位图的位值组成一个2字节的整数数组。*/  
           LONG    bmWidthBytes;    
   
           WORD    bmPlanes;            //    位图调色板颜色数  
   
           WORD    bmBitsPixel;      //    一个点在每个调色板上接近的颜色位数  
   
           LPVOID    bmBits;            //   指向存储像素阵列的数组  
   
   }    BITMAP;


11.SetWorldTransform 该函数为指定的设备环境设置全局空间和页面空间之间的二维的线性转变,此转换可用于输出缩放、旋转、倾斜变换或平移变换的图形。
函数原型:
BOOL SetWorldTransform(
HDC hdc ,// 设备上下文句柄
CONST XFORM*lpXform// 变换数据
);
hdc:指向设备环境的句柄。
lpxform:指向XFORM结构的 指针,此结构含有转换数据。
返回值:如果 函数调用成功,返回值为非零值,否则为零。



12.CMetaFileDC  Windows图元文件包含了一序列 图形设备接口(GDI)命令,可以用来创建需要的图像或文本。
为了实现Windows 图元文件,首先要创建一个CMetaFileDC 对象。调用CMetaFileDC 构造函数,然后调用Create成员函数,以创建Windows图元文件 设备上下文,并将它附加给CMetaFileDC 对象。
下一步将希望重复的CDC GDI命令序列发送给CMetaFileDC 对象。仅仅那些能够创建输出的GDI命令,例如MoveTo或LineTo,才能够使用。
在给 图元文件发送了期待的命令后,调用Close成员函数,它将关闭图元文件 设备上下文,并返回图元文件的句柄。之后就可以处理CMetaFileDC 对象。
CDC::PlayMetaFile能够使用 图元文件的句柄,来重复播放图元文件。这个 图元文件也可以由Windows函数,如 CopyMetaFile进行操作,它将把图元文件拷贝到磁盘中。
当不再需要 图元文件时,使用DeleteMetaFile Windows函数将其从内存中删除。
也可以实现CMetaFileDC 对象,以便它能够处理输出调用及GDI属性调用,如 GetTextExtent。这样, 图元文件就有更多的弹性,并能够更容易重新使用一般的GDI代码,它经常包含了输出和属性调用的混合。CMetaFileDC类从CDC继承了两个 设备上下文,m_hDC和m_hAttribDC。m_hDC 设备上下文处理所有的CDC GDI输出调用,而m_hAttribDC设备上下文处理所有的CDC GDI属性调用。一般而言,这两个 设备上下文属于同一个设备。在CMetaFileDC情形下,属性DC缺省时设置为NULL。
另创建一个 设备上下文,以指向屏幕、打印机或不同于 图元文件的其它设备,然后可以调用SetAttribDC成员函数,将新设备上下文与m_hAttribDC相关联。GDI调用的信息将直接发送到新的m_hAttribDC值中,而输出GDI调用也将送给代表 图元文件的m_hDC值。