《C语言实例教程(PDF格式)》第115章


成员函数CreateHatchBrush创建一个阴影刷子,其原型如下:
BOOL CreateHatchBrush( int nIndex; COLORREF crColor );
…………………………………………………………Page 543……………………………………………………………
参数nIndex指定了刷子的样式,它可以为以下常量之一:
HS_BDIAGONAL: 由左向右下斜45 
度的阴影线
HS_CROSS : 水平和垂直的交 
叉线
HS_DIAGCROSS: 45度的斜交叉线
HS_FDIAGONAL: 由左向右上斜45 
度的阴影线
HS_VERTICAL : 垂直阴影线
参数crColor指定和阴影线所使用的前景色。
成员函数CreatePatternBrush以一个指向CBitmap对象的指针为参 
数,它使用该CBitmap所代表的位图的左上角8像素" 8像素的区域来 
创建一个图案刷子。
l 注意:
一个刷子所使用的 图案的大小总是8像素 8像素大小。即使提供 
l " 
给成员函数CreatePatternBrush的位图大于这个大小,也仅有左 
上角的8像素" 8像素被使用。
示例程序BrushDemo演示了各种刷子的使用,在工程包括了两个位图 
资源IDB_BRUSH1和IDB_BRUSH2,分别如图9。5所示。
IDB_BRUSH1 IDB_BRUSH2
图9。 5 在工程BrushDemo中使用的位图资源
程序BrushDemo的代码清单如下:
#include
#include
#include
…………………………………………………………Page 544……………………………………………………………
#define IDB_BRUSH1 101
#define IDB_BRUSH2 102
// 派生应用程序类
class CMyApp : public CWinApp

public:
virtual BOOL InitInstance();
};
// 派生窗口类
class CMyWnd : public CFrameWnd

protected:
// 声明消息处理函数
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP();
};
// 初始化应用程序实例
BOOL CMyApp::InitInstance()

// 创建应用程序的主窗口
CMyWnd *pWnd=new CMyWnd;
pWnd…》Create(NULL; 〃刷子示例〃);
// 显示应用程序主窗口并刷新其客户区
pWnd…》ShowWindow(SW_SHOW);
pWnd…》UpdateWindow();
// 在主窗口关闭时终止应用程序的执行线程
…………………………………………………………Page 545……………………………………………………………
m_pMainWnd=pWnd;
return TRUE;

// 声明唯一的应用程序对象
CMyApp MyApp;
// 应用程序主窗口的消息映射
BEGIN_MESSAGE_MAP(CMyWnd; CWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
// 应用程序主窗口的重绘函数
void CMyWnd::OnPaint()

// 获得窗口的客户区设备上下文句柄
CPaintDC dc(this);
// 更改设备上下文所使用的当前字体,使之更适合于文本输出
LOGFONT lf;
dc。GetCurrentFont()…》GetLogFont(&lf);
lf。lfHeight=…12;
lf。lfWidth=0;
strcpy(lf。lfFaceName; 〃宋体〃);
CFont font; *pOldFont;
font。CreateFontIndirect(&lf);
pOldFont=dc。SelectObject(&font);
// 创建一个原色刷子

CBrush br; *pOldBrush;
…………………………………………………………Page 546……………………………………………………………
br。CreateSolidBrush(RGB(128; 0; 128));
pOldBrush=dc。SelectObject(&br);
dc。Rectangle(10; 10; 160; 110);
dc。SelectObject(pOldBrush);
br。DeleteObject();
dc。TextOut(10; 115; 〃原色刷子〃);

// 创建一个具有样式 HS_BDIAGONAL 的刷子

CBrush br; *pOldBrush;
br。CreateHatchBrush(HS_BDIAGONAL; RGB(128; 0; 128));
pOldBrush=dc。SelectObject(&br);
dc。Rectangle(180; 10; 330; 110);
dc。SelectObject(pOldBrush);
br。DeleteObject();
dc。TextOut(180; 115; 〃HS_BDIAGONAL〃);

// 创建一个具有样式 HS_CROSS 的刷子

CBrush br; *pOldBrush;
br。CreateHatchBrush(HS_CROSS; RGB(128; 0; 128));
pOldBrush=dc。SelectObject(&br);
dc。Rectangle(350; 10; 500; 110);
dc。SelectObject(pOldBrush);
br。DeleteObject();
dc。TextOut(350; 115; 〃HS_CROSS〃);
…………………………………………………………Page 547……………………………………………………………

// 创建一个具有样式 HS_DIAGCROSS 的刷子

CBrush br; *pOldBrush;
br。CreateHatchBrush(HS_DIAGCROSS; RGB(128; 0; 128));
pOldBrush=dc。SelectObject(&br);
dc。Rectangle(520; 10; 670; 110);
dc。SelectObject(pOldBrush);
br。DeleteObject();
dc。TextOut(520; 115; 〃HS_DIAGCROSS〃);

// 创建一个具有样式 HS_FDIAGONAL 的刷子

CBrush br; *pOldBrush;
br。CreateHatchBrush(HS_FDIAGONAL; RGB(128; 0; 128));
pOldBrush=dc。SelectObject(&br);
dc。Rectangle(10; 140; 160; 240);
dc。SelectObject(pOldBrush);
br。DeleteObject();
dc。TextOut(10; 245; 〃HS_FDIAGONAL〃);

// 创建一个具有样式 HS_VERTICAL 的刷子

CBrush br; *pOldBrush;
br。CreateHatchBrush(HS_VERTICAL; RGB(128; 0; 128));
pOldBrush=dc。SelectObject(&br);
…………………………………………………………Page 548……………………………………………………………
dc。Rectangle(180; 140; 330; 240);
dc。SelectObject(pOldBrush);
br。DeleteObject();
dc。TextOut(180; 245; 〃HS_VERTICAL〃);

// 创建一个使用位图图案的刷子

CBitmap bitmap;
bitmap。LoadBitmap(IDB_BRUSH1);
CBrush br; *pOldBrush;
br。CreatePatternBrush(&bitmap);
pOldBrush=dc。SelectObject(&br);
dc。Rectangle(350; 140; 500; 240);
dc。SelectObject(pOldBrush);
br。DeleteObject();
dc。TextOut(350; 245; 〃使用位图图案创建的刷子之一〃);


CBitmap bitmap;
bitmap。LoadBitmap(IDB_BRUSH2);
CBrush br; *pOldBrush;
br。CreatePatternBrush(&bitmap);
pOldBrush=dc。SelectObject(&br);
dc。Rectangle(520; 140; 670; 240);
dc。SelectObject(pOldBrush);
br。DeleteObject();
…………………………………………………………Page 549……………………………………………………………
dc。TextOut(520; 245; 〃使用位图图案创建的刷子之二〃);

// 恢复设备上下文原有的 GDI 绘图对象
dc。SelectObject(pOldFont);

小说推荐
返回首页返回目录