仿QQ界面切换源码下载

yeyuanzhi2000 2008-04-20 10:58:32
我下载了源码觉得不错,于是我把HyperLink.cpp、HyperLink.h、ImageTabWnd.cpp、ImageTabWnd.h复制过来并做了一个,界面效果有了,但是不能切换,怎么回事?
源码下载地址:
http://www.yuanshengkj.com/bbs/topic.asp?topic_id=1798&forum_id=39
...全文
154 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeyuanzhi2000 2008-04-23
  • 打赏
  • 举报
回复
怎么没人回应啊?
yeyuanzhi2000 2008-04-21
  • 打赏
  • 举报
回复
谁还有更好的解决方案吗?贴出来让大家分享啊!
tzqqkl 2008-04-20
  • 打赏
  • 举报
回复
给你弄出来了,首先指出你代码和模版代码中的问题:
模版代码中的问题:
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,如此问题解决。
yeyuanzhi2000 2008-04-20
  • 打赏
  • 举报
回复
高手今天都休息?
gotooker 2008-04-20
  • 打赏
  • 举报
回复
关注,也想做个放qq的界面,漂亮啊
卡米尔 2008-04-20
  • 打赏
  • 举报
回复
模仿QQ来了,呵呵,学习!
yeyuanzhi2000 2008-04-20
  • 打赏
  • 举报
回复
tzqqkl,谢谢你,我按照你的思路去改,有响应,但是出现关闭程序的提示,另,怎么才能让鼠标出现手?你能把你调试好的代码发给我吗?我的邮箱是yeyuanzhi2000@yahoo.com.cn
谢谢!!

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧