MFC相关问题
1)Windows程序设计中窗口过程的作用是什么?是有谁调用的?2)什么是MFC,用MFC编程有什么体验?3)MFC中模态对话框和非模态对话框分别从用户角度和编程角度讲,...
1) Windows程序设计中窗口过程的作用是什么?是有谁调用的?
2) 什么是MFC,用MFC编程有什么体验?
3) MFC中模态对话框和非模态对话框分别从用户角度和编程角度讲,有什么区别?
4) 如何判断MFC中的窗框类对象是否和一个具体窗口相关联?
5) 在SDI应用程序中,怎样在视图类中获取应用程序的主框架窗框类?
6) 在MFC中,响应菜单消息的顺序是什么样的?菜单命令更新消息是什么时候发送的?工具栏上的按钮和菜单项如何关联?
7) 什么是设备环境?设备环境有什么作用?什么是映射模式?绘制图像要随窗口大小改变时,应该采用什么样的映射模式?
8) MFC的单文档应用程序和多文档应用程序有什么区别,如何编写多文档应用程序?如何实现文档序列化的功能? 展开
2) 什么是MFC,用MFC编程有什么体验?
3) MFC中模态对话框和非模态对话框分别从用户角度和编程角度讲,有什么区别?
4) 如何判断MFC中的窗框类对象是否和一个具体窗口相关联?
5) 在SDI应用程序中,怎样在视图类中获取应用程序的主框架窗框类?
6) 在MFC中,响应菜单消息的顺序是什么样的?菜单命令更新消息是什么时候发送的?工具栏上的按钮和菜单项如何关联?
7) 什么是设备环境?设备环境有什么作用?什么是映射模式?绘制图像要随窗口大小改变时,应该采用什么样的映射模式?
8) MFC的单文档应用程序和多文档应用程序有什么区别,如何编写多文档应用程序?如何实现文档序列化的功能? 展开
3个回答
展开全部
1.这个窗口过程的任务是干什么呢?就是最终用来处理消息的,就是消息的处理器而已,那么这个函数就是WindowProc。Windows的启动应用程序时,先调用WinMain函数,然后调用窗口过程。无论Windows何时想传递一个消息到一窗口,都将调用相应的窗口过程。当Windows从环境,或从另一个应用程序,或从用户的应用程序中得到消息时,它将调用窗口过程并将信息传给此函数。总之,窗口过程函数处理所有传送到由此窗口类创建的窗口所得到的消息。并且窗口过程有义务处理Windows扔给它的任何消息。令我们不解的是,在程序中我们看不出来是哪一个函数在调用窗口过程。它其实是一个回调函数.前面已经提到,Windows把发生的输入事件转换成输入消息放到消息队列中,而消息循环将它们发送到相应的窗口过程函数,真正的处理是在窗口过程函数中执行的,在Windows中就使用了回调函数来进行这种通信。 回调函数是输出函数中特殊的一种,它是指那些在Windows环境下直接调用的函数。一个应用程序至少有一个回调函数,因为在应用程序处理消息时,Windows调用回调函数。这种回调函数就是我们前面提到的窗口过程,它对对应于一个活动的窗口,回调函数必须向Windows注册,Windows实施相应操作即行回调。每个窗口必须有一个窗口过程与之对应,且Windows直接调用本函数,因此,窗口函数必须采用FAR PASCAL调用约定。
2.MFC是微软基础类(Microsoft Foundation Classes),同VCL类似,是一种Application Framework,随微软Visual C++ 开发工具发布。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。
我使用MFC的感觉就是方便,快捷。它里面封装的很多类功能很强大。但是MFC不是万能的,感觉有些功能用其他方法实现起来反而更有用一些吧。各有各的好处,用着顺手才是最重要的,反正我喜欢用哈哈。
3.与模态对话框不同,非模态对话框不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互。非模态对话框的设计与模态对话框基本类似,也包括设计对话框模板和设计CDialog类的派生类两部分。但是,在对话框的创建和删除过程中,非模态对话框与模态对话框相比有下列不同之处:
非模态对话框的模板必须具有Visible风格,否则对话框将不可见,而模态对话框则无需设置该项风格。更保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框,而不管对话框是否具有Visible风格。非模态对话框对象是用new操作符在堆中动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在堆栈上。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。通过调用CDialog::Create函数来启动对话框,而不是CDialog::DoModal,这是模态对话框的关键所在。必须调用CWnd::DestroyWindow而不是CDialog::EndDialog来关闭非模态对话框。调用CWnd::DestroyWindow是直接删除窗口的一般方法。由于缺省的CDialog::OnOK和CDialog::OnCancel函数均调用EndDialog,故程序员必须编写自己的OnOK和OnCancel函数并且在函数中调用DestroyWindow来关闭对话框。
4.GetParent() == 想测试的窗口句柄,试试这个
5. 得到视:
CMainFrame *pFrm = (CMainFrame *)::AfxGetApp()->GetMainWnd() ;
CTestView *pView =(CTestView *) pFrm->GetActiveView();
得到文档:
CTestDoc* pdoc=(CTestDoc*)pFrm->GetActiveDocument();
以上均基于单文档
6.
2.MFC是微软基础类(Microsoft Foundation Classes),同VCL类似,是一种Application Framework,随微软Visual C++ 开发工具发布。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。
我使用MFC的感觉就是方便,快捷。它里面封装的很多类功能很强大。但是MFC不是万能的,感觉有些功能用其他方法实现起来反而更有用一些吧。各有各的好处,用着顺手才是最重要的,反正我喜欢用哈哈。
3.与模态对话框不同,非模态对话框不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互。非模态对话框的设计与模态对话框基本类似,也包括设计对话框模板和设计CDialog类的派生类两部分。但是,在对话框的创建和删除过程中,非模态对话框与模态对话框相比有下列不同之处:
非模态对话框的模板必须具有Visible风格,否则对话框将不可见,而模态对话框则无需设置该项风格。更保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框,而不管对话框是否具有Visible风格。非模态对话框对象是用new操作符在堆中动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在堆栈上。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。通过调用CDialog::Create函数来启动对话框,而不是CDialog::DoModal,这是模态对话框的关键所在。必须调用CWnd::DestroyWindow而不是CDialog::EndDialog来关闭非模态对话框。调用CWnd::DestroyWindow是直接删除窗口的一般方法。由于缺省的CDialog::OnOK和CDialog::OnCancel函数均调用EndDialog,故程序员必须编写自己的OnOK和OnCancel函数并且在函数中调用DestroyWindow来关闭对话框。
4.GetParent() == 想测试的窗口句柄,试试这个
5. 得到视:
CMainFrame *pFrm = (CMainFrame *)::AfxGetApp()->GetMainWnd() ;
CTestView *pView =(CTestView *) pFrm->GetActiveView();
得到文档:
CTestDoc* pdoc=(CTestDoc*)pFrm->GetActiveDocument();
以上均基于单文档
6.
参考资料: 逸然的窝
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询