Monday, March 23, 2009

Rebar Controls 使用需要注意点.

由于需要, 今天在程序中使用了 Rebar 这个控件.
和以往一样, MSDN ... 不过今天却遇到了点问题.

按理说Rebar也算是一个比较灵活的控件, 不过MSDN只给出了一个Sample ... 更让人郁闷的是这个Sample竟然是有错误的... 我汗... 汗了一个下午... 汗的我感冒都快好了...

它给出的示例代码叫"Creating a Rebar Control”功能很单一, 创建一个Rebar上面放了一个ToolBar一个Combobox

它使用下面这句话取到ToolBar按钮大小
DWORD dwBtnSize = SendMessage(hwndToolbar, TB_GETBUTTONSIZE, 0,0);

然后执行了以下操作.
rbBand.cyChild = LOWORD(dwBtnSize);
rbBand.cxMinChild = NUMBUTTONS * HIWORD(dwBtnSize);
rbBand.cyMinChild = LOWORD(dwBtnSize);


很显然, HIWORD和LOWORD用反了... 所以创出来的都是畸形..

这是一个问题, 另一个问题是:
如果你直接写一个WinMain, 然后运行这个示例代码. 你会发现执行
SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
的时候总是失败. 也没有LastError, 很是郁闷.

经过仅两个小时的仔细研究, 发现要定义Windows版本在0501以上才行.
#define _WIN32_WINNT 0x0501
#define WINVER 0x0501


最后来张截图, Rebar用在这里了

No comments:

Post a Comment