折腾了一天 IDE的资源里始终导入不了画好的外部的BMP,仅仅是24位的图而已 不知道微软为什么这么2 搞什么只支持8位色的 .
然后一堆 LoadToolBar LoadBitMap 还设计到CImageList 之类的 疯了
想问下
1 是不是要准备2份位图 hot 和cold的各一
2 导入不了资源怎么办
3 自己画的位图 怎么区分toolbar上每个按钮的ID? 比如 3个按钮每个是32×32的位图 总共32×96 那怎么给每个按钮分配ID?自己画的话 很好分配的
然后一堆 LoadToolBar LoadBitMap 还设计到CImageList 之类的 疯了
想问下
1 是不是要准备2份位图 hot 和cold的各一
2 导入不了资源怎么办
3 自己画的位图 怎么区分toolbar上每个按钮的ID? 比如 3个按钮每个是32×32的位图 总共32×96 那怎么给每个按钮分配ID?自己画的话 很好分配的
2 导入不了资源怎么办
3 自己画的位图 怎么区分toolbar上每个按钮的ID? 比如 3个按钮每个是32×32的位图 总共32×96 那怎么给每个按钮分配ID?1.hot和cold??不明白
2.256色导入不了位图么?不能吧,实在不行用LoadImage从外部导入液可以的
3.自己画位图的话用SetImageList,传递参数是CImageList,mfc里有一个是SetButtonInfo可以很方便的设置图片
至于参数int iImage则是根据你CImageList载入图片的顺序了,如果是A,B,C载入,0对应A,1对应B,其它类似~
1 Hot和cold就是工具条在enable disable两种状态下的位图
2 256的可以导入 不过只能是16×16的
3 用SetImageList的话 是不是每次载入都要按32×32的载入 而不是一起32×96 的载入?
1.disable的时候没用过,巨难看默认的
2.可以自己设置工具栏图标大小,SetSizes
3.可以一起载入,imagelist会按照你给的大小截断载入
2、加载24色的位图,可以使用手动替换,打开.rc文件,找到资源类似
/////////////////////////////////////////////////////////////////////////////
//
// BMP
//IDR_PNG_TOOLBAR BMP "res\\Toolbar.bmp"将res\\Toolbar.bmp替换为24色的bmp文件,重新编译。然后使用CImageList加载它,可以指定图片的大小为32*32,CImageList会自定分割,可以根据图片的索引来使用。
3、记得是在工具栏上添加按钮时会有个参数是按钮的ID,记不太清楚了,lz可以试一下看看有没有参数ID。
位图的id跟button的id是不同的,你查下CToolBar::SetButtons,原来也有人问,还做了个大图标的例子
是不是这个意思
先用ide里的新建工具栏 随便画点图案 然后进资源里 更改名字 就是我要的位图了
!toolBar.LoadToolBar(IDR_TOOLBAR1))
{ } toolBar.SetSizes( CSize(40,40),CSize(32,32)); //设置大小
UINT IDArray[] ={ID_FILE_NEW, ID_FILE_NEW,ID_FILE_NEW}; //按钮ID,我直接用现成的
toolBar.SetButtons(IDArray, 3); //三个按钮
bmp.LoadBitmap(IDB_BITMAP1); toolBar.SetBitmap(bmp); //设置Toolbar图片.h里加CToolBar toolBar; CBitmap bmp;就可以了,图片ID自己搞定吧
我在试CMFCToolBar 有差别 在尝试
if (!m_wndMyToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndMyToolBar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("未能创建自定义工具栏\n");
return -1; // 未能创建
}
m_wndMyToolBar.CleanUpImages();
m_MyImages.SetImageSize(CSize(32,32),FALSE);
bool b;
b = m_MyImages.Load(_T(".\\IDB_TOOLBAR_HOT.bmp"));
m_wndMyToolBar.SetSizes(CSize(32,32),CSize(32,32));
m_wndMyToolBar.SetUserImages(&m_MyImages);
UINT IDArray[] ={ID_FILE_NEW, ID_FILE_OPEN};
m_wndMyToolBar.SetButtons(IDArray,2);
不过DEBUG的时候会断在
_AFXWIN_INLINE void CDC::FillRect(LPCRECT lpRect, CBrush* pBrush)
{ ASSERT(m_hDC != NULL); ::FillRect(m_hDC, lpRect, (HBRUSH)pBrush->GetSafeHandle()); }
这里
不知道什么原因?