大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 网页设计 -> HTML/CSS -> Toolbar制作菜单条过程详解

Toolbar制作菜单条过程详解

时间: 2021-07-31 作者:daque

此刻很多用户界面都运用东西栏创造菜单条,兄弟迩来对此感爱好,便从网上告急,然而获得的扶助大多是bcgcontrolbar的源代码大概是sizablerebar的源代码,对于只蓄意是本人的界面具备该功效的伙伴来说,这大概是不错的采用,只有看一下demo,而后径直挪用旁人的类库就不妨了,但对于我等对此话题感爱好,蓄意弄懂其前因后果的读者群来说,径直看那些没有精细证明的源代码,要居中弄出个以是然来,实不是件简单的是,起码对于像我如许的菜鸟来说是如许的,正文出于此种因为,蓄意对还在探求此扶助的读者群能供给少许扶助。底下咱们边看边侃:在接受到toolbarbutton按下动静时,咱们普遍运用trackpopupmenuex弹出菜单,题目的要害是,在菜单未封闭时,trackpopupmenuex并不归来,并阻挡鼠标和键盘动静,运用spy不妨看到,此时的东西栏收不就任何动静,固然无从变换热门,这就须要咱们本人探测鼠标场所并在鼠标挪动到下一个热门时封闭上一个菜单并表露下一个菜单。这边咱们运用钩子因变量setwindowshookex在挪用trackpupupmenuex前安置wh_msgfilter钩子,代码如次:m_hmsghook = setwindowshookex( wh_msgfilter, messageproc, 0, getcurrentthreadid() );mssageproc是钩子因变量,代码如次:lresult callback messageproc(int code, wparam wparam, lparam lparam){if (code == msgf_menu){hookmessageproc(lparam);}return callnexthookex(m_hmsghook, code, wparam, lparam);}因变量查看动静,即使是来自菜单,则将动静传播给因变量hookmessageproc处置,咱们所要做的即是在该因变量中检验和测定动静wm_mousemove,并尝试鼠标场所,即使鼠标仍旧挪动到另一个按钮上,则封闭菜单并表露下一个菜单,封闭菜单运用动静wm_cancelmode,当菜单封闭后,咱们要开释钩子,鄙人一个菜单弹出时从新安置钩子,弹出菜单示例代码如次:void trackpopup(hwnd hwndtoolbar, int ibutton){while (ibutton >= 0){sendmessage(hwndtoolbar,tb_sethotitem,ibutton,0);ipopup = ibutton;//安置钩子g_hmsghook = setwindowshookex(wh_msgfilter, messageproc, 0, getcurrentthreadid());//弹出菜单trackpopupmenuex(…);//卸载钩子unhookwindowshookex(g_hmsghook);ibutton = inextpop; //下一个弹出项,若为负,则退出}sendmessage(hwndtoolbar,tb_sethotitem,-1,0);}(体味与倡导:即使button运用款式tbstyle_dropdown,请不要在动静tbn_dropdown市直接挪用该因变量,应运用中央动静,而后运用postmessa个发送该动静,以使tbn_dropdown不妨径直归来,要不取消第一个高亮热门是很烦恼的事。)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.asphttp://www.microsoft.com/msj/0199/c/c0199.aspx95090Toolbar制作菜单条过程详解xmlscript.src="http://guide.pconline.com.cn/comment/commentservice_js.jsp?"+(new date()); (根源:csdn)

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.