我下载了源码觉得不错,于是我把HyperLink.cpp、HyperLink.h、ImageTabWnd.cpp、ImageTabWnd.h复制过来并做了一个,界面效果有了,但是不能切换,怎么回事?  
源码下载地址: 
http://www.yuanshengkj.com/bbs/topic.asp?topic_id=1798&forum_id=39 

解决方案 »

  1.   

    给你弄出来了,首先指出你代码和模版代码中的问题:
    模版代码中的问题:
    mainFrame.h中:
    CDemoDlgA m_wndDlgA;
    CDemoDlgA m_wndDlgB;
    改为:
    CDemoDlgA m_wndDlgA;
    CDemoDlgB m_wndDlgB;
    你代码中也存在上述问题,另外还存在问题是:
    在MainFrame.cpp::OnCreate中,将代码改为:
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
    //////////////////////////////////////////////////////////////////////////
    //创建Tab
    if (!m_wndImageTab.Create(NULL, NULL, WS_CHILD|WS_VISIBLE,
    CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
    {
    TRACE0("Failed to create view window\n");
    return -1;
    } m_wndImageTab.SetBkImage(IDB_BITMAP_BACK);
    m_wndImageTab.SetLeftImage(IDB_BITMAP_LEFTMARGIN);
    m_wndImageTab.SetRightImage(IDB_BITMAP_RIGHTMARGIN);
    m_wndImageTab.SetTopImage(IDB_BITMAP_TOPMARGIN);
    m_wndImageTab.SetBottomImage(IDB_BITMAP_BOTTOMMARGIN); m_wndImageTab.SetTabCount(2); int nIndex = 0; m_wndImageTab.SetTabImage(nIndex, IDB_BITMAP_TAB1);
    m_wndImageTab.SetTabRect(nIndex, CRect(0, 0, 32, 42));
    m_wndImageTab.SetToolTip(nIndex, "演示对话A");
    m_wndDlgA.Create(IDD_DIALOG1, &m_wndImageTab);
    m_wndImageTab.SetTabWnd(nIndex, &m_wndDlgA);
    nIndex++;
    m_wndImageTab.SetTabImage(nIndex, IDB_BITMAP_TAB2);
    m_wndImageTab.SetTabRect(nIndex,  CRect(0, 52, 32, 94));
    m_wndImageTab.SetToolTip(nIndex, "演示对话B");
    m_wndDlgB.Create(IDD_DIALOG2, &m_wndImageTab);
    m_wndImageTab.SetTabWnd(nIndex, &m_wndDlgB); CenterWindow(); return 0;
    }
    代码中存在的问题自己去找。下面是不能切换的原因:
    在模版代码中,在APP类中:
    BOOL CMessengerApp::InitInstance()
    {
    AfxEnableControlContainer(); // Standard initialization
    // If you are not using these features and wish to reduce the size
    //  of your final executable, you should remove from the following
    //  the specific initialization routines you do not need.#ifdef _AFXDLL
    Enable3dControls(); // Call this when using MFC in a shared DLL
    #else
    Enable3dControlsStatic(); // Call this when linking to MFC statically
    #endif // Change the registry key under which our settings are stored.
    // TODO: You should modify this string to be something appropriate
    // such as the name of your company or organization.
    SetRegistryKey(_T("Local AppWizard-Generated Applications"));
    // To create the main window, this code creates a new frame window
    // object and then sets it as the application's main window object. CMainFrame* pFrame = new CMainFrame;
    m_pMainWnd = pFrame; // create and load the frame with its resources pFrame->LoadFrame(IDR_MAINFRAME,
    WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
    NULL);
    // The one and only window has been initialized, so show and update it.
    pFrame->ShowWindow(SW_SHOW);
    pFrame->UpdateWindow(); return TRUE;
    }
    没有做视图文档的关联,而你的代码中用的是文档视图关联。因此导致了鼠标点击事件由视图接收。
    解决方法1:
    按照模版程序该APP类。
    解决方法2:
    在视图中捕获鼠标点击事件:
    void CAbView::OnLButtonDown(UINT nFlags, CPoint point)
    {
    ::SendMessage(GetParent()->m_hWnd, WM_LBUTTONDOWN, (WPARAM)&nFlags, (LPARAM)&point); CView::OnLButtonDown(nFlags, point);
    }
    然后再MainFrame中接收鼠标点击事件,并将该事件发送给m_wndImageTab。
    LRESULT CMainFrame::OnLButtonDown(WPARAM wParam, LPARAM lParam)
    {
    ::SendMessage(m_wndImageTab.m_hWnd, WM_LBUTTONDOWN, wParam, lParam);
    return 0; //CFrameWnd::OnLButtonDown(nFlags, point);
    }
    在修改CImageTabWnd类中的OnLButtonDown未如下代码:
    LPARAM CImageTabWnd::OnLButtonDown(WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your message handler code here and/or call default
    CPoint point = *(CPoint *)lParam;
    for(int i=0; i<m_nTabCount; i++)
    {
    if (m_pRectTab[i].PtInRect(point) && m_nCurrentIndex != i)
    {
    m_nCurrentIndex = i;
    ShowDialog();
    Invalidate();
    break;
    }
    }
    //CWnd::OnLButtonDown(nFlags, point);
    return 0;
    }
    OK,如此问题解决。
      

  2.   

    tzqqkl,谢谢你,我按照你的思路去改,有响应,但是出现关闭程序的提示,另,怎么才能让鼠标出现手?你能把你调试好的代码发给我吗?.cn
    谢谢!!