(1)在TabView.h中增加如下代码: #include \#include \#include \class CTabView : public CView {public:
int nDist;//数值 int nColor;//颜色
CString cText;//中文字符串
BOOL bBold,bItalic,bUnderline;//字体属性 }
(2)在TabView.cpp中对数据成员进行如下初始化。 CTabView::CTabView() { nDist=20; nColor=1;
cText=CString(\标签控制演示实例\ bBold=bItalic=bUnderline=FALSE; }
(3)在TabDlg.cpp中向控制中增加标签,来实现背景设置功能。 BOOL CTabDlg::OnInitDialog() { CDialog::OnInitDialog(); TC_ITEM tcItem;//添加标签 tcItem.mask=TCIF_TEXT; tcItem.pszText=\字 间 距\ m_tabCtrl.InsertItem(0,&tcItem); tcItem.pszText=\颜色设置\ m_tabCtrl.InsertItem(1,&tcItem); m_tabCtrl.SetCurSel(1); return TRUE; }
当标签切换时,标签控制会自动向对话框窗口发送TCN_SELCHANGE通知消息,这时需要根据所选择的标签索引号对属性页的显示和隐藏进行切换控制,应完善OnSelchangeTabctrl()函数: void CTabDlg::OnSelchangeTabctrl(NMHDR* pNMHDR, LRESULT* pResult) { int iPage=m_tabCtrl.GetCurSel();//所选标签号 switch(iPage){ case 0://字间距
GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);//隐藏选择按钮
GetDlgItem(IDC_BLACK)->ShowWindow(SW_HIDE);//隐藏选择按钮 GetDlgItem(IDC_RED)->ShowWindow(SW_HIDE);//隐藏选择按钮 GetDlgItem(IDC_BLUE)->ShowWindow(SW_HIDE);//隐藏选择按钮 GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);//显示输入项数 GetDlgItem(IDC_DIST)->ShowWindow(SW_SHOW);//显示输入项数 break;
case 1://颜色设置
GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);//隐藏项数输入 GetDlgItem(IDC_DIST)->ShowWindow(SW_HIDE);//隐藏项数输入 GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);//显示选项选择 GetDlgItem(IDC_BLACK)->ShowWindow(SW_SHOW);//显示选项选择 GetDlgItem(IDC_RED)->ShowWindow(SW_SHOW);//显示选项选择 GetDlgItem(IDC_BLUE)->ShowWindow(SW_SHOW);//显示选项选择 break; }
*pResult = 0; }
(4)菜单功能的完善。在执行相应的菜单功能时,必须对类向导增加的相应功能函数进行代码完善,这就要处理TabView.cpp文件,背景设置功能函数如下: void CTabView::OnBkgrnd() { CTabDlg ctd; ctd.m_nDist=nDist; ctd.m_nColor=nColor;
if(ctd.DoModal()==IDCANCEL) return; nDist=ctd.m_nDist; nColor=ctd.m_nColor; Invalidate();//重新绘制窗口 }
同样,也要对前景设置功能函数进行完善: void CTabView::OnFrgrnd()
{ CPropertySheet cps(\前景设置\创建属性表对象 CTextPage ctp; //显示文字属性页 CStylePage csp;//显示字体属性页 ctp.m_cText=cText; csp.m_bBold=bBold; csp.m_bItalic=bItalic; csp.m_bUnderline=bUnderline;
cps.AddPage(&ctp);//添加属性页 cps.AddPage(&csp);
if(cps.DoModal()==IDCANCEL) return; cText=ctp.m_cText; bBold=csp.m_bBold; bItalic=csp.m_bItalic; bUnderline=csp.m_bUnderline; Invalidate();//重新绘制窗口 }
(5)为了充分演示标签控制与各属性页之间的数据交换功能,应该实现标签控制各属性页与用户之间数据交换结束后的窗口显示功能,笔者实现的功能函数显示了由属性页中输入的字体及背景网格功能,TabView.cpp中的对应函数代码如下: void CTabView::OnDraw(CDC* pDC) { CTabDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
// TODO: add draw code for native data here RECT rc;
GetClientRect(&rc); int i,j,k;
CPen pen,*pOldPen; COLORREF color; switch (nColor){
case 0:color=RGB(0,0,0); //设置黑色 break;
case 1:color=RGB(0xff,0,0);//设置红色 break;
case 2:color=RGB(0,0,0xff);//设置蓝色 break; }
pen.CreatePen(PS_SOLID,1,color);
pOldPen=pDC->SelectObject(&pen);//绘制背景网格 j=rc.right/nDist+1; k=rc.bottom/nDist+1; for(i=0;i pDC->MoveTo(i*nDist,0); pDC->LineTo(rc.right,(j-i)*nDist); } else { pDC->MoveTo(0,(i-j)*nDist); pDC->LineTo(rc.right,i*nDist); } } pDC->SelectObject(&pOldPen); CFont font,*pOldFont; font.CreateFont(50,0,0,0,bBold?1000:200, bItalic,bUnderline,0,ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH,NULL); pOldFont=pDC->SelectObject(&font); pDC->TextOut(20,20,cText); pDC->SelectObject(pOldFont); } 标签控制的整个实现过程虽然比较繁锁,但只要掌握其实现的本质,设计一个优秀的标签控制界面也并非很困难的事情。 笔者实现的标签控制的演练示例结果如下: 标签控制演练示例结果 六、PWIN98/95下演练CToolBar (一)工具条控制的主要功能 所谓工具条就是具有位图和分隔符组成的一组命令按钮,位图按钮部分可以是下推按钮、检查盒按钮、无线按钮等。工具条对象类派生于主窗口架框类CframeWnd或CMDIFrameWnd,其类控制CToolBar::GetToolBarCtrl是MFC类库中封装的一个成员函数,允许使用类库中提供的一般控制和附加功能,CtoolBar类控制成员控制提供了Windows一般控制的所有功能,然而,通过调用 GetToolBarCtrl成员函数取得引用后,可以使工具条具有更强的特性。 工具条的创建具有四个步聚:首先是建立工具条资源;然后建立工具条对象结构;其次通过调用建立函数建立工具条对象并绑定;最后调用LoadToolBar调入工具条资源。 另外,还可以通过直接加载位图的方法来建立,步骤如下:首先建立工具条对象;然后通过调用建立函数建立工具条并绑定对象;其次调入包含按钮的位图;最后利用SetButtons 函数设置按钮的风格并与位图建立联系。 其中,所有按钮位图均存放在一个位图文件中,按钮位图的大小相同,默认为16点宽、15点高,位图必须从左至右存放。设置按钮函数具有指向一组控制标识符ID的指针和索引值,用来确定每个按钮的位置,如果存在分隔符ID_SEPARATOR, 那么该图像就不存在索引值。正常情况下工具条中的按钮都是单排从左至右排列的,可以通过SetButtonInfo函数改变排序规则。 工具条中最终形成的按钮大小相同,均为24 x 22 象素,每个按钮只对象一幅图像。工具条中的按钮默认为下推按钮,通过设置TBBS_CHECKBOX风格可以实现检查盒按钮,通过调用SetRadio成员函数可以实现无线按钮。 (二)工具条控制的对象结构 1、工具条的对象结构 (1)工具条的建立方法 CToolBar &ToolBar 建立工具条对象结构 Create 建立工具条对象并绑定 工具条类CToolBar::Create 的调用格式如下: BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP, UINT nID = AFX_IDW_TOOLBAR ); 其中参数pParentWnd用来确定指向工具条父窗口的指针;参数dwStyle用来确定工具条的风格,其取值如下;参数nID用来确定工具条子窗口的标识符。 CBRS_TOP 表示工具条在框架窗口的顶部 CBRS_BOTTOM 表示工具条在框架窗口的底部 CBRS_NOALIGN 表示工具条在父窗口改变大小时不响应 CBRS_TOOLTIPS 表示工具条具有动态提示功能 CBRS_SIZE_DYNAMIC 表示工具条是静态的不能改变 CBRS_SIZE_FIXED 表示工具条是动态的可以改变 CBRS_FLOATING 表示工具条是浮动的 CBRS_FLYBY 表示状态条上显示工具条中按钮的信息