主管就是客户,所以我把工具条的界面给主管LOOK了一下,让他操作一下
主管很不满意,说界面太难过.
长得丑也有错?????????没办法,客户是上帝,于是我只得想得点办法美化一下.
开始我想直接往上添加位图的方法实现,如下
SendMessage(hwndToolbar,ADDBITMAP,0,(LPARAM)&bmp);
可是它跟文字总不能很好相处,搞了好久,郁闷.
于是我一翻资料,找到了向按扭上添加ImageList的方法.那就需要一个画好的工具条位置.
可惜,美术功底差,画的更难看,网上一找,也没找到正好符合我的要求的图片.
看来这个方法只能放弃了.
胡乱在网上找了一回,看到了WM_NOTIFY消息,忽然想起通知消息中NM_CUSTOMDRAW消息中能传回控件的DC,
能不能在这个DC上面画上我们想要添加的位置呢?
我当及开始了工作:
在主窗口中添加处理WM_NOTIFY的代码
case WM_NOTIFY:
ToolBarNotify(hWnd,hwndToolbar,lParam);
break;
处理函数如下:
LRESULT ToolBarNotify(HWND hWnd, HWND hwndToolBar,LPARAM lParam)
{
LPNMHDR pnmhdr=(LPNMHDR)lParam;
if(pnmhdr->hwndFrom==hwndToolBar)
{
switch(pnmhdr->code)
{
case NM_CUSTOMDRAW:
{
LPNMCUSTOMDRAW pnmcd=(LPNMCUSTOMDRAW)lParam;
ViewBmp(hwndToolBar,pnmcd->hdc);
break;
}
}
}
ViewBmp函数:
void ViewBmp(HWND htool,HDC hdc)
{
BITMAP bm;
RECT rt;
HDC memdc;
HBITMAP hbm,hbm1;
GetClientRect(htool,&rt);
memdc=CreateCompatibleDC(hdc);
hbm=(HBITMAP)LoadBitmap((HINSTANCE)::GetWindowLong(htool,GWL_HINSTANCE),MAKEINTRESOURCE(IDB_COOL));
GetObject(hbm,sizeof(bm),&bm);
hbm1=(HBITMAP)SelectObject(memdc,hbm);
StretchBlt(hdc,0,0,rt.right,rt.bottom,memdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
SelectObject(memdc,hbm1);
DeleteObject(memdc);
DeleteObject(hbm);
}
显示效果如下:
请主管一看,OK,可以.
总结:
如果以后要更改显示风格只要将背景位图换一下就可以了.