VC+Oracle,我采用的是MDI + CRecordView,我是想通过菜单来选择不同的模块进行操作。比如选"基本资料“-->"个人信息"即出来一个输入个人基本信息的画面,这时可以选择用Dialog或者View(我是想用CRecordView,当然它也是继承CFormView而来的)请问各位大侠是否合理?另外相应的CRecordView共用一份CDocument好还是各自用的好?因为还必须考虑采用是多CRecordSet还是单CRecordSet谢谢!
解决方案 »
- Invalidate//MFC为什么无法找到此函数呢?
- 请教各位牛人:Teechart控件如何实现纵坐标显示字符
- 咨询个问题,TCP如何传送文件?
- shell扩展编程,想对所有的文件类型添加一个右键菜单项,请问相应的rgs文件应该怎么写?
- 如何关闭父对话框时也关闭子对话框
- 动态创建控件的问题!!急!在线等待!
- c语言简单问题,得到答案马上给分
- 如何在InstallShield制作的安装程序中定制卸载时执行的程序?
- VC视频编程
- 有没有人知道如何获取本机上面安装了那些软件,windows平台
- 在vc中调用c,链接时出现error LNK2001: unresolved external symbol
- 在一个对话框内调用另一个对话框之后,怎样摧毁原来的对话框?
IDR_HRBASEINFOVIEW_TMPL,
RUNTIME_CLASS(CCLSMISDoc), // document class
RUNTIME_CLASS(CMDIChildWnd), // frame class
RUNTIME_CLASS(CHrBaseInfoView)); // view class
AddDocTemplate(pNewDocTemplate);并在程序运行时要我选择View,如果我要在点击相应的菜单时才出来相应的View怎么办呢?
在MIS软件中,一般都是直接对数据库进行操作,我觉得没必要用D/V结构,所以代码直接在FormView中处理就是了,所以我一赶想用没有D/V的MDI来解决我的问题,然而,在AppWizard中如果不选择D/V支持,则它创建的View只能是继承至CView,而不能选择CFormView。 我在框架创建之后,自己加上CFormView,然后想自己创建ChildWnd以及FormView,却总是出现运行时错误。
另一个问题是,在MIS系统中,一般每种功能其对应的窗口只能打开一个,比如“出库单”模块,点一下菜单之后,如果这个窗口已经存在就只是让它显示,没有存在才创建并显示它,可是如果采用D/V结构,都不知道怎样控制每种View只建立一次,AddTemplate之后,OnFileNew就弹个选择文档类型的窗口出来,郁闷啊…… 哎……搞了好久了,找不到方向,不知道有哪位高手不吝赐教呢???
class CHrBaseInfoRD : public CFormView
{
public:
CHrBaseInfoRD(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CHrBaseInfoRD)// Form Data
public:
//{{AFX_DATA(CHrBaseInfoRD)
enum { IDD = IDD_HRBASEINFOVIEW_FORM };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHrBaseInfoRD)
public:
virtual void OnInitialUpdate();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected:
virtual ~CHrBaseInfoRD();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif // Generated message map functions
//{{AFX_MSG(CHrBaseInfoRD)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
然后再让Main Frame响应相应的菜单选项,显示此Form:void CMainFrame::OnBaseinfoPerson()
{
// TODO: Add your command handler code here
CChildFrame* pChildFrame = new CChildFrame;
// CDocument* pDocument = GetActiveView() ->GetDocument();
CDocument* pDocument = this ->GetActiveDocument();
//上面两句结果是否不同?为何使用前一句会有运行异常?
CRuntimeClass* pCHrBaseInfoRD = RUNTIME_CLASS( CHrBaseInfoRD );
CCreateContext* pCreateContext = new CCreateContext;
pCreateContext ->m_pCurrentDoc = pDocument;
pCreateContext ->m_pCurrentFrame = this;
pCreateContext ->m_pNewViewClass = pCHrBaseInfoRD;
ASSERT( pChildFrame->Create( NULL, // standard CMDIChildWnd class
_T("My MDIChildWnd"), // caption of MDI child window
WS_CHILD | WS_OVERLAPPEDWINDOW, // window styles
rectDefault, // default rectangle size
NULL, // parent window; can be NULL
pCreateContext)
);
pChildFrame->ShowWindow(SW_SHOWMAXIMIZED | WS_VISIBLE);
}
但不知为何可以生成CHrBaseInfoRD对象,但其窗口显示不出来?而且我不知这种设计思路是否正确?还请大侠指点,谢谢!
pChildFrame->UpdateWindow();
试试?