我想响应一个功能,然后打开这个窗口,窗口中用一个自定义控件Grid,里面存放数据,有人会么?

解决方案 »

  1.   


    上面是效果图,我看了一下代码(看了三天了),大致知道是这么实现的,先创建一个对话框,然后在对话框上放一个Custom ctrol,继承class  MFCGridCtrl,然后为这个对话框添加类,并继承Formview,在对话框类中 通过InitBaseView  实现  
    m_oContext.m_pNewViewClass = RUNTIME_CLASS(CCbatBaseView);
    m_pCbatBaseView = (CCbatBaseView*)this->CreateView(&m_oContext);
    但是,,但是,,有好多错误!大侠们帮忙啊
    void CUPEMSMDIFrame::OnShowCbatList()
    {
    // TODO: 在此添加命令处理程序代码 ST_DEVICE_INFO_REQ stcbatData; CRuntimeClass *pClass = RUNTIME_CLASS(CCbatFrame);
    CUPEMSChildWnd *pChildWnd = FindChildWnd( pClass );
    if ( NULL != pChildWnd )
    {
    //pChildWnd->SendMessage( WM_ACTIVATE );
    //ShowControlBar( ( CControlBar * )( &m_wndToolBar ), TRUE, FALSE );
    ErrCodeMsg( this->GetSafeHwnd(), "INFO_PERFORMANCE_STA_OPEN" );
    return;
    }
    else
    {
    UINT unMenuID = GetMenuID( EN_MAINFRAME_MENU );
    pChildWnd = ( CUPEMSChildWnd * )( this->CreateNewChild( pClass, unMenuID, theApp.m_hMDIMenu, theApp.m_hMDIAccel ) );
    if ( NULL != pChildWnd )
    {
    SetWinText( pChildWnd, EN_WIN_TITLE, "WIN_TITLE_STA_PERFORMANCE");
    m_ChildWndList.AddTail( pChildWnd );
    }
    else
    {
    return;
    }
    //pChildWnd->SetTitle("CBAT列表");

    }
    ( ( CCbatFrame * )pChildWnd )->InitBaseView();
      ((CCbatFrame *)pChildWnd)->SetDate(stcbatData);
    ShowControlBar( ( CControlBar * )( &m_wndToolBar ), TRUE, FALSE );
    }
    // #if !defined(AFX_STATISTICFRAME_H__3D3DD53D_9DB8_4A79_AB7E_CC8BD9DDF064__INCLUDED_)
    // #define AFX_STATISTICFRAME_H__3D3DD53D_9DB8_4A79_AB7E_CC8BD9DDF064__INCLUDED_
    #if _MSC_VER > 1000
    #pragma once
    #endif#include "UPEMSRichEditView.h"
    #include "CbatBaseView.h"
    // CCbatFrameclass CUserBaseView;
    class CCbatFrame : public CUPEMSChildWnd
    {
    DECLARE_DYNAMIC(CCbatFrame)public:
    CCbatFrame();
    virtual ~CCbatFrame();protected:
    DECLARE_MESSAGE_MAP()public:
    void SetDate(ST_DEVICE_INFO_REQ stcbatData);
    BOOL InitBaseView();
    virtual void RecvMsg( EmsMsg * pMsg );
    void SendMsg();
    protected:
    virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
    public:
    afx_msg void OnClose();
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    private:
    CCbatBaseView *m_pCbatBaseView;
    ST_DEVICE_INFO_REQ m_stCbatData;
    CCreateContext m_oContext;
    };
    //#endif
    // CbatFrame.cpp : 实现文件
    //#include "stdafx.h"
    #include "UPEMSClient.h"
    #include "CbatFrame.h"
    #include ".\cbatframe.h"
    #include "CbatBaseView.h"
    #include "ems_configfile.h"
    #include "UPEMSDevNode.h"
    #include "CoolDialogBar.h"
    #include "UPEMSTree.h"
    #include "UPEMSDialog.h"
    #include "ResManagerDlg.h"
    #include "UPEMSChildWnd.h"
    #include "UPEMSMDIFrame.h"
    #include "GridCtrl.h"
    #include "UPEMSGridCtrl.h"
    #include "UPEMSFormView.h"
    #include "UPEMSRichEditView.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endifextern CUPEMSClientApp theApp;
    extern EN_LANGUAGE  g_nLanguage;
    // CCbatFrameIMPLEMENT_DYNAMIC(CCbatFrame, CUPEMSChildWnd)
    CCbatFrame::CCbatFrame()
    : m_pCbatBaseView(NULL)
    {
    }CCbatFrame::~CCbatFrame()
    {
    UnRegRecvCmd( EN_CMD_DEVICE_LIST );
    ::SendMessage( ( (CUPEMSClientApp*)AfxGetApp() )->m_pMainWnd->GetSafeHwnd(),
    WM_CLOSE_CHILD_WND,
    ( WPARAM )this,
    ( LPARAM )this );
    }
    BEGIN_MESSAGE_MAP(CCbatFrame, CUPEMSChildWnd)
    ON_WM_CLOSE()
    ON_WM_CREATE()
    END_MESSAGE_MAP()// CCbatFrame 消息处理程序
    BOOL CCbatFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
    // TODO: 在此添加专用代码和/或调用基类 //return CUPEMSChildWnd::OnCreateClient(lpcs, pContext);
    m_oContext = *pContext; lpcs->style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
    | FWS_ADDTOTITLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
    return TRUE;
    }void CCbatFrame::OnClose()
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CUPEMSChildWnd::OnClose();
    }int CCbatFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CUPEMSChildWnd::OnCreate(lpCreateStruct) == -1)
    return -1; // TODO:  在此添加您专用的创建代码 return 0;
    }
    void CCbatFrame::SetDate(ST_DEVICE_INFO_REQ stcbatData)
    {
    m_stCbatData.cbatID = GET_NET_ORDER_LONG(0);
    m_stCbatData.unLoginID = GET_NET_ORDER_LONG(theApp.GetCurUserID());
    m_stCbatData.unAccLevel = GET_NET_ORDER_LONG(theApp.GetCurUserLevel());
    m_stCbatData.ulCount = GET_NET_ORDER_LONG(PAGE_MAX);
    m_stCbatData.ulStart = GET_NET_ORDER_LONG(0);
    SendMsg();
    }BOOL CCbatFrame::InitBaseView()
    {
    m_oContext.m_pNewViewClass = RUNTIME_CLASS(CCbatBaseView);
    m_pCbatBaseView = (CCbatBaseView*)this->CreateView(&m_oContext);
    m_pCbatBaseView->InitGridColBase( EN_STATISTIC_WIN ); m_pCbatBaseView->OnInitialUpdate();
    m_pCbatBaseView->SetFocus();
    if ( !RegRecvMsg( EN_CMD_DEVICE_LIST ) )
    {
    TRACE( "can't register the message failed!\r\n" );
    // ErrCodeMsg( this->GetSafeHwnd(), "INFO_EMS_REGMSG_FAILED" );
    return FALSE;
    } return TRUE;
    }void CCbatFrame::SendMsg()
    {
    int iRet;
    // BeginWaitCursor();
    ST_DEVICE_INFO_REQ stCbatData;
    stCbatData = m_stCbatData;
    stCbatData.ulStart = GET_NET_ORDER_LONG( m_stCbatData.ulStart );
    iRet = ClientSendASyncMsg(this, &stCbatData, sizeof(stCbatData), EN_CMD_DEVICE_LIST);
    m_stCbatData.ulStart = m_stCbatData.ulStart + PAGE_MAX;
    if (ERR_EMS_SUCCESS != iRet)
    {
    TRACE( "Send Asyn Msg Failed!\r\n" );
    }
    // EndWaitCursor();
    }void CCbatFrame::RecvMsg( EmsMsg * pMsg )
    { ST_DEVICE_INFO_RSP* cbatRSPMsg;
    int  nMount; cbatRSPMsg = (ST_DEVICE_INFO_RSP*)pMsg->Buffer; int resultStrctureLen=sizeof(ST_DEVICE_INFO_RSP); nMount = GET_HOST_ORDER_LONG(cbatRSPMsg->ulAmount); if ( 0 >= nMount )
    {
    ErrCodeMsg( this->GetSafeHwnd(), "INFO_NO_STATIC_DATA" ,NULL,  EN_ERR_LEVEL_INFO );
    return;
    }
    else
    {
    //m_pCbatBaseView->InsertStatisticData( m_nType,nMount, cbatRSPMsg );
    if ( nMount >= PAGE_MAX )
    {
    SendMsg();
    }
    }
    }
    // #if !defined(AFX_STATISTICBASEVIEW_H__61AFAAE2_8255_4531_A448_21419B4B51D7__INCLUDED_)
    // #define AFX_STATISTICBASEVIEW_H__61AFAAE2_8255_4531_A448_21419B4B51D7__INCLUDED_
    #if _MSC_VER > 1000
    #pragma once
    #endif#ifndef __AFXEXT_H__
    #include <afxext.h>
    #endif
    #include "f:\anav5\新建文件夹\client\src\emsctrl\upemsgridctrl.h"
    // CCbatBaseView 窗体视图class CCbatBaseView : public CUPEMSFormView
    {
    DECLARE_DYNCREATE(CCbatBaseView)protected:
    CCbatBaseView();           // 动态创建所使用的受保护的构造函数
    virtual ~CCbatBaseView();public:
    enum { IDD = IDD_DIALOG_CBAT };
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endifprotected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持 DECLARE_MESSAGE_MAP()
    public:
    virtual void OnInitialUpdate();
    public:
    BOOL InitBaseView();
    void InsertCbatData(int nMount, ST_DEVICE_INFO_RSP* cbatInfo );
    //  void StaExportToExcel();
    //  void CreateReport(); CUPEMSGridCtrl *m_pGrid;
    };//#endif
    // CbatBaseView.cpp : 实现文件
    //#include "stdafx.h"
    #include "UPEMSClient.h"
    #include "CbatBaseView.h"
    #include ".\cbatbaseview.h"
    #include "CbatFrame.h"
    // CCbatBaseView
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    extern CUPEMSClientApp theApp;
    extern CConfigFile  g_SysConfigFile;
    extern EN_LANGUAGE  g_nLanguage;
    IMPLEMENT_DYNCREATE(CCbatBaseView, CUPEMSFormView)CCbatBaseView::CCbatBaseView()
    : CUPEMSFormView(CCbatBaseView::IDD)
    {
    }CCbatBaseView::~CCbatBaseView()
    {
    }void CCbatBaseView::DoDataExchange(CDataExchange* pDX)
    {
    CUPEMSFormView::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_CBATLIST_DATA_GRID, *m_pGrid);
    }BEGIN_MESSAGE_MAP(CCbatBaseView, CUPEMSFormView)
    END_MESSAGE_MAP()
    // CCbatBaseView 诊断#ifdef _DEBUG
    void CCbatBaseView::AssertValid() const
    {
    CUPEMSFormView::AssertValid();
    }void CCbatBaseView::Dump(CDumpContext& dc) const
    {
    CUPEMSFormView::Dump(dc);
    }
    #endif //_DEBUG
    // CCbatBaseView 消息处理程序void CCbatBaseView::OnInitialUpdate()
    {
    CUPEMSFormView::OnInitialUpdate();
    //  m_pGrid->SetSingleRowSelection(FALSE);
    //  m_pGrid->SetListMode(FALSE);
    // TODO: 在此添加专用代码和/或调用基类
    }void CCbatBaseView::InsertCbatData( int nMount, ST_DEVICE_INFO_RSP* cbatInfo )
    {
    }
      

  2.   

    f:\anav5\新建文件夹\client\src\cbatframe.cpp(39): error C3861: “UnRegRecvCmd”: 即使使用参数相关的查找,也未找到标识符
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(100): error C2039: “CreateView” : 不是“CCbatFrame”的成员
            f:\anav5\新建文件夹\client\src\cbatframe.h(14) : 参见“CCbatFrame”的声明
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(145): error C2039: “GetSafeHwnd” : 不是“CCbatFrame”的成员
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(101): error C2039: “InitGridColBase” : 不是“CCbatBaseView”的成员
            f:\anav5\新建文件夹\client\src\cbatbaseview.h(15) : 参见“CCbatBaseView”的声明
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(104): error C2039: “SetFocus” : 不是“CCbatBaseView”的成员
            f:\anav5\新建文件夹\client\src\cbatbaseview.h(15) : 参见“CCbatBaseView”的声明
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(80): error C2248: “CMDIChildWnd::OnCreate” : 无法访问 protected 成员(在“CMDIChildWnd”类中声明)
            d:\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(3682) : 参见“CMDIChildWnd::OnCreate”的声明
            d:\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(3625) : 参见“CMDIChildWnd”的声明
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(75): error C2248: “CFrameWnd::OnClose” : 无法访问 protected 成员(在“CFrameWnd”类中声明)
            d:\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(3509) : 参见“CFrameWnd::OnClose”的声明
            d:\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(3315) : 参见“CFrameWnd”的声明
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(47): error C2248: “CUPEMSChildWnd::GetThisMessageMap” : 无法访问 protected 成员(在“CUPEMSChildWnd”类中声明)
            f:\anav5\新建文件夹\client\src\emsctrl\upemschildwnd.h(60) : 参见“CUPEMSChildWnd::GetThisMessageMap”的声明
            f:\anav5\新建文件夹\client\src\emsctrl\upemschildwnd.h(19) : 参见“CUPEMSChildWnd”的声明
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(75): error C2352: “CFrameWnd::OnClose” : 非静态成员函数的非法调用
            d:\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(3509) : 参见“CFrameWnd::OnClose”的声明
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(80): error C2352: “CMDIChildWnd::OnCreate” : 非静态成员函数的非法调用
            d:\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(3682) : 参见“CMDIChildWnd::OnCreate”的声明
    f:\anav5\新建文件夹\client\src\cbatbaseview.cpp(18): error C2440: “return” : 无法从“CCbatBaseView *”转换为“CObject *”
            与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(49): error C2440: “static_cast” : 无法从“int (__thiscall CCbatFrame::* )(LPCREATESTRUCT)”转换为“int (__thiscall CWnd::* )(LPCREATESTRUCT)”
            在匹配目标类型的范围内没有具有该名称的函数
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(48): error C2440: “static_cast” : 无法从“void (__thiscall CCbatFrame::* )(void)”转换为“void (__thiscall CWnd::* )(void)”
            在匹配目标类型的范围内没有具有该名称的函数
    f:\anav5\新建文件夹\client\src\cbatframe.h(15): error C2504: “CUPEMSChildWnd” : 未定义基类
    f:\anav5\新建文件夹\client\src\cbatframe.h(15): error C2504: “CUPEMSChildWnd” : 未定义基类
    f:\anav5\新建文件夹\client\src\cbatbaseview.h(16): error C2504: “CUPEMSFormView” : 未定义基类
    f:\anav5\新建文件夹\client\src\cbatbaseview.h(16): error C2504: “CUPEMSFormView” : 未定义基类
    f:\anav5\新建文件夹\client\src\cbatbaseview.cpp(22): error C2614: “CCbatBaseView” : 非法的成员初始化:“CUPEMSFormView”不是基或成员
    f:\anav5\新建文件夹\client\src\cbatbaseview.cpp(31): error C2653: “CUPEMSFormView” : 不是类或命名空间名称
    f:\anav5\新建文件夹\client\src\cbatbaseview.cpp(18): error C2653: “CUPEMSFormView” : 不是类或命名空间名称
    f:\anav5\新建文件夹\client\src\cbatbaseview.cpp(35): error C2653: “CUPEMSFormView” : 不是类或命名空间名称
    f:\anav5\新建文件夹\client\src\cbatbaseview.cpp(49): error C2653: “CUPEMSFormView” : 不是类或命名空间名称
    f:\anav5\新建文件夹\client\src\cbatbaseview.cpp(44): error C2653: “CUPEMSFormView” : 不是类或命名空间名称
    f:\anav5\新建文件夹\client\src\cbatbaseview.cpp(58): error C2653: “CUPEMSFormView” : 不是类或命名空间名称
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(105): error C3861: “RegRecvMsg”: 即使使用参数相关的查找,也未找到标识符
    f:\anav5\新建文件夹\client\src\cbatframe.cpp(122): error C2664: “ClientSendASyncMsg” : 不能将参数 1 从“CCbatFrame *const ”转换为“CEmsWnd *”
            与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
    这是编译出来的错误,首先说明一下我是参考日志查询那写的另外一个功能,日志那个地方是实现好的
      

  3.   

    你说的窗口就是一个对话框吧,可以是模式的或者非模式的,上面放一个GridView控件就可以了
      

  4.   

    现在就要把工程里的对话框都改成窗口,里面放Grid控件