首页上一页 1 下一页尾页 1 条记录 1/1页
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 第三个
现在编译能通过,但是运行后工具栏只有图标,图标下面没有文字!!
我的程序的意思是让图标下面显示“第一个 第二个 第三个”
下面是按照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 第三个
现在编译能通过,但是运行后工具栏只有图标,图标下面没有文字!!
我的程序的意思是让图标下面显示“第一个 第二个 第三个”