我用AppWizard创建一个SDI,当点击文件-》打开,会弹出一个CFileDialog的对话框,谁知道这段代码是怎么执行的?我知道,文件-》打开,会调用CXXDocument::OnOpenDocument(),这样会调用CDocument::OnOpenDocument(),我查看CDocument::OnOpenDocument的源码,里面没有出现CFileDialog的定义,这个对话框是怎么出现的呢?迷惑中

解决方案 »

  1.   

    告诉你一个办法,在CWinApp::OnFileNew中设一个断点跟踪一下很容易得到,就该是在文档模板管理器中。
      

  2.   

    呵呵!以很早时,我遇到与你所说的一样的迷惑。
    我查msdn找到一些端详。
    在mfc42.dll中。
    你可以试试,加一个菜单项,它的id与openfile菜单项的id一样,不写代码与响应函数。只加一个菜单,指定它的id为openfile的id就能用。
    估计你猜到了吧!呵呵......
      

  3.   

    CFileDialog的窗口是mfc框架调用的,调用的是OnFileOpen()函数。
      

  4.   

    我在CXXDocument响应了ID_FILE_OPEN的消息,在消息处理函数中,什么也不添加,这时编译,运行,点file->OPen菜单,CFileDialog对话框就没有出来。
    我想,如果你映射ID_FILE_OPEN的菜单命令消息,消息机制就会找到相应的消息处理函数,调用执行,如果没有映射消息,则怎么办?我就这里迷糊
      

  5.   

    哈找到一篇文章,看了以后,顿时豁然开朗了呀,原来是这样的:
    可以看来这样的消息映射ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen),如果你没有映射ID_FILE_OPEN消息,就会调用CWinApp::OnFileOpen,否则调用你的消息映射函数。在CWinApp::OnFileOpen中调用CDocManager::OnFileOpen(),这样函数完成以下任务:1。弹出对话框让用户选择待打开的文件,返回该文件的全路径名称, 供下面函数调用时使用2。调用应用程序的OpenDocumentFile(LPCTSTR lpszFileName)。至此,这个对话框的出处就真相大白了。
    学习