iPopup为当前弹出项,iNextPop为下一个弹出项,这些变量需要在函数HookMessageProc中处理,示例代码如下:
void HookMessageProc(MSG * pMsg) { if (pMsg->message == WM_MOUSEMOVE) { int iButton, iCount; POINT pt = { LOWORD(pMsg->lParam), HIWORD(pMsg->lParam) }; ScreenToClient(hWndToolbar, &pt); iButton = SendMessage(hWndToolbar, TB_HITTEST, 0, &pt); iCount = SendMessage(hWndToolbar, TB_BUTTONCOUNT, 0, 0); if (iPopup != iButton && iButton < iCount && iButton >= 0) { iNextPop = iButton; SendMessage(hWndMain, WM_CANCELMODE, 0, 0); } else { iNextPop = -1; } } } (经验与建议:不要试图在此处调用TrackPopup,我曾试图取消该函数内的while循环,直接在此调用该函数,结果是在TrackPopupMenuEx未返回之前,该函数已被调用) 这里,仅仅处理了鼠标移动消息,真正的菜单还应处理键盘导航消息,详细的代码可以参考 BCGControlBar(http://www.vckbase.com/code/downcode.asp?id=1382) 或SizableRebar(http://www.codeproject.com/docking/sizablerebar/SizableRebar_demo.zip ) 有了这底层框架,这些处理过程应该不再困难,文章所涉及到的一些API函数可以参考msdn。 Msdn上相关资料: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/faq/iemenubar.asp http://www.microsoft.com/msj/0199/c/c0199.aspx |
正在阅读:Toolbar制作菜单条过程详解Toolbar制作菜单条过程详解
2004-02-14 09:34
出处:PConline
责任编辑:chenyong
键盘也能翻页,试试“← →”键