孙鑫《vc ++深入详解》第十章绘图控制

原创 2007年09月19日 22:32:00

1.绘制点

COLORREF SetPixel( POINT point, COLORREF crColor );
2.绘制矩形:
bool rectangle(LPCRECT  lpRect);
crect类重载了LPCRECT 操作符,其作用是将CRect转换为LPCRECT类型
operator LPCRECT( ) const;

//

Converts a CRect to an LPCRECT. When you use this function, you don't need the address-of (&) operator. This operator will be automatically used when you pass a CRect object to a function that expects an LPCRECT.

Example

void CYourView::OnInitialUpdate()
{
   // CWnd::GetWindowRect() takes a LPRECT, but we can
   // simply pass our CRect object because of the LPRECT
   // cast operator in the CRect class.

   CRect rect;
   GetWindowRect(rect);

   // Similarly, CWnd::MoveWindow() takes a LPCRECT but
   // the LPCRECT cast operator is used implicitly:

   MoveWindow(rect, FALSE);

   // ... more code here ...
}
 
当我传递的参数数值类型和所需要的类型不匹配,但编译和运行都正确的时候:可能是这些类型之间本来就可以互相转换,例如short
和int。但是如果参数类型是对象类型的话,就要考虑:它选择的是对象的构造方法进行的隐式转换还是有其他重载的操作。]
 

3.GetStockObject

The GetStockObject function retrieves a handle to one of the stock pens, brushes, fonts, or palettes.

HGDIOBJ GetStockObject(
  int fnObject   // stock object type
);

Parameters

fnObject
[in] Specifies the type of stock object. This parameter can be one of the following values.
Value Meaning
BLACK_BRUSH Black brush.
DKGRAY_BRUSH Dark gray brush.
DC_BRUSH Windows 2000/XP: Solid color brush. The default color is white. The color can be changed by using the SetDCBrushColor function. For more information, see the Remarks section.
GRAY_BRUSH Gray brush.
HOLLOW_BRUSH Hollow brush (equivalent to NULL_BRUSH).
LTGRAY_BRUSH Light gray brush.
NULL_BRUSH Null brush (equivalent to HOLLOW_BRUSH).
WHITE_BRUSH White brush.
BLACK_PEN Black pen.
DC_PEN Windows 2000/XP: Solid pen color. The default color is white. The color can be changed by using the SetDCPenColor function. For more information, see the Remarks section.
WHITE_PEN White pen.
ANSI_FIXED_FONT Windows fixed-pitch (monospace) system font.
ANSI_VAR_FONT Windows variable-pitch (proportional space) system font.
DEVICE_DEFAULT_FONT Windows NT/2000/XP: Device-dependent font.
DEFAULT_GUI_FONT Default font for user interface objects such as menus and dialog boxes. This is MS Sans Serif. Compare this with SYSTEM_FONT.
OEM_FIXED_FONT Original equipment manufacturer (OEM) dependent fixed-pitch (monospace) font.
SYSTEM_FONT System font. By default, the system uses the system font to draw menus, dialog box controls, and text.

Windows 95/98 and Windows NT: The system font is MS Sans Serif.

Windows 2000/XP: The system font is Tahoma

SYSTEM_FIXED_FONT Fixed-pitch (monospace) system font. This stock object is provided only for compatibility with 16-bit Windows versions earlier than 3.0.
DEFAULT_PALETTE Default palette. This palette consists of the static colors in the system palette.

Return Values

If the function succeeds, the return value is a handle to the requested logical object.

If the function fails, the return value is NULL.

4.CBrush::FromHandle

static CBrush* PASCAL FromHandle( HBRUSH hBrush );

Remarks

Returns a pointer to a CBrush object when given a handle to a Windows HBRUSH object. If a CBrush object is not already attached to the handle, a temporary CBrush object is created and attached. This temporary CBrush object is valid only until the next time the application has idle time in its event loop. At this time, all temporary graphic objects are deleted. In other words, the temporary object is valid only during the processing of one window message.

5.颜色对话框

CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL );

保存用户所选择的颜色:CHOOSECOLOR结构体类型的成员变量:m_cc.

typedef struct { 
  DWORD        lStructSize; 
  HWND         hwndOwner; 
  HWND         hInstance; 
  COLORREF     rgbResult; 
  COLORREF   * lpCustColors; 
  DWORD        Flags; 
  LPARAM       lCustData; 
  LPCCHOOKPROC lpfnHook; 
  LPCTSTR      lpTemplateName; 
} CHOOSECOLOR, *LPCHOOSECOLOR; 
注意书中出现的调试错误。
6.字体对话框

CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD

dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL,

CWnd* pParentWnd = NULL );

同样也有一个CHOOSEFONT的结构体类型的数据成员:m_cf来保存用户选择

 

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; WORD ___MISSING_ALIGNMENT__; INT nSizeMin; INT nSizeMax; } CHOOSEFONT, *LPCHOOSEFONT;

cfont类的CreateFontIndirect成员函数来根据指定特征的逻辑字体来初始化这个字体对象。

BOOL CreateFontIndirect(const LOGFONT* lpLogFont );

利用参数lplogfont指向的LOGFont结构中的一些特征来初始化对象

7.窗口无效

void Invalidate( BOOL bErase = TRUE );

书中程序出现的错误。

释放资源:CGdiObject类的DeleteObject函数来实现]

判断对象是否与某个资源相关联:利用CGdiObjectde 的数据成员m_ hObject来判断

(A HANDLE containing the HBITMAP, HRGN, HBRUSH, HPEN, HPALETTE, or HFONT attached to this object.),该变量保存了与CGdiObject

对象相关连的 Windows GDI 资源的句柄。DeleteObject可以释放这个资源。

8.selectobject

CPen* SelectObject( CPen* pPen );

CBrush* SelectObject( CBrush* pBrush );

virtual CFont* SelectObject( CFont* pFont );

CBitmap* SelectObject( CBitmap* pBitmap );

int SelectObject( CRgn* pRgn );

Return Value

A pointer to the object being replaced. This is a pointer to an object of one of the classes derived from CGdiObject, such as CPen, depending on which version of the function is used. The return value is NULL if there is an error. This function may return a pointer to a temporary object. This temporary object is only valid during the processing of one Windows message. For more information, see CGdiObject::FromHandle.

 

 

《VC++深入详解》孙鑫经典VC++视频教程

这里推荐孙鑫的视频,这部视频在《深入详解VC++》这本书的配套光盘里,个人觉得是最经典的不可多得的国人讲解的超高水平的VC++学习视频。视频共分20课,平均每课两个多小时。本套视频由孙鑫老师亲自授课录...
  • rainbow203
  • rainbow203
  • 2012年11月03日 15:12
  • 25870

孙鑫VC++深入详解视频及书籍评价

花了大概一个半月的时间,看完孙鑫老师的vc++深入详解视频及配套书,(由于机子上没有vb,所以没有观看activeX控件以及数据库访问这两部分),感想颇多: 首先,上课的内容是通过现场写程序、演示操...
  • thefutureisour
  • thefutureisour
  • 2012年11月21日 10:24
  • 5597

孙鑫视频VC++深入详解学习笔记(全)

Lesson1: Windows程序运行原理及程序编写流程 窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall与Lessone...
  • u010984552
  • u010984552
  • 2016年07月05日 16:08
  • 2872

孙鑫《VC++深入详解》完整版PDF 下载

非常不错的书,结合孙鑫视频看,效果很好。下载地址: http://pan.baidu.com/s/1sjBT1hV (链接更新时间:2015-08-28 00:59:03 一两年内应该有效)此书...
  • u011152007
  • u011152007
  • 2016年09月09日 17:10
  • 222

孙鑫VC++深入详解笔记

前言:最近感觉技术提升提来很吃力,主要还是因为以前的基础没有打牢,特别是多线程和数据库方面,所有准备重新学习一下基础。 如下文章转载自:http://www.cnblogs.com/gaoju...
  • bigtree_mfc
  • bigtree_mfc
  • 2017年04月20日 09:07
  • 1214

孙鑫 VC++深入详解第14课——TCP通信/UDP通信

用VC++来编写TCP 服务器/客户端的简单程序。 注意事项: 1.要加载ws2_32.lib链接库。 项目->属性->弹出属性页->连接器->输入->附加依赖项 2.要使用#include 头文件。...
  • misakahina
  • misakahina
  • 2014年02月02日 21:57
  • 1751

孙鑫 VC++深入详解第19课——动态链接库

1.动态链接库的编码过程 ①首先明确了在编译的时候,只编译C和CPP文件,然后根据include打开相应的.h文件 ② 在相应的C或者CPP文件中加入 #define TFFT_API extern...
  • misakahina
  • misakahina
  • 2014年03月12日 18:19
  • 858

孙鑫MFC深入详解 第十五章 多线程(二)

接(一)先来看看代码,如下: MultiThread4.cpp #include #include using namespace std ; DWORD WINAPI ThreadPro...
  • wanggao_1990
  • wanggao_1990
  • 2015年04月10日 16:24
  • 678

孙鑫 VC++深入详解——学习笔记

第1课 Windows程序内部运行机制 1.MFC生成的C++ 源文件中都有 StdAfx.h,此文件包含了常用的AFX函数的声明,其中有 afxwin.h,此文件包含了CRECT,CP...
  • xiongxuanwen
  • xiongxuanwen
  • 2015年02月13日 14:28
  • 7073

孙鑫C++学习笔记

孙鑫视频VC++深入详解学习笔记    VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 ...
  • u014162133
  • u014162133
  • 2015年06月20日 15:33
  • 1711
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:孙鑫《vc ++深入详解》第十章绘图控制
举报原因:
原因补充:

(最多只允许输入30个字)