对于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++模板代码再头痛了.
阅读(5204) | 评论(0) | 转发(0) |