有关tab 标签上加按钮不能响应的问题

fffff_1982 2009-07-28 04:00:57
我在对话框上加了一个 tab control 定义是 CTabSheet m_ietab;
想动态创建一个按钮, CButtonST m_cClose;
afx_msg void OnCloseItem();



在 cpp 下,#define IDC_BUTTON 2030
在 messagemap 里加入了
ON_COMMAND(IDC_BUTTON,OnCloseItem)
void CMyIeDlg::OnCloseItem()
{
::MessageBox(NULL,"2342","",0);
}



在OnInitDialog()加入了
m_cClose.Create(_T("关闭"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(10,10,100,30),
&m_ietab,IDC_BUTTON);

//设置关闭按钮的位置。
int iIndex = m_ietab.GetCurSel();
CRect rc;
m_ietab.GetItemRect(iIndex, rc);
//修改一下, 改成按钮应该在的位置
CRect temp;
temp.top=rc.top;
temp.bottom=rc.bottom;
temp.left=rc.right-20;
temp.right=rc.right;

m_cClose.MoveWindow(temp);

运行后,点击这个按钮没有任何反应,我这样写创建语句 m_cClose.Create(_T("关闭"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(10,10,100,30),
this,IDC_BUTTON);


点击按钮可以弹出 message.


不知道我哪里写错了,希望高手帮助。

...全文
437 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
comey 2011-01-13
  • 打赏
  • 举报
回复
解决了吗?
liufyhui 2009-07-29
  • 打赏
  • 举报
回复
响应函数 - -!
liufyhui 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 fffff_1982 的回复:]
BOOL CXXXXDlg::PreTranslateMessage(MSG* pMsg)
{
CWnd* pWnd=CWnd::FromHandle(pMsg->hwnd);
int nID;
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_LBUTTONDOWN)
{
nID= pWnd->GetDlgCtrlID();
if (nID==2030 )  //这个是我的控件id
{
OnCloseItem(); //这个事调用的函数。
                  return true; 
}
nID=0;
}

return CDialog::PreTranslateMessage(pMsg);
}
[/Quote]

这样写了之后还不行么???
其实我也是同意把相应函数摆到TabSheet.cpp实现
doyouknowm 2009-07-29
  • 打赏
  • 举报
回复
学习
doyouknowm 2009-07-29
  • 打赏
  • 举报
回复
帮顶
FireTiger 2009-07-29
  • 打赏
  • 举报
回复
把脑袋倒过来,放到脚上想一下,就解决了,哥们
do it
fffff_1982 2009-07-29
  • 打赏
  • 举报
回复
BOOL CXXXXDlg::PreTranslateMessage(MSG* pMsg)
{
CWnd* pWnd=CWnd::FromHandle(pMsg->hwnd);
int nID;
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_LBUTTONDOWN)
{
nID= pWnd->GetDlgCtrlID();
if (nID==2030 ) //这个是我的控件id
{
OnCloseItem(); //这个事调用的函数。
return true;
}
nID=0;
}

return CDialog::PreTranslateMessage(pMsg);
}
vincent_1011 2009-07-28
  • 打赏
  • 举报
回复
那搞定了吧
fffff_1982 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 vincent_1011 的回复:]
你要改变下,新建的那个TAB控件要关联一个变量。而这个变量的类型就是这个新建的类
[/Quote]
这个我还是知道的。
vincent_1011 2009-07-28
  • 打赏
  • 举报
回复
你要改变下,新建的那个TAB控件要关联一个变量。而这个变量的类型就是这个新建的类
fffff_1982 2009-07-28
  • 打赏
  • 举报
回复
自己顶一下,还是没有找到合适的,郁闷。
fffff_1982 2009-07-28
  • 打赏
  • 举报
回复
关键是这个关闭按钮点击后的触发事件在那里得到这是一个问题,如何映射过去,我实在不知道,痛苦。
fffff_1982 2009-07-28
  • 打赏
  • 举报
回复
恩,哪具体怎么响应,我再试验一下,响应函数已经写好了,具体哪个消息映射,我还真不会,呵呵
我看看能不能实现。你知道怎么消息映射吗?
vincent_1011 2009-07-28
  • 打赏
  • 举报
回复
不用。我创建按钮完全是在你的代码。

只是把消息影射和响应函数放在那个新建的TAB类上面。

因为点击TAB的按钮的时候。主窗口细分不出来这个控件ID吧只能细分到TAB大控件本身的ID。

只有把消息转到TAB上再细分才行。我是这样理解的啊。哈哈
fffff_1982 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 vincent_1011 的回复:]
我用 SetParent 可以响应了,不过发现按钮却跑到TAB外面去了。

要不还是给tab创建一个类吧,在这个类里面响应这个按钮
[/Quote]
你的意思是不是
在tab 类里面创建 按钮?写响应函数。可以吗?我没做过,我试试。如果你有代码,给贴出来,谢谢,
好的建议也可以。
fffff_1982 2009-07-28
  • 打赏
  • 举报
回复
我的目的是这样的,把按钮放到tab 标签上面,点击可以关闭这个标签,
vincent_1011 2009-07-28
  • 打赏
  • 举报
回复
我用 SetParent 可以响应了,不过发现按钮却跑到TAB外面去了。

要不还是给tab创建一个类吧,在这个类里面响应这个按钮
caitian6 2009-07-28
  • 打赏
  • 举报
回复
既然一步可以做到,你为什么要分两步做?
fffff_1982 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 caitian6 的回复:]
m_cClose.SetParent(this); , 你放那了?
[/Quote]

我试了一下,发现不对,
fffff_1982 2009-07-28
  • 打赏
  • 举报
回复
我放到 m_cClose.Create(_T("关闭"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(10,10,100,30),
&m_ietab,IDC_BUTTON); 的后面了,


加载更多回复(5)

16,548

社区成员

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

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

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