mfc如何动态生成按钮

沧海1梦 2016-11-28 03:02:44
想在对话框下生成如下图的动态按钮

相关代码如下
void CToolPanDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect);

if(m_hWnd)
{
m_BtnClose.MoveWindow(rect.right - 1 -20,rect.bottom- 20 ,20 ,20);
if(m_IsShowRec)
{
CRect rect;
GetClientRect(&rect);
m_BtnSnap.MoveWindow(rect.right - 1 -2*20,rect.bottom- 20 ,20 ,20);
m_BtnRecord.MoveWindow(rect.right - 1 -3*20,rect.bottom- 20 ,20 ,20);
m_BtnRecord.ShowWindow(SW_SHOW);
m_BtnSnap.ShowWindow(SW_SHOW);
}
else
{
m_BtnRecord.ShowWindow(SW_HIDE);
m_BtnSnap.ShowWindow(SW_HIDE);
}
m_BtnClose.ShowWindow(SW_SHOW);
}
// TODO: 在此处添加消息处理程序代码
}


int CToolPanDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogEx::OnCreate(lpCreateStruct) == -1)
return -1;
m_BtnClose.Create(_T(""), WS_GROUP |WS_CHILD |WS_VISIBLE |BS_PUSHBUTTON , CRect(0,0,20,20), this, IDC_BUTTON_CLOSE );
m_BtnRecord.Create(_T(""), WS_GROUP |WS_CHILD |WS_VISIBLE |BS_PUSHBUTTON , CRect(0,0,20,20), this, IDC_BUTTON_RECORD );
m_BtnSnap.Create(_T(""),WS_GROUP |WS_CHILD |WS_VISIBLE |BS_PUSHBUTTON , CRect(0,0,20,20), this, IDC_BUTTON_SNAP );
InitBtns();
return 0;
}


void CToolPanDlg::InitBtns(void)
{
m_BtnClose.SetBitmaps(IDB_BAP_VEDCLOSE,RGB(255,255,255));//,IDB_BAP_VEDCLOSEDOWN,RGB(255,255,255));
m_BtnClose.DrawTransparent(true);
m_BtnClose.SetFlat(1);
m_BtnClose.SetPressedStyle(CButtonST::BTNST_PRESSED_NOMOVE);
m_BtnClose.DrawBorder(FALSE);
m_BtnClose.SizeToContent();
//m_BtnClose.ShowWindow(SW_SHOW);
//m_BtnClose.EnableBalloonTooltip();
//m_BtnClose.SetTooltipText(_T("关闭"),true);

m_BtnRecord.SetBitmaps(IDB_BAP_VEDIORECCHECK,RGB(255,255,255),IDB_BAP_VEDIOREC ,RGB(255,255,255));
m_BtnRecord.DrawTransparent(true);
m_BtnRecord.SetFlat(1); //将按钮设置为平的,即没有原按钮的向上突起的感觉,这项对于图片按钮很重要
m_BtnRecord.SetPressedStyle(CButtonST::BTNST_PRESSED_NOMOVE);
m_BtnRecord.DrawBorder(FALSE);
m_BtnRecord.SizeToContent();
m_BtnRecord.ShowWindow(SW_HIDE);
//m_BtnRecord.ShowWindow(SW_SHOW);


m_BtnSnap.SetBitmaps(IDB_BAPSNAP,RGB(255,255,255));
m_BtnSnap.DrawTransparent(true);
//m_BtnSnap.SubclassDlgItem(IDC_BUTTON_SNAP, this);
//m_BtnSnap.SetIcon(IDB_BAPSNAP);
m_BtnSnap.SetFlat(1);
m_BtnSnap.SetPressedStyle(CButtonST::BTNST_PRESSED_NOMOVE);
m_BtnSnap.DrawBorder(FALSE);
m_BtnSnap.SizeToContent();
m_BtnRecord.ShowWindow(SW_HIDE);
//m_BtnRecord.ShowWindow(SW_SHOW);

}

但是最后生成的只有close按钮,如下图,其他两个都没有,给出的demo没问题,点击播放就可以正常显示。哪位做过的帮忙看看,谢谢了。
...全文
348 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
凌乱哥 2016-11-28
  • 打赏
  • 举报
回复
引用 4 楼 cwt19902010 的回复:
引用 2 楼 dingxz105090 的回复:
目测是if(m_IsShowRec)条件不成立,都HIDE了
江左梅郎确实目光如炬,这里改下是可以,但是我不知道是不是符合逻辑,给的demo里面就是我上面贴的代码,可以实现那样生成按钮。
逻辑是如何那要看你的软件是什么作用,什么运行原理了。 单从代码字面意思来看,m_IsShowRec就是是否显示Record,我猜测应该是这样的: 很多地方会调用你这个窗口,但是有的时候不允许Record,有的时候允许,所以有这么一个分支
沧海1梦 2016-11-28
  • 打赏
  • 举报
回复
引用 2 楼 dingxz105090 的回复:
目测是if(m_IsShowRec)条件不成立,都HIDE了
江左梅郎确实目光如炬,这里改下是可以,但是我不知道是不是符合逻辑,给的demo里面就是我上面贴的代码,可以实现那样生成按钮。
沧海1梦 2016-11-28
  • 打赏
  • 举报
回复
引用 1 楼 shiyanzi 的回复:
在InitBtns里面都隐藏掉了啊 m_BtnRecord.ShowWindow(SW_HIDE); m_BtnRecord.ShowWindow(SW_HIDE);
您看下注释部分,我改过的,还是有问题的,所以还原了。
凌乱哥 2016-11-28
  • 打赏
  • 举报
回复
目测是if(m_IsShowRec)条件不成立,都HIDE了
  • 打赏
  • 举报
回复
在InitBtns里面都隐藏掉了啊 m_BtnRecord.ShowWindow(SW_HIDE); m_BtnRecord.ShowWindow(SW_HIDE);

16,466

社区成员

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

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

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