我现在是在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;
但是要鼠标指向菜单后,菜单才能改变为平面。请问该如何解决。
另问菜单弹出来以后,我该发送一个什么消息,使得鼠标还未选择菜单某一项,但第一个菜单总是缺省被选择了。

解决方案 »

  1.   

    要是有这么简单的话,D7的XP菜单就不会做成另一个控件了要在菜单显示时得到菜单的HANDLE,然后得到它的区域,然后再在它上面把已经画好的边框上再画一次
    总之很麻烦
      

  2.   

    我不怕麻烦,就怕不会。之所以复杂,所以才提问。我查看了很多资料,对这个问题都没有涉及。我也看过XPMENU的源码,它是发送一个只定义的消息,但这里我看不懂。请高手耐心指教。
      

  3.   

    还是要靠自己。这个问题我已自己解决。只是不能解决在Win9X下显示边框阴影的问题。不过XPMENU也没有正确解决这个问题。