请各位为在下指点迷津,谢了。(100分)

  • 主题发起人 主题发起人 wisenow
  • 开始时间 开始时间
W

wisenow

Unregistered / Unconfirmed
GUEST, unregistred user!
目的:自己重画菜单。<br>错误:得到菜单的标题是乱七八糟,甚至为空。<br>代码:<br>procedure WMDRAWITEM(var M: TMessage); message WM_DRAWITEM;<br><br>procedure TBookCLass.WMDRAWITEM(var M: TMessage);<br>var<br>&nbsp; BKcolor, txtColor: Cardinal;<br>&nbsp; R, R1: TRect;<br>&nbsp; B: HBrush;<br>&nbsp; mchr: array[0..255] of char;<br>begin<br>&nbsp; ... &nbsp; &nbsp; &nbsp;... &nbsp; &nbsp; &nbsp;...<br>&nbsp; //GetMenuString(FMenu, PDrawItemStruct(M.LParam).itemID, mchr, 255, MF_BYCOMMAND);<br>&nbsp; // &nbsp;MessageBox(0, '', '', 0);<br>&nbsp; // 曾经试用GetMenuString不过得到的是空 &nbsp;<br>&nbsp; //mchr[0] := pchar(PDrawItemStruct(M.LParam).itemData)^;<br><br>&nbsp; TextOut(PDrawItemStruct(M.LParam).hDC,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; R.Left,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; R.Top,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //pchar(Trim(mchr)),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Length(Trim(mchr)));<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pchar(PDrawItemStruct(M.LParam).itemData), // 得到的不完全正确<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Length(Trim(pchar(PDrawItemStruct(M.LParam).itemData))));<br>&nbsp; //MessageBox(0, '', pchar(PDrawItemStruct(M.LParam).itemData), 0);<br>&nbsp; M.Result := 1;<br>end;<br>
 
高手呢?
 
你为什么不用 Ondrawitem事件呢?
 
我的菜单是用API生成的<br><br>上面的问题已经解决,使用了数组,先把Menu的Caption保存起来,然后再去查找<br><br>不过还有一问题,就是当菜单弹出后,如何让他隐藏?
 
期待高手出现
 
你的菜单是用API生成的,不代表你以后就一定都用API来写。<br>难道不能用DELPHI提供的ADDITEM等函数吗?太执照了。
 
我为了使程序尽可能的小,所以没有使用VCL
 
***********************请注意**************************<br>上面的问题已经解决,使用了数组,先把Menu的Caption保存起来,然后再去查找<br><br>不过还有一问题,就是当菜单弹出后,如何让他隐藏?
 
菜单就是用来让人选的,选后自然隐藏。<br>你要在什么情况下隐藏?
 
你的菜单不是使用资源文件而是直接画在窗体上的?如果使用资源文件,在资源文件<br>脚本中写 POPUP ,或直接使用资源编辑器就行,这样通过 API 创建的菜单应该没有<br>你所说的问题的呀。
 
一个例子菜单脚本:<br>MENU MENU DISCARDABLE <br>BEGIN<br>&nbsp; &nbsp; POPUP "Item"<br>&nbsp; &nbsp; BEGIN<br>&nbsp; &nbsp; &nbsp; &nbsp; MENUITEM "Item1", 40001<br>&nbsp; &nbsp; &nbsp; &nbsp; MENUITEM "Item2", &nbsp;40002<br>&nbsp; &nbsp; END<br>END
 
to jsxjd: 比如有些程序的TrayIcon弹出的菜单,除非你选择一项,<br>&nbsp; &nbsp;否则它是不会消失的。<br><br>to 小雨哥:谢谢,菜单是动态生成的,这次可能与下次的个数与顺序可<br>&nbsp; &nbsp;能不同,另外此问题已经解决了,再次感谢你的热心回答,谢谢!
 
用户自然会在空白处去点击一下。<br>用 showwindow(菜单的handle,SW_hide)试试,应该可以。<br>不行的话,<br><br>如果你要用程序实现,可以用 mouse_event来模拟鼠标点击,但点在控件上就不好了。<br>刷新一下窗口呢。<br>
 
菜单由鼠标的Hook函数通知程序Popup<br>而且程序没有窗体,只有一个菜单<br><br>用ShowWindow好像可以,隐藏菜单<br>但是当弹出菜单后鼠标在空白处点击并没有被鼠标Hook捕捉到鼠标的单击动作<br>不知道为什么?还望大虾赐教。
 
在 Form 的 Onclick 中处理。
 
thx <br><br>&nbsp; no form 怎么办?
 
接收答案<br>
 
后退
顶部