真彩色工具栏和可视的拖拽操作

今天总结两个MFC界面处理的问题:
1.  真彩色工具栏
2.  如何实现可视的拖拽操作
===============================真彩色工具栏=========================================
  
经过多次实践, 总结出关于工具栏的一些编程体会:

1. 更高位的色彩的支持

   对工具栏而言, 图标都保存在图象列表中,而对于这个图象列表, 自然是不能从 工具栏 资源中获得. 而要手动创建和设置
 
   CImageList  img;
   img.Create(44, 40, ILC_COLOR32 | ILC_MASK , 8, 2); 

   CImageList::Create几个重载函数中,只有这个生成的列表能提供对16位色以上色彩的支持.
     其他的几个同名函数, 采用默认方式创建的图象列表只支持16色(会丢失一些颜色)


   下一步就是向图象列表中添加图标或位图
   CBitmap bmp;
   bmp.LoadBitmap(IDB_TOOLBAR01);  
   img.Add(&bmp, RGB(255,0,255));  // 不要埋怨为什么必须用MFC类CBitmap, CImageList本身就是MFC类型
  
   img.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); // 这是添加图标

     另外, 在参考了MSDN 2003的例子mfcie 里面使用Rebar和toolbar的代码后,   可以通过修改REBARBANDINFO 结构体实现对工具条的背景图;   这样我们的工具栏就具有了 "自定义背景位图" 和 "24/32位真彩色图标" 两种特性. 不过遗憾的是引入了Rebar,  这也可能不像我们原来期望那样,  并不是一个简单的派生类的替换就可以了. 但是这也是十分可靠的一种方案.

2. 应用到工具栏中

   CToolBar的一个成员函数 GetToolBarCtrl, 如下:
   m_wndToolBar.GetToolBarCtrl().SetImageList(&img);        // 设置normal状态的图象列表
   m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);     // 设置hot 状态的图象列表
   m_wndToolBar.GetToolBarCtrl().SetDisabledImageList(&img) // 设置Disabled 状态的图象列表

3. 添加对应的Button
   m_wndToolBar.SetButtons(NULL, 13);
   m_wndToolBar.SetButtonInfo(0, ID_APP_ABOUT, TBSTYLE_BUTTON, 0);
   m_wndToolBar.SetButtonInfo(1, ID_VIDEORECT1, TBSTYLE_CHECK, 1);
   m_wndToolBar.SetButtonInfo(2, ID_VIDEORECT1, TBSTYLE_CHECKGROUP, 2);
   m_wndToolBar.SetButtonInfo(3, ID_VIDEORECT1, TBSTYLE_CHECKGROUP, 2);

===============================可视的拖拽操作========================================
1. 主要函数
   CImageList* pImageList;
   pImageList = CreateDragImage(hItem);                   // 这是个new操作,用后要delete

   CImageList::BeginDrag( int nImage, CPoint ptHotSpot);  // 非静态成员函数
   CImageList::DragEnter( CWnd* pWnd, CPoint pt);
   SetCapture();

   CImageList::DragMove(pt);       // WM_MOUSEMOVE处理函数中调用

   CImageList::DragLeave(NULL);    // WM_LBUTTONUP处理函数中调用
   CImageList::EndDrag();
   ReleaseCapture();

2. 需要了解的是除了成员函数BeginDrag以外,列出的CImageList的其他成员函数都是static类型.
   静态函数可以在没有对象存在的情况下使用; CImageList对象可以利用控件的成员函数生成默认的(如CTreeCtrl),
   也可以自己生成
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值