MFC学习笔记(4)

2011-5-4

 

在哪里产生窗口?

CMainFrame 类的成员函数:

virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

在哪里写处理消息的方法?

InitInstance() 方法的最后, 有:

         // 主窗口已初始化,因此显示它并对其进行更新

         pMainFrame->ShowWindow(m_nCmdShow);

         pMainFrame->UpdateWindow();

 

从孙鑫vc++视频lesson 3中的 011258 开始讲“消息循环”的内容。

 

CWinThread :: Run 里完成消息循环

这个Run是在AfxWinMain里被调用的。由 pumpMessage 获得消息

 

AfxEnddeferRegisterClass 函数里,Cwnd的消息处理函数是DefWindowProc;

 

 

VS2008 中如何添加响应消息和删除消息?

在类视图先选中你要添加的类,然后在属性框(如果没有属性框,可以对着该类点击右键,选择“属性”)选中消息,后点击添加即可。

 

MFC的文档类CDocument和视图类Cview

设计目的:数据的表示和视图分离

 

数据的存储由 Cdocument 类负责,显示由 Cview 负责。

 

CtestApp.initInstance()里把

窗口、文档和显示结合在一起,以下是我的程序InitInstance() 里的代码:

 

CMultiDocTemplate* pDocTemplate;

         pDocTemplate = new CMultiDocTemplate(IDR_MyFirstMFCProjeTYPE,

                   RUNTIME_CLASS(CMyFirstMFCProjectDoc),

                   RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架

                   RUNTIME_CLASS(CMyFirstMFCProjectView));

 

 

总结:MFC程序简单开发流程

1. 新建一个MFC程序

2. 在“资源视图”里增加一个menu项,例如“入库”,它会自动生成一个NewID(例如是 21231);(这时,我们可以删除不需要的项)

3. 在类视图中,对任一个类单击右键,查看属性;

4. 添加对事件21231的响应函数;

 

问题:那种按钮控件有没有现成的?

点击:“选择文件..., 然后就在

 

 

2011-05-05

 

OnFileOpen是如何实现的

MFC程序里默认生成的Childframe 里,有一个“打开文件”的菜单,它的事件handler

CWinApp ::OnFileOpen()

那么这个OnFileOpen是如何实现的呢?

 

appdlg.cpp里有它的实现过程。 它由CwinApp的 一个CdocManager指针类型的m_pDocManager数据成员变量实现,这个pDocManager 调用同名函数OnFileOpen(), 继续跟踪,在docmgr.cpp里,有以下代码:

void CDocManager::OnFileOpen()

{

         // prompt the user (with all document templates)

         CString newName;

         if (!DoPromptFileName(newName, AFX_IDS_OPENFILE,

           OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, NULL))

                   return; // open cancelled

 

         AfxGetApp()->OpenDocumentFile(newName);

                   // if returns NULL, the user has already been alerted

}

DoPromptFileName 这个函数我找不到它的实现。

 

从文件列表中选择文件的代码段:

// prompt the user (with all document templates)

         CString newName;

         if (!DoPromptFileName(newName, AFX_IDS_OPENFILE,

           OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, NULL))

                   return; // open cancelled

 

注意: 1. 这段代码可以作为一个事件响应;

       2. 这段代码必须在CwinApp或其子类被调用,因为DoPromptFileName函数只在CwinApp有实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值