
2、先在资源视图下选择添加资源,选择菜单
CMenu
m_menu
m_menu.loadMenu(你添加菜单资源的ID);
SetMenu(&m_menu)
你贴的那个是用MFC的tab控件实现的。关于tab控件的使用,下面有一个例子
1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab Control 控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl
2、创建两个新的对话框资源,其属性作如下修改:
Border:none //边界为空,这样它就没了标题栏
Style :Child // 这样这个模板就可以当作另一个窗口的子窗口了。其它如果没有必要,就不用改了。
在上面加一些控件什么的,具体 *** 作跟普通对话框没有区别。
完成后从这两个对话框模板生成两个新的对话框类。
3、在主对话框中为新添加进来的两个类增加两个变量:
如:CDialog1 m_mm1
CDialog2 m_mm2
4、在主对话框的OnInitDialog()函数中添加如下类似的代码:
TCITEM item
item.mask = TCIF_TEXT
item.pszText = "第一页"
m_tabctrl.InsertItem (0,&item)
item.pszText ="第二页"
m_tabctrl.InsertItem (1,&item)
m_mm1.Create (IDD_DIALOG1,&m_tabctrl)
m_mm2.Create (IDD_DIALOG2,&m_tabctrl)
m_mm1.SetWindowPos (NULL,10,30,400,100,SWP_SHOWWINDOW)
m_mm2.SetWindowPos (NULL,10,30,400,100,SWP_HIDEWINDOW )
解释如下:
两个InsertItem函数的调用是为了给标签控件增加两个标签页面,文本是标题。
SetWindowPos()函数设置这两个对话框在Z顺序中的位置,显示或隐藏状态.。
5、在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个 *** 作。
在事件处理中添加如下代码,如下例:
void CtabdialogDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
CRect r
m_tabctrl.GetClientRect (&r)
switch(m_tabctrl.GetCurSel())
{
case 0:
m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW)
m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW )
break
case 1:
m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW)
m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW )
break
}
*pResult = 0
}
要想知道用户选择那个标签页,要通过m_tabctrl.GetCurSel() 函数。为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面的尺寸。
或者:
m_Tab.InsertItem(0,"第一页")
m_Tab.InsertItem(1,"第二页")
m_Tab.InsertItem(2,"第三页")
m_Tab.InsertItem(3,"第四页")
m_PageA.Create(IDD_PROPPAGE_A,&m_Tab)
m_PageB.Create(IDD_PROPPAGE_B,&m_Tab)
m_PageC.Create(IDD_PROPPAGE_C,&m_Tab)
m_PageD.Create(IDD_PROPPAGE_D,&m_Tab)
m_PageA.ShowWindow(SW_SHOW)
m_PageB.ShowWindow(SW_HIDE)
m_PageC.ShowWindow(SW_HIDE)
m_PageD.ShowWindow(SW_HIDE)
很简单。。对大家有用的赞个啊。。。。1,新建基于对话框的mfc程序。
添加一个static标签控件,ID为:IDC_STATIC_DEMO
在CXXXDlg类中添加一个类型为CBrush的成员变量m_brs
m_brs.CreateSolidBrush(RGB(0,0,55))//需要程序使用的背景画刷
并且在CXXXDlg的构造函数中添加一行代码
在CXXXDlg中添加WM_CTLCOLOR消息处理函数
然后在OnCtlColor中写下面的代码:
if(IDC_STATIC_DEMO==pWnd->GetDlgCtrlID())//判断正在绘制的是不是我们需要改变的控件
{
pDC->SetBkMode(TRANSPARENT)//设置透明输出
pDC->SetTextColor(RGB(255,0,0))//设置文字颜色
return
m_brs//用自定义的画刷去绘制背景
}
这样。。。就OK了。。
亲,给点分吧,这年头,不容易啊。。。别忘了哦。。。
PS:如果要该按钮的,需要添加DrawItem这个虚函数去搞定。。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)