1.ClassWizard
Message Maps选项卡
可以通过此选项卡添加消息处理函数、成员函数及新类,还可以删除成员函数,以及对成员函数进行编辑。该选项卡上各控件含义及作用如下所述。
Project下拉列表框给出当前工程名称。
Class name下拉列表框显示当前工程中包含的类,用户可以选择任何存在于当前工程中的类,为其添加消息处理函数等。
Object IDs列表框列出当前选择的类所含的所有资源的ID号,包括菜单项、对话框控件等,列表中的第一项总是当前的类名。
Messages列表框出对应于Object IDs框中所选中的当前可处理的消息,以及针对当前类可以被重写的MFC虚函数。
Member functions列表杠列出当前选择的类所包含的甩有成员函数。其中,前面标注有“V”字符的是虚函数,标注“W”字符的是Windows消息处理函数。
Add Class按钮允许用户在工程中添加一个新类。新类可以是自己创建,也可以从ActiveX库中选取。
Add Function按钮允许用户向Member Functions列表框中添加一个新的消息处理函数或重载基类的虚函数。
Delete Function按钮允许用户删除Member Functions列表杠中所选的函数。
Edit Code按钮打开编辑窗口,允许用户对Member Functions框中所选中的项进行编辑。
Member Variables选项卡
通过此选项卡,我们可以加入与对话框上的控件相关联的成员变量,以便程序利用这些成员变量与对话杠上的控件进行信息交换。
Control IDs项显示对话框中所具有的控件的ID号;type项表示成员变量的类型;Member项表示成员变量的名字。
Add Variable 按钮用于给选定的控件添加成员变量。
Delete Variable 按钮用于删除选定控件的成员变量。
Update Columns:当数据源中的表结构发生变化时,单击此按钮,即可更新相应的记录集类,以便与最新的表结构保持一致。
Bind All按钮用于把数据库内指定表中的字段与记录集类相应的数据成员一一绑定。默认情况下,ClassWizard基于每个字段的名称确定记录类内相应的数据成员名称。
Automation选项卡
此选项卡允许用户加入方法或属性,以增强程序的Automation功能。
External names列表框列出已加到当前类中的方法及属性外部名。这些名字供Automation客户程序使用。
Implementation文本框显示External names框中选中的方法及属性在C++类中是怎样实现的:S表示固定属性,C表示自定义属性,M表示方法,粗体表示默认的属性。
Add Method按钮用于给类添加新的Automation方法。增加或删除方法时,ClassWizard自动更新映射表。此项只对支持Automation的类有效。
Add Property按钮用于给类添加新的Automation属性。增加或删除性性时,Class Wizard自动更新映射表,此项只对支持Automation的类有效。
Delete按钮用于删除External names框中选定的方法或属性名。如果属性是用Get/Set方式访问的,必须手工删.cpp文件里的Get和Set成员函数。
Data Binding按钮用于指定Automation控件支持的数据绑定层次。
ActiveX Events选项卡
External names列表框列出已加到当前类中的成员函数与成员变量名。这些名字供Automation客户程序使用。
Implementation文本框显示External names框中选中的方法及属性在C++类中是怎样实现的:S表示固定属性,C表示自定义属性,M表示方法,粗体表示默认的属性。
Add Event按钮允许用户加入Automation事件。该事件用于类与该类容器之间的通信。
Delete按钮用于删除选中的Automation事件。
Class Info选项卡
通过此选项卡,用户可以观察当前工程中类的有关信息。
File Details显示当前类的文件及资源ID号等信息。
Message filter下拉列表框,列出对当前选中的类有效的所有消息分类,这里是按照消息所属窗口或对话框类型进行分类的。
Foreign class 下拉列表框的内容由当前选中类的类型决定。如果当前选中的类是对话框、有格式视图或记录集视图,那么此框列出所有与选中的类相关联的外部类名。在其他情况下,则显示为None
Foreign variable框列出与当前选中的类相关的所有外部变量。此选项一般用于数据库类。在编辑记录集视图时,可以选取相关的记录集,并可以输入一个新的变量名。
2.消息映射机制
MFC消息映射机制具体实现方法是:在每个能接收和处理消息的类中,定主我一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可以知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。
3.SDK全局函数实现画线
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL)
LineTo(hdc,point.x,point.y);
::ReleeaseDC(m_hWnd,hdc);
4.CDC类实现画线功能
CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
5.CClientDC类实现画线功能
CclientDC派生于CDC类。
CclientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
6.CWindowDC类实现画线功能
可以获得整个窗口的DC
CWindowDC派生于CDC类。
CclientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
7.Cpen类
画笔的宽度要小于等于1,虚线才有效。
CPen pen(PS_SOLID,1,RGB(255,0,0));
CCLientDC dc(this);
CPen * pOldpen=dc.SelectObject(&pen);
….
dc.SelectObject(pOldpen);
8.使用画刷绘图
填充鼠标两个点的矩形区域。
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
9位图画刷
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
10.使用透明画刷
CClientDC dc(this);
CBrush *brush=CBrush::FromHandle((HBRUSH)::GetStockObject(NULL_BRUSH));
CBrush *oldbrush=dc.SelectObject(brush);
dc.Rectangle(CRect(m_ptOrigin,point));
dc.SelectObject(oldbrush);
11.静态成员
静态成员函数只能访问静态成员变量。静态成员函数属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员函数的。
静态成员变量必须进行初始化。
12.绘制连续线条
利用WM_MOUSEMOVE
CClientDC dc(this);
if(m_Draw==TRUE)//判断鼠标弹起还是按下
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOrigin=point;
}