分类: [科锐]

63_MFC其它

作业讲解补充 CAD支持图形化:抽象类五个步骤,图形类五个步骤 不能序列化抽象类的原因:IMPLEMENT_SERIAL宏里面在new对象 可以改成非纯虚函数,不推荐 注释掉两个宏,如果抽象类没有成员需要序列化就不用写实现,如果有就自己把宏实现修改为不new 把图形数据放在CDOC里面,使用MFC框架提供的GetDocument获取数据 CDOC里面实现序列化函数 界面和数据分离 CDoc是用来处理数据代码 CView是用来处理界面代码的 CObject是什么类(RTTI) IsKindOf( RUNTIME_CLASS(是否这个的类名)),返回值布尔 CRuntimeClass pOj* = CObject ......

62_序列化

序列化 作用 读档(反序列化):把文件中的对象读取到内存–对象的个数和类型信息 存档(序列化):把内存中对象保存到文件 流行方式 使用XML存储序列化 纯C++使用 单个类的时候 存档 应该存储对象的个数到最前面 常规做法是类对象提供函数写文件,对输出运算符做重载 存档的时候使用二进制存 对象能存进去也应该能读出来 读档 使用堆申请空间,读取文件中的对象,因为栈不能确定读取的大小 运算符重载 多个类的时候 存档 不知道申请的是什么类对象,需要把类的类型信息存进去 ......

61_命令设计模式(栈撤销重做)

作业讲解 选中手动判断点是否在矩形范围内,Crect.PtInRect,应该使用NormalizeRect先规范化 Remarks Determines whether the specified point lies within CRect. A point is within CRect if it lies on the left or top side or is within all four sides. A point on the right or bottom side is outside CRect. Note   The rectangle must be normalized or this function may fail. You can call NormalizeRect to normalize the rectangle before calling this function. 撤销重做 命令模式设计:动作是可以被封装,保存, ......

60_CAD按钮自绘、选择、移动、选择、删除

按钮自绘 步骤 Owner draw设置为true之后需要自己绘制按钮 子类化按钮 实现虚函数DrawItem LPDRAWITEMSTRUCT里面有DC Hdc转cdc CDC dc; dc.Attach(hdc); dc.detach(hdc); picture control显示图片控件 Spy++用的这个 选择 思路 鼠标点的时候画出一个多边形 CRgn::CreatePolygonRgn(LPPOINT lpPoints, int nCount. Int nMode)//点的数组,个数,填充方式 CRgn::ptInRect 鼠标按下的点有没有在这个多边形范围内 实现 给标志是否处于选择模式(int) 抽象基类虚函数判断是否选中矩形 特殊的图形类 ......

59_画笔画刷

画笔画刷 都是(GDI)graphics device interface图形设备接口对象 画笔的封装的类CPen 创建一个画笔 CPen pen; pen.CreatePen(PS_SOLID, 1, RGB(255, 255, 0)); //风格,粗细,三原色 pDC->SelectObject(pen); //dc选择创建的画笔 两种画笔类型 COSMETIC(修饰画笔)位图:会失真 PS_GEOMETRIC (几何画笔) 矢量图,不会失真 画刷类CBrush 创建一个填充画刷, CBrush brush; //画刷 brush.CreateSolidBrush(RGB(0, 255, 0)); //创建已RGB填充颜色的画笔 pDC->SelectObject(brush); 创建一个阴影画刷 CBrush brush ......

58_类工厂

作业讲解 都响应command消息,给四个类都添加事件处理,看谁先来就能说明是否能响应和顺序 Frida分析程序行为的 X64dbg 为什么:下个断点栈回溯,第4给 GetActiverView()处说明了顺序,把this指针拖过去。Doc在view里面 为什么这么设计:猜测离界面最近的先来,离界面最远的后来 课程内容 类工厂 抽象实现 把结构体共有属性抽象成抽象基类 基类有SET GET函数成员,纯虚函接口绘制图形 派生类实现 把视图添加抽象基类链表与当前抽象基类指针用来保存已有图形和当前图形 鼠标按下的时候根据当前菜单选择的图形类型创建 ......

57_单文档画直线双缓冲

作业讲解 图形化用户输入数据选择最小化,好检测用户输入是否正确 课程内容 单文档对话框 四个类 APP:初始化 VIEW:单文档客户区:空白区域 Frame:非客户区,整个窗口。标题,菜单,工具栏 什么时候绘图 在SDK中,就是在WM_PAINT消息中响应 在MFC中,在onDraw虚函数来画,本质上来自于onPaint,它又来自WM_PAINT 在哪里绘图 通过获取DC绘图 MFC对DC的封装 CDC 内存DC:,CreateCompatibleDC 在内存中绘图 CClientDC GetDC 在客户区绘图,无视无效区 CPaintDc BeginPaint 在客户取绘图,绘制 ......

56_MFC单选框、复选框、列表框、列表控件的使用

作业讲解 自动添加类,先画好对话框,然后添加类 常见控件使用 单选框(Radio Button):CButton类 分组:把一组的第一个设为TRUE,直到遇到下一个为止 复选框(Check Box) 可以设置三种状态 成员类型bool Combobox组合框 属性样式 简单 下拉 下拉列表 修改组合框大小 绑定:CcomboBox类上 添加复选框值AddString 设置当前选中的SetCursel(索引); 获取当前选中的索引GetCurSel() 根据索引值获取内容:GetLBText(索引,CString) Listbox ......

55_子类化和DDX

作业讲解 按键重写虚函数PreTranslateMessage DDX SDK的控件使用方式还是能在MFC上使用 MFC获取窗口的窗口句柄:GetSafeHwnd,设置文本SDK,SetDlgItemText 设置文本WM_SETTEX与SendMessage SetWindowText MFC控件API设置文本 SetDlgItemText(控件ID,字符串) GetDlgItem(控件ID),返回值为CWnd* FromHandle(SetDlgItemText(控件ID,字符串)),转换m_hWnd为CWnd* 作用:简化MFC控件和SDK控件的使用方式 原理:把文本框的内容绑定一个成员变量上 使用 设置 类向导成员变量选择 ......

54_手工建立MFC与MFC消息响应

手工建立最小MFC对话框 新建CMyDialog类,继承CDialog,说明性文件直接类名,头文件在MSDN往下翻 通过MFC生成的项目知道,DoModal方法创建模态对话框。 选择Class Member,选择类成员函数。 入口函数通过生成MFC项目对话框查看知道CDIalogApp继承CWinApp,重写InitInstance 出不来的原因,pThread没有获取到,AfxGetThread()时间很早 需要使用全局对象构造,用来初始化资源 ASSERT错误,点重试会断在错误的地方 这里为对话框的资源没有创建 通过MFC的工程对话框ID值去搜索知道把ID作为参数传给父类构造 至此最小MF ......