MFC知识点(自己整理的,只供参考)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
知识点:不是很全面,只供参考
第一章
Windows应用程序使用的界面是由各种图形元素组成的图形界面(GUI)。
Windows提供了大量预定义的用C语言编写的函数,这些函数就叫做API(Application Programming Interface)函数。
在Windows应用程序中,存在着许多与DOS应用程序不同的复杂对象,例如窗口、按钮、滚动条等等。Windows把为这种复杂对象所定义的标识叫做句柄。
常用的句柄类型:HWND 窗口句柄,HDC 图形设备环境句柄,HINSTANCE 当前程序应用实例句柄,HBITMAP 位图句柄,HICON 图标句柄,HCURSOR 光标句柄,HBRUSH 画刷句柄,HPEN 画笔句柄,HFONT 字体句柄,HMENU 菜单句柄,HFILE 文件句柄
事件的描述是一个消息
消息的结构:
typedef struct tagMSG
{
HWND hwnd; //产生消息的窗口句柄
UINT message;//消息的标识码
WPARAM wParam;//消息的附加信息1
LPARAM lParam;//消息的附加信息2
DWORD time; //消息进入消息队列的时刻
POINT pt; //表示发送该消息时鼠标的位置
}MSG;
消息循环:
while(GetMessage(&msg,NULL,NULL,NULL))//系统处理了消息后返回
{
TranslateMessage(&msg);//把键盘消息翻译成字符消息
DispatchMessage(&msg);//把消息派发给Windows系统
创建窗口的三个步骤:
注册窗口类:
RegisterClass(&wc);
创建窗口:
hwnd=CreateWindow( lpszClassName,
"Windows",
WS_OVERLAPPEDWINDOW,
120,50,800,600,
NULL, NULL, hInstance,
NULL);
显示窗口:
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
大题:用函数封装Windows程序(P16)
第二章
类封装:
窗口类:
class CFrameWnd
{
public:
HWND hWnd;///数据成员
public:
int RegisterWindow(); //定义及注册窗口类
void Create(LPCTSTR lpClassName,
LPCTSTR lpWindowName);//创建窗口
void ShowWindow(int nCmdShow);//显示与更新窗口
void UpdateWindow();
};
应用程序类:
class CWinApp
{
public:
CFrameWnd*m_pMainWnd;//以窗口类的对象作为数据成员
public:
BOOL InitInstance (int nCmdShow);//在初始化函数中创建及显示窗口
int Run();//消息循环
};
窗口函数的封装
——消息映射
用DECLARE_MESSAGE_MAP来声明消息映射表
用BEGIN_MESSAGE_MAP
BEGIN_MESSAGE_MAP(类名称,基类名称)
ON_XXXX 例ON_WM_PAINT()
END_MESSAGE_MAP
来实现消息映射表
大题:类封装Windows应用程序
第三章
应用程序的框架由两个对象组成:应用程序类CWinApp的派生类对象和框架窗口类CFrameWnd的派生类对象,后者作为一个成员对象嵌在前者之中。
应用程序的文档/视图结构:
MFC把早期窗口类的功能分解成:数据存储、管理部分,数据显示与用户交互部分,管理窗口框的大小、标题、菜单条、状态条的窗口部分,进而形成了三个类:文档类CDocument、视图类CView和窗口类CFrameWnd。这三个类统一由一个叫文档模板的对象来管理。应用程序类对象是上述所有对象的容器和消息传递中心。
两种文档/视图结构:单文档界面(SDI)应用程序、多文档界面(MDI)应用程序
视图类CView的派生类中连个重要的函数:GetDocumment()用于获得文档类对象的指针,是视图类对象与文档类对象进行联系的通道;OnDraw()用来更新视图的显示
文档模板类CDocTemplate有两个派生类:单文档模板类和多文档模板类
应用程序类的派生类:初始化BOOL CMyApp:InitInstance()
{
。。。。。
CSingleDocTemplate *pDocTemplate,// 声明文档模板指针
pDocTemplate=new CSingleDocTemplate(//文档模板对象
IDR_,MAINFRAME,//文档模板使用的资源ID
RUNTIME_CLASS(CMyDoc),//创建文档对象如何关联
RUNTIME_CLASS(CMainFrame),//创建SDI框架窗口对象
RUNTIME_CLASS(CMyView));//创建视图对象
AddDocTemplate(pDocTemplate);//将文档模板加入模板链表
M_pMainWnd->ShowWindow(SW_SHOW);
M_pMainWnd->UpdateWindow();
Return TRUE;
}
第四章
用来在显示设备硬件与程序员之间进行隔离的虚拟绘图环境叫做图形设备描述环境DC。它屏蔽了显示设备的特殊性,给程序员提供了一个统一的绘图界面。
GDI(图形设备接口)是用户可以调用的一套用于绘图操作的函数集。
DC的获取
HDC GetDC(HWND hWnd) //获取窗口DC
int Release(HWND hWnd,HDC hdc) //释放窗口DC
CDC类:
CDC类中的一些常用的成员函数:Arc()画圆弧、BitBlt()、Ellipse()、LineTo()、MoveTo ()、Rectangle()画矩形、RoundRect()画圆角矩形、SelectObject()、SetTextColor()、StretchBlt()把一个DC中的位图复制到另一个DC中,但可以改变位图的长宽比、TextOut ()
CDC类派生了CClientDC (窗口客户区的设备描述环境)CMetaFileDC (图元文件的设备描述环境)CPaintDC(窗口用户区的设备描述环境)CWindowDC (整个窗口内绘图的设备描述环境)等在不同场合下应用的CDC类
画笔是绘制线条的工具,它CPen类的对象。
CPen类的构造函数为:
CPen(int style,int width,COLORREF color);
因此在使用自己定义的画笔时,要使用CDC的函数把默认画笔替换为自己定义的画笔,这个函数的原型为:
CPen* SelectObject( CPen* pPen );
使用画笔的代码片段为:
//创建新画笔
CPen newPen(PS_SOLID,width,color);
//载入新画笔并把旧画笔存入指针
CPen*oldPen=pDC->SelectObject(&newPen);
//绘图代码
…………
//在使用新画笔绘制线条之后,恢复原画笔
pDC->SelectObject(oldPen);
画刷是CBrush类的对象,是用来填充封闭图形内部的工具。
CBrush类的构造函数有两个:CBrush(COLORREF color); CBrush(int style,COLORREF color); 使用画刷的代码片段为:
//创建新画刷