你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
在VC6.0中窗口界面的工具条上加各种控制
 

概述:VC++ 6.0中用MFC编程,实现窗口的工具条上加各种控制,举例实现加入组合框(CComboBox)和复选框(CCheckBox)。

举例如下:

 

一、加入组合框(CComboBox

1.用资源编辑器在工具条资源上加一个按钮,位置是你想要放组合框的位置。给这个按钮一个资源名。

注意要在这个按钮的两边留空,否则会出错。

2.从CToolBar类派生一个类,给它一个CComboBox类的成员变量。

class CMyToolBar : public CToolBar

{

public:

   CComboBox m_wndsnap;

};

3.在你的主框架.h文件中用你新建的类实例替换CToolBar类的实例。

protected: // control bar embedded members

    cstatusbar m_wndstatusbar;

CMyToolBar m_wndToolBar;

注意要加入第一步定义的类的包含说明;

4.在你的主框架OnCreate函数中用以下方法替换掉用来占位的按钮。

  if(!creatToolbar())

      return -1;

creatToolbar()是我定义的主框架类函数,实现如下:

BOOL CMainFrame::creatToolbar()

{

    /////////////////////////////////////////

    //body of on create goes here

 

    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |

WS_VISIBLE | CBRS_TOP   | CBRS_GRIPPER | CBRS_TOOLTIPS |

CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

    {

      TRACE0("Failed to create toolbar\n");

      return false;      // fail to create

  }

 

    #define snap_width 100 //组合框的宽度

 

    //设置组合框控制为下拉式选择框

    //首先得到占位符在工具条上的位置

    int index = 0;

    CRect   rect;

    while(m_wndToolBar.GetItemID(index)!=IDP_COMBOBOX) index++;

    //接着把占位符转换成一个分割条

    m_wndToolBar.SetButtonInfo(index,IDP_COMBOBOX,

TBBS_SEPARATOR, snap_width);

    m_wndToolBar.GetItemRect(index, &rect);

 

    //定义矩形框大小使组合框能放下

    rect.bottom += 200;

 

    // 接着建立这个组合框并显示它

    if (!m_wndToolBar.m_wndsnap.Create(WS_CHILD|WS_VISIBLE | CBS_AUTOHSCROLL |

    CBS_DROPDOWNLIST | CBS_HASSTRINGS ,

 rect, &m_wndToolBar, IDP_COMBOBOX))

    {

       TRACE0("failed to create combo-box\n");

       return false;

    }

    m_wndToolBar.m_wndsnap.ShowWindow(SW_SHOW);

 

    //填充这个组合框

    m_wndToolBar.m_wndsnap.AddString("400%");

    m_wndToolBar.m_wndsnap.AddString("200%");

    m_wndToolBar.m_wndsnap.AddString("100%");

    m_wndToolBar.m_wndsnap.AddString("50%");

    m_wndToolBar.m_wndsnap.AddString("25%");

    m_wndToolBar.m_wndsnap.SetCurSel(0);

    return TRUE;

}

现在就可以看看效果了,觉得怎样?

    还可以继续加入别的控制,下面就加一组复选框。复选框比组合框稍微复杂一点。二、加入复选框(CCheckBox

1 同上第一步,在工具条资源上加一个按钮。

2 CmyToolBar类加入新变量如下所示:

class CMyToolBar: public CToolBar

{

public:

    CComboBox m_wndsnap;

    CButton m_wndcenter;新加入的

    CButton m_wndedge;

    CButton m_wndtrack;

    CButton m_wndzoom;

};

在主框架类中加一Cfont变量gsmallfont.

3 在你的主框架OnCreate函数中加入实现代码。

if(!CreateCheckBox())

     return -1;

CreateCheckBox()是我定义的主框架类函数,实现如下:

BOOL CMainFrame::CreateCheckBox()

{   

    ////////////////////////////////

    // body of oncreate here

    //设置用于按钮文字的小字体

    CClientDC dc(GetDesktopWindow());

    long logical_pixels = dc.GetDeviceCaps(LOGPIXELSX);

    if(logical_pixels <100)

   {

       gsmallfont.CreatePointFont(67,"缺省",NULL);

   }else{

       gsmallfont.CreatePointFont(50," 缺省",NULL);

   }

   //生成四个检查框

#define check_width 94

   int index=0;

   CRect rect;

   CRect safe_rect;

   while(m_wndToolBar.GetItemID(index)!=ID_MULTI_CHECK) index++;

   // 生成"居中"检查框

   m_wndToolBar.SetButtonInfo(index, ID_MULTI_CHECK, TBBS_SEPARATOR, check_width);

   m_wndToolBar.GetItemRect(index, &rect);

   safe_rect=rect;

   rect.left +=2;

   rect.right=rect.left + ((check_width / 2)-4);

   rect.top=0; rect.bottom=rect.top + 10;

   if (!m_wndToolBar.m_wndcenter.Create("居中

",BS_CHECKBOX|WS_CHILD|WS_VISIBLE,

       rect, &m_wndToolBar, ID_MULTI_CHECK))

   {

       TRACE0("failed to create center check-box\n");

       return false;

   }

   m_wndToolBar.m_wndcenter.SendMessage(WM_SETFONT,(WPARAM)HFONT(gsmallfont),true);

   //生成"边界"检查框

   rect.top=rect.bottom ;

   rect.bottom=rect.top + 10;

   if (!m_wndToolBar.m_wndedge.Create("边界

",BS_CHECKBOX|WS_CHILD|WS_VISIBLE,

       rect, &m_wndToolBar, ID_MULTI_CHECK))

   {

       TRACE0("failed to create edge check-box\n");

       return false;

   }

   m_wndToolBar.m_wndedge.SendMessage(WM_SETFONT,(WPARAM)HFONT(gsmallfont),true);

   //生成"缩放"检查框

   rect=safe_rect;

   rect.left +=((check_width / 2)+4);

   rect.top=0;

   rect.bottom=rect.top + 10;

   if (!m_wndToolBar.m_wndzoom.Create("缩放

",BS_CHECKBOX|WS_CHILD|WS_VISIBLE,

       rect, &m_wndToolBar, ID_MULTI_CHECK))

   {

       TRACE0("failed to create zoom check-box\n");

       return false;

   }

   m_wndToolBar.m_wndzoom.SendMessage(WM_SETFONT,(WPARAM)HFONT(gsmallfont),true);

   //生成"跟踪"检查框

   rect.top=rect.bottom ;

   rect.bottom=rect.top + 10;

   if (!m_wndToolBar.m_wndtrack.Create("跟踪

",BS_CHECKBOX|WS_CHILD|WS_VISIBLE,

       rect, &m_wndToolBar, ID_MULTI_CHECK))

   {

       TRACE0("failed to create track check-box\n");

       return false;

   }

   m_wndToolBar.m_wndtrack.SendMessage(WM_SETFONT,(WPARAM)HFONT(gsmallfont),true);

   return TRUE;

}

至此,四个检查框就生成了,如要对其状态进行设置和检查,可以用classWizard增加响应函数,在响应函数中取得按钮的状态,即可进行。

其他的控制如进程条、树型框等都可以用上面的方法生成,希望上面写的方法,能抛砖引玉,大家互相学习,提高编程水平。

 

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089