菜单自画时如何将菜单边框改为平面

fj218 2004-06-20 11:43:18
我现在是在ONDrawItem事件中用了以下方法:
mWnd := WindowFromDC(ACanvas.Handle);
if mWnd <> form1.Handle then
begin
cTemp := TCanvas.Create();
cTemp.Handle := GetDC(0);
Windows.GetWindowRect(mWnd, rMenu);
cTemp.Brush.Color := RGB(120, 120, 120);
cTemp.FrameRect(rMenu);
InflateRect(rMenu, -1, -1);
cTemp.Brush.Color := RGB(240, 240, 240);
cTemp.FrameRect(rMenu);
InflateRect(rMenu, -1, -1);
cTemp.FrameRect(rMenu);
ReleaseDC(0, cTemp.Handle);
cTemp.Free();
end;
但是要鼠标指向菜单后,菜单才能改变为平面。请问该如何解决。
另问菜单弹出来以后,我该发送一个什么消息,使得鼠标还未选择菜单某一项,但第一个菜单总是缺省被选择了。
...全文
110 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
netcrawller 2004-07-15
UP,我也想知道
回复
fj218 2004-07-15
还是要靠自己。这个问题我已自己解决。只是不能解决在Win9X下显示边框阴影的问题。不过XPMENU也没有正确解决这个问题。
回复
fj218 2004-06-20
我不怕麻烦,就怕不会。之所以复杂,所以才提问。我查看了很多资料,对这个问题都没有涉及。我也看过XPMENU的源码,它是发送一个只定义的消息,但这里我看不懂。请高手耐心指教。
回复
alpha15 2004-06-20
up一下
回复
xzhifei 2004-06-20
要是有这么简单的话,D7的XP菜单就不会做成另一个控件了

要在菜单显示时得到菜单的HANDLE,然后得到它的区域,然后再在它上面把已经画好的边框上再画一次
总之很麻烦
回复
发动态
发帖子
非技术区
创建于2007-08-02

797

社区成员

Delphi 非技术区
申请成为版主
社区公告
暂无公告