Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1009128
  • 博文数量: 177
  • 博客积分: 3629
  • 博客等级: 中校
  • 技术积分: 1839
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-23 21:21
文章分类

全部博文(177)

文章存档

2021年(1)

2020年(5)

2019年(4)

2018年(7)

2017年(1)

2016年(4)

2014年(1)

2013年(8)

2012年(10)

2011年(50)

2009年(12)

2008年(10)

2006年(56)

2005年(8)

分类: WINDOWS

2006-05-14 16:52:01

对于Rebar使用起来一般的功能还是很方便的.对于WTL中常规使用更是如此,是需一个
AddSimpleReBarBand
就可以做为Rebar的band来管理一个工具栏窗口了,当然菜单栏窗口也可以如此加入.这样做的结果是位置不能精确控制,并且有些风格已经默认,修改起来还得用SendMessage.麻烦.
 
但框架的好处就是这样了.但偶想学freedownload工具栏右边的一个位图始终显示在在右边的位置.这时简单利用上面的API已经不行了,主要是位置不容易控制.
不得已再次查MSDN,最后得到如下代码可行:
 
CRect rect;
GetClientRect(&rect);
rect.left=rect.right-130;
rect.bottom=32;
m_wndPic.Create(m_hWnd,rect,NULL,WS_CHILD|WS_VISIBLE|WS_OVERLAPPED,
    WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR);
REBARBANDINFO bandInfo;
   bandInfo.cbSize=sizeof(REBARBANDINFO);
   bandInfo.fMask =RBBIM_STYLE|RBBIM_SIZE|RBBIM_CHILD|RBBIM_IDEALSIZE|RBBIM_CHILDSIZE|RBBIM_ID;
   bandInfo.fStyle=RBBS_FIXEDSIZE;
   bandInfo.cx=126;
   bandInfo.hwndChild=m_wndPic;
   bandInfo.cxMinChild=126;
   bandInfo.cyMinChild=32;
   bandInfo.cxIdeal=126;
   bandInfo.wID=ATL_IDW_BAND_FIRST + (int)::SendMessage(m_hWndToolBar, RB_GETBANDCOUNT, 0, 0L);
   ::SendMessage(m_hWndToolBar,RB_INSERTBAND,(WPARAM) (UINT)1,&bandInfo);
 
因为WTL中的Rebar句柄会赋值给m_hWndToolBar,所以m_hWndToolBar实际是Rebar窗口句柄.
m_wndPic声明如下:
CDisplayImage m_wndPic;
这是个自定义窗口类,在此类的WM_PAINT中显示需要的位图.
注意在上面的Create函数中没有相关的CCS_*风格,而这些风格是Rebar管理band需要的.因为偶只想显示图片不想别的,所以去掉了它们也无妨.
注意rect结构,偶直接把窗口的位置确定在工具栏右边.且在bandInfo.fStyle中设置相应的结构.这里就是最麻烦的一个结构了.
REBARBANDINFO
此结构众多,由掩码控制.偶烦这样的编程方式.
 
无论如何,最后还得查API,还得从底层做起.呵呵,做到这里偶想起了delphi的优势.用delphi只做过一个小程序,界面那个方便哦,简直理想化.
 
用WTL仍然需要对API的深入理解,做界面时想偷懒绕过他们的愿望落空了.不断去查MSDN,这就是偶用WTL的现状.偶想在界面上有个好C/C++库,但寻寻觅觅到如今还是走到了这一步.
 
但相信一点,一旦用熟了WTL的类,绝对会拨开云雾见青天.大大提高效率.呵呵,至少不会对C++模板代码再头痛了.
 
 
 
 
阅读(5052) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~