MFC学习注意

一个最简单的MFC必须有     两个类   一个CMyApp的全局对象

class CMyApp : public CWinApp
{
public:
    virtual BOOL InitInstance ();
};

class CMainWindow : public CFrameWnd
{
public:
    CMainWindow ();

protected:
    afx_msg void OnPaint ();
    DECLARE_MESSAGE_MAP ()
};

以上位于头文件中

CMyApp myApp;

以上位于cpp中

 

完成一个消息响应有四步

1、定义消息值,系统的已经定好了

2、CFrameWnd继承类中声明

3、cpp中消息映射

4、cpp中定义消息函数

拆解消息响应

 

单文档示图

Frame中接收数据,取得一个doc类的指针,把数据赋值给这个指针的参数。View类中的OnDraw函数中也绑个doc类的指针,通过这个指针把数据在View中显示出来

多线程

线程属于进程 线程和别的进程平均分配cpu时间。进程有资源什么的

MFC把线程分为UI线程和工作者线程。从分时间片上来讲是一样的。UI线程能成为一个窗口,工作者线程不能。UI线程接收数据到一个缓冲环。由worker线程从环中读。因为是通过消息接收来实现接收数据。而消息是发线窗口的。worker没窗口。

worker线程能自己挂起,但不能自己唤醒

怎么看一个大型程序源码

一、看看这软件怎么玩的,就是看看需求

二、三个架构

        1、类架构 看类的继承关系  画个图

        2、对象的创建图

        3、程序架构,流程图。以对象为单位 一个对象调用另一个对象

哪是第一个对象?

根据消息来找

对一个函数设断点,再go,再在call stack,调用的栈结构。看看谁调的他

怎么封一个类

数据private或protected 成员函数 public

View类中有OnLButtonDown消息响应函数,在这个函数中 CSquaresDoc *pDoc = GetDocumet ();调用View类中的GetDocume函数得到Doc类的一个指针

CSquareDoc * CSquaresView::GetDocument()

{

       ASSERT(m_pDcoumetn->IsKindOf(RUNTIMe_CLASS)CSquaresDoc)));

      return (CSquaresDoc*)m_pDocumetn;

}

下面注意

COLORREF clrCurrentColor = pDoc->GetCurrentColor();

他是调用Doc类中的函数GetCurrentColor,不是直给Doc类的变量赋值,如果直接赋值Doc类的哪个变量就得public。通过GetCurrentColor函数返回m_clrCurrentColor的值

再调用pDoc->SetQquar(i, j, clrCurrentColor);函数。始终在View操作Doc
在SetQquar里先赋值,再UpdateAllViews(NULL),刷屏导致OnDraw函数
OnDraw通过GetDocument得到Doc的指针,画什么通过文档的内窗口决定
 
串行化据说对写文件很方便
STATIC在C++中的作用
在编程中需要在同一类的不同对象中进行数据交流。在一个类不同对象中间有一种类似小全局的数据类型所以用到static,静态数据成员。写类时写在类里,生成时在对象外。对象中找不到他。成员函数写法上隐藏参数,调用时用this指针。普通的成员函数为处理对象要传个this。先有静态数据成员,后有静态数据函数。他没this了。这块有点乱
到了windows时线程没this。全局没this。静态也没this。所以用类做多线程,用静态函数 所能成员用static
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值