我到一个例子看到他用的是
m_WndOldProc=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)BeginSubClassMenu);
//hwnd是菜单的句柄
BeginSubClassMenu//是处理函数。
可该函数总运行失败,是不是用错地方了。如果用错了该用在什么地方?

解决方案 »

  1.   

    用一个窗口来模拟菜单.自画窗口就可以了.我写了一个类,只是右键弹出菜单,而且只支持一层[email protected]
      

  2.   

    http://www.codeproject.com/
    上面有一个NewMenu的东西,非常不错
      

  3.   

    Forever兄弟的这种方法不行呀。因为我要支持N层的菜单。
      

  4.   

    1还没看到支持2层的,呵呵,看看API吧
      

  5.   

    Forever兄弟的这种方法不行呀。因为我要支持N层的菜单。
    _________________
    :) 我说不支持多层菜单,并不是技术上无法达到。是我没时间 :)
      

  6.   

    金山词霸最新的菜单就是用窗口模拟的
    当然,在原有的菜单上也可以实现去掉边框的原理大约是这样的:
    用Setwindowshookex得到菜单窗口生成的消息,并对这个窗口进行子类化
    接下来可以用去掉边框的风格或者在WM_NCCALCSIZE中设置非客户区的大小。VB版有一贴子专门讨论了XP风格菜单的
    你可以去找找。。
      

  7.   

    XP风格菜单http://www.codeproject.com/menu/menuxp2.asp
      

  8.   

    如果不要边框的话需要用Hook技术获取windows重画窗口的消息,然后自己再画上去
      

  9.   

    http://www.codeproject.com/menu/trans_menu.aspsdk写的,很直观明了.