VC数据库系统开发完全手册中的自定义工具栏不能显示文字的问题!
发表在C语言图书答疑 2009-09-20
是否精华
版块置顶:
代码如下,请帮我看看哪里出了问题:
下面是按照15.9设计工具栏中的代码写的~ 

我新建了一个类,然后在头文件中声明了 
int m_ButtonCount; 
CImageList* imagelist; 


C/C++ code
// CustomBar.cpp : implementation file
//

#include "stdafx.h"
#include "gongjulan.h"
#include "CustomBar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


extern CGongjulanApp theApp;


/////////////////////////////////////////////////////////////////////////////
// CCustomBar

CCustomBar::CCustomBar()
{
    imagelist=new CImageList();
}

CCustomBar::~CCustomBar()
{
    delete imagelist;
}


BEGIN_MESSAGE_MAP(CCustomBar, CToolBarCtrl)
    //{{AFX_MSG_MAP(CCustomBar)
        // NOTE - the ClassWizard will add and remove mapping macros here.
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCustomBar message handlers

BOOL CCustomBar::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) 
{
    // TODO: Add your specialized code here and/or call the base class
    CToolBarCtrl::Create(dwStyle,rect,pParentWnd,nID);
    m_ButtonCount=6;   //定义工具栏按钮数量
    SetBitmapSize(CSize(32,32));
    imagelist->Create(32,32,ILC_COLOR32|ILC_MASK,0,0);//创建图像列表对象
    for(int n=0;n<13;n++)//添加图标
    {
        imagelist->Add(theApp.LoadIcon(n+IDI_ICON1));
    }
    SetImageList(imagelist);//将图像关联到工具栏上
    TBBUTTON* m_pButtons;
    m_pButtons=new TBBUTTON[m_ButtonCount];
    for(int i=0;i<m_ButtonCount;i++)
    {
        CString string;
        string.LoadString(i+IDS_DIYI);
        int stringlength=string.GetLength()+1;
        TCHAR* char1=string.GetBufferSetLength(stringlength);
        char1[stringlength]=0;
        char1[stringlength-1]=0;
        
        VERIFY((m_pButtons[i].iString=AddStrings(char1))!=-1);
        m_pButtons[i].fsState=TBSTATE_ENABLED;
        m_pButtons[i].dwData=0;
        m_pButtons[i].fsStyle=TBSTYLE_BUTTON;
        m_pButtons[i].iBitmap=i;
        m_pButtons[i].idCommand=i+IDS_DIYI;
        
        string.ReleaseBuffer();
    }
    m_pButtons[i-1].idCommand=IDCANCEL;
//=========================================================================
    TBBUTTON b;//设置分隔条
    b.idCommand=0;
    b.fsStyle=TBSTYLE_SEP;
    b.fsState=TBSTATE_ENABLED;
    b.iString=0;
    b.iBitmap=0;
    b.dwData=0;


    for(int j=0;j<m_ButtonCount;j++)//在程序里添加工具栏
    {
        VERIFY(AddButtons(1,&m_pButtons[j]));
        if(!((j+1)%3))
        {
            VERIFY(AddButtons(1,&b));
        }
    }
    return true;
    //return CWnd::Create(dwStyle, rect, pParentWnd, nID, pContext);
}





然后在主窗口调用: 
在C******DLG头文件里声明CCustomBar toolbat; 

C/C++ code
BOOL CGongjulanDlg::OnInitDialog()
{
//………………………………………………………………
    CDialog::OnInitDialog();
         toolbar.Create(TBSTYLE_FLAT|CCS_TOP|WS_CHILD|WS_VISIBLE|WS_BORDER|CCS_ADJUSTABLE|
        TBSTYLE_WRAPABLE,CRect(0,0,0,0),this,IDR_TOOLBAR1);
         return TRUE;  // return TRUE  unless you set the focus to a control
}




我加入了一个菜单栏,菜单栏上有三个选项,并把这三个选项添加到String Table里,分别为 
ID                  Value                    Caption 
IDS_DIYI            201                      第一个 
IDS_DIER            202                      第二个 
IDS_DISAN          203                      第三个 


现在编译能通过,但是运行后工具栏只有图标,图标下面没有文字!! 
我的程序的意思是让图标下面显示“第一个  第二个  第三个”
分享到:
精彩评论 1
songkun
学分:0 LV1
2009-09-21
沙发
由于我无法直接调试您的程序,直接看代码很难找出问题所在。不过可能的一个原因是 工具栏按钮设置的比较小,工具栏按钮位图比较大。您可以适当调整工具栏按钮的大小,将其设置的大一些看看
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照