在对话框上放置一个工具栏,代码如下:RECT rect; //工具栏的显示范围
rect.top = 10;
rect.left = 1;
rect.right = rect.left + 95;
rect.bottom = rect.top + 15;
UpToolBar.Create(WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NOPARENTALIGN,
//CCS_NOPARENTALIGN状态一定要加上,不然会忽略rect
rect, this, 0);
UpToolBar.AddBitmap(4, IDR_UP_TOOLBAR);
//这里初始化一个TBBUTTON数组UpButtons),略
UpToolBar.AddButtons(4, UpButtons);表现是:
一:如果rect.left等于0,那么设置rect.top是多少,工具栏就会从对话框顶部(客户区)向下移动多少,正常!
二:如果rect.left大于0,那么工具栏会往下跳一大步,本来工具栏左上角坐标应该是(rect.left,rect.top),结果表现就像是给rect.top加了一个常数,即坐标成了(rect.left,rect.top+n),而且这个n很大,上百感觉上。
总之就是说,把rect.left设为0和1有很大区别,而且区别是在垂直上(水平上就差1像素,不明显)。我试了一种方法,在要显示工具样的地方放个静态文本框,不写文字,或隐藏也可,然后把工具栏的Create函数中的pParentWnd写入这个静态文本框窗口指针,即:
UpToolBar.Create(WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NOPARENTALIGN, 
rect, GetDlgItem(IDC_XXXX, 0);
上面的方法行是行,但rect.bottom不管怎么设置,效果都一样。例如我加上TBSTYLE_WRAPABLE属性,然后把rect.right减小,那么当一行显示不完的时候就应该显示到下一行了,可是不管设置rect.bottom有多大或多小,最终都只显示一行,换到下一行的工具按钮只能看到一条线,但能点击,说明换行是成功了的。还有一个问题就是GetDlgItem返回的指针会变得无效的,不知道这样行不行?