090912(星期六):MFC

来源:互联网 发布:网易的for mac 版战网 编辑:程序博客网 时间:2024/04/28 17:19

一、        MFC中的Callback函数

1 如果类的成员函数是个Callback函数,必须将其置成static型以去掉隐藏的this指针。凡是由程序员设计而由Windows系统呼叫的函数,统称为Callback函数。某些Windows系统函数需要一个Callback函数作为它的一个参数,如SetTimerLineDDAEnumObjects。通常API在做完某种活动后或满足一定状态时调用Callback函数。

 

2 EnumObjects发现某个Device ContextGDI object符合指定的Type时,调用Callback函数。Callback函数必须是全局的函数或是类的一个static函数。

 

 

二、        Idle的处理

鉴于CThread::Run()中已经把MessageGetDispatchIdle都包容了,要使程序在Idle时做些事情,简单的做法就是重新实现virture函数OnIdle()

BOOL CMyWinApp::OnIdle(LONG lCount)

{

CMyFrameWnd* pWnd = (CMyFrameWnd*)m_pMainWnd;

pWnd->IdleTimeHandler(lCount);

return TRUE;

}

 

 

三、        Document Template的意义

Document一般是放置程序的Data StructureView是显示Document的内容,Data有体有面,View就是Document的面。在Document中数值的处理用各种设计结构,链表,树,图等等,而数值在表现时就必须使用绘图工具:坐标,画刷颜色,画弧线,字体等,这些都在View中完成。其次View还负责对UI Message的收集处理。

view的表现舞台时Frame,这样的切割是为了让View独立于各种视窗,比如对MDISDIOLE Document Frameview都不需要变化,只要有Frame的变化就可以了,提高了View的独立性。使Document/View结构更稳定得处理数据。

pDocTemplate = new CMultiDocTemplate(  //w6 CMultiDocTemplate规划Doc

                                                 //ViewDocFrame三者的关系

              IDR_SCRIBTYPE,

              RUNTIME_CLASS(CScribbleDoc),

              RUNTIME_CLASS(CChildFrame), // custom MDI child frame

              RUNTIME_CLASS(CScribbleView));

AddDocTemplate(pDocTemplate);

如果需要支持多种文件格式,如textbitmap,就需要多个CMultiDocTemplate对象和多个这样的链接操作。

View就是观看Document的镜头。

原创粉丝点击