我想制作一个支持图标的大工具栏,其深度超过Visual Studio中的默认值。我使用的是Visual Studio 2005,工具栏位于CDialog上。
我使用了代码:here 但是没有用。
int CSalariesForm::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_MAINFRAME1), IMAGE_BITMAP,
0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
CBitmap bm;
bm.Attach(hBitmap);
CImageList m_imagelist;
m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4);
m_imagelist.Add(&bm, (CBitmap*) NULL);
cToolBar.Create(this);
cToolBar.GetToolBarCtrl().SetImageList(&m_imagelist);
cToolBar.ShowWindow(SW_SHOW);
cToolBar.SetBarStyle(CBRS_TOOLTIPS | CBRS_FLOATING | CBRS_ALIGN_TOP | CBRS_FLYBY);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
return 0;
}
当我调用对话框时,没有显示工具栏。什么是代码?
谢谢
答案 0 :(得分:1)
将图像列表分配给工具栏不会创建任何工具栏按钮。您的图像列表也应该是类成员,而不是局部变量。
// header file
private:
CImageList m_imagelist;
CToolBar m_toolbar;
// source file
enum { width = 20, height = 20 }; // width and height of one button image
m_toolbar.Create(this);
// create the image list
m_imagelist.Attach(
ImageList_LoadImage(
AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), width, 4,
CLR_DEFAULT, IMAGE_BITMAP, LR_CREATEDIBSECTION | LR_LOADTRANSPARENT )
);
// set button and image sizes (copied from CToolBar::LoadToolBar)
m_toolbar.SetSizes(CSize(width+7,height+7), CSize(width,height));
// set image list
m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);
// define command ids for each button
const UINT cmdIds[] = {
IDOK,
0, // separator
IDCANCEL,
};
// assign ids to the toolbar
m_toolbar.SetButtons(cmdIds, sizeof(cmdIds)/sizeof(UINT));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
IDB_BITMAP1
是一个40x20 24位彩色位图(两个20x20按钮)。如果您需要更多地控制按钮的创建,则可以使用CToolBarCtrl::SetButtons()
代替。有关加载图像列表的详细信息,请参阅ImageList_LoadImage
。