2011-5-4
在哪里产生窗口?
在CMainFrame 类的成员函数:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
在哪里写处理消息的方法?
在 InitInstance() 方法的最后, 有:
// 主窗口已初始化,因此显示它并对其进行更新
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
从孙鑫vc++视频lesson 3中的 01:12:58 开始讲“消息循环”的内容。
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有实现。