#include TabDlg.h #include TextPage.h #include StylePage.h
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(0,i*nDist); if(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); }
标签控制的整个实现过程虽然比较繁锁,但只要掌握其实现的本质,设计一个优秀的标签控制界面也并非很困难的事情。
笔者实现的标签控制的演练示例结果如下: 标签控制演练示例结果
第6章 演练CToolBar
6.1 工具条控制的主要功能
所谓工具条就是具有位图和分隔符组成的一组命令按钮,位图按钮部分可以是下推按钮、检查盒按钮、无线按钮等。工具条对象类派生于主窗口架框类 CframeWnd或CMDIFrameWnd,其类控制CToolBar::GetToolBarCtrl是MFC类库中封装的一个成员函数,允许使用类库中提供的一般控制和附加功能,CtoolBar类控制成员控制提供了Windows一般控制的所有功能,然而,通过调用 GetToolBarCtrl成员函数取得引用后,可以使工具条具有更强的特性。 工具条的创建具有四个步聚:首先是建立工具条资源;然后建立工具条对象结构;其次通过调用建立函数建立工具条对象并绑定;最后调用LoadToolBar调入工具条资源。
另外,还可以通过直接加载位图的方法来建立,步骤如下:首先建立工具条对象;然后通过调用建立函数建立工具条并绑定对象;其次调入包含按钮的位图;最后利用SetButtons 函数设置按钮的风格并与位图建立联系。
其中,所有按钮位图均存放在一个位图文件中,按钮位图的大小相同,默认为16点宽、15点高,位图必须从左至右存放。设置按钮函数具有指向一组控制标识符 ID的指针和索引值,用来确定每个按钮的位置,如果存在分隔符ID_SEPARATOR, 那么该图像就不存在索引值。正常情况下工具条中的按钮都是单排从左至右排列的,可以通过SetButtonInfo函数改变排序规则。工具条中最终形成的按钮大小相同,均为24 x 22 象素,每个按钮只对象一幅图像。工具条中的按钮默认为下推按钮,通过设置TBBS_CHECKBOX风格可以实现检查盒按钮,通过调用SetRadio成员函数可以实现无线按钮。 6.2 工具条控制的对象结构 6.2.1 工具条的对象结构 6.2.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 表示状态条上显示工具条中按钮的信息 CBRS_HIDE_INPLACE 表示工具条隐藏
除以上函数外,还包括设置按钮和位图的大小SetSizes、设置工具条的高度SetHeight、调入工具条资源LoadToolBar、调入工具条按钮位图LoadBitmap、设置工具条按钮位图SetBitmap、设置工具条中位图按钮的风格和索引值SetButtons等控制函数。 6.2.1.2 工具条的类属性
工具条控制类的属性包括取得标识符ID对象按钮索引CommandToIndex、取得索引对应的命令标识符ID或分隔符GetItemID、取得索引对应的矩形区域GetItemRect、取得按钮风格
GetButtonStyle、设置按钮风格SetButtonStyle、取得按钮的ID标识-风格-图象数GetButtonInfo、设置按钮ID 标识-风格-图象数SetButtonInfo、取得按钮提示文本GetButtonText、设置按钮提示文本SetButtonText和取得工具条直接存取控制GetToolBarCtrl等。
6.2.2 工具条控制的对象结构 6.2.2.1 工具条控制的建立方法
CToolBarCtrl &ToolBarCtrl 建立工具条控制对象结构 Create 建立工具条控制对象并绑定
工具条控制类CToolBarCtrl::Create的调用格式如下:
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
其中参数dwStyle用来确定工具条控制的风格,必须存在WS_CHILD风格;参数rect用来确定工具条控制的大小和位置;参数pParentWnd用来确定工具条控制的父窗口指针,不能为NULL;参数nID用来确定工具条控制的标识符。 可以利用WS_CHILD、WS_VISIBLE和WS_DISABLED来设置工具条窗口的风格,但必须合理设置如下控制风格:
CCS_ADJUSTABLE 允许用户处理工具条窗口大小,如果存在工具条窗口必须处理相应信 CCS_BOTTOM 使控制处于父窗口客户区域底部并与窗口同样宽 CCS_NODIVIDER 禁止在控制的顶部绘制2个象素的高亮条 CCS_NOHILITE 禁止在控制的顶部绘制1个象素的高亮条
CCS_NOMOVEY 使控制改变大小和移动时自动水平对齐,垂直对齐必须处理WM_SIZE消息 如果CCS_NORESIZE风格有效,则该风格无效
CCS_NOPARENTALIGN禁止控制自动移到父窗口顶部或底部,如果CCS_TOP或 CCS_BOTTOM风格 有效,则高度调整为默认而宽度可以改变
CCS_NORESIZE 禁止设置新的大小或无效值时使用默认宽度和高度值,而使用建立值 CCS_TOP 使控制自动停靠在父窗口客户区域顶部并与父窗口同样宽度 最后,还必须利用下面的风格来控制工具条
TBSTYLE_TOOLTIPS 使工具条建立并管理动态提示控制 TBSTYLE_WRAPABLE 使工具条控制按钮具有多行排列格式 6.2.2.2 工具条控制中的数据结构
工具条控制中最常用的数据结构为TBBUTTON,其具体结构如下: typedef struct _TBBUTTON {
int iBitmap; // 基于0的位图索引值
int idCommand; // 按钮按下时发送的命令值 BYTE fsState; // 按钮的状态 BYTE fsStyle; // 按钮的风格
DWORD dwData; // 应用程序定义的数据
int iString; // 基于0的按钮标签字符串索引值 } TBBUTTON;
其中按钮状态fsState的值如下:
TBSTATE_CHECKED 表示按钮具有TBSTYLE_CHECKED风格并且被按下 TBSTATE_ENABLED 表示按钮允许接受输入,否则变灰不接受任何输入 TBSTATE_HIDDEN 表示按钮不可见并且不接受任何输入 TBSTATE_INDETERMINATE 表示按钮是变灰的 TBSTATE_PRESSED 表示按钮正被按下
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库常用控件用法(5)在线全文阅读。
相关推荐: