2010年1月3日 星期日

CuMenu - An encapsulation of the Windows HMENU.

// An encapsulation of the Windows HMENU. 

CuMenu MenuTray.LoadMenu(IDR_MENU_MYMENU);
CuMenu *pTrackMenu = MenuTray.GetSubMenu(0);
pTrackMenu->TrackPopupMenu(TPM_BOTTOMALIGN, pt.x, pt.y, this->GetSafeHwnd() );  
MenuTray.DestroyMenu();



// CuMenu.h

class CuMenu
{
    HMENU m_hMenu;
public:
    CuMenu(void);
    ~CuMenu(void);

    BOOL DestroyMenu();
    BOOL LoadMenu( UINT nIDResource );
    CuMenu* GetSubMenu( int nPos ) const;

    BOOL Attach( HMENU hMenu );
    BOOL TrackPopupMenu(
        UINT nFlags,
        int x,
        int y,
        HWND hWnd,
        LPCRECT lpRect = 0
        );

};



// CuMenu.cpp


CuMenu::CuMenu(void)
:m_hMenu(NULL)
{
}

CuMenu::~CuMenu(void)
{
    DestroyMenu();
}

BOOL CuMenu::LoadMenu( UINT nIDResource )
{
    m_hMenu = ::LoadMenu(::GetModuleHandle(NULL), MAKEINTRESOURCE(nIDResource));
    return ( m_hMenu != NULL );
}

CuMenu* CuMenu::GetSubMenu( int nPos ) const
{
    HMENU hMenu = ::GetSubMenu( m_hMenu, nPos );

    static CuMenu SubMenu;
    SubMenu.Attach(hMenu);
    return &SubMenu;
}

BOOL CuMenu::Attach( HMENU hMenu )
{
    m_hMenu = hMenu;
    return ( m_hMenu != NULL );
}

BOOL CuMenu::TrackPopupMenu(
                    UINT nFlags,
                    int x,
                    int y,
                    HWND hWnd,
                    LPCRECT lpRect /*= 0*/
                    )
{
    return ::TrackPopupMenu(m_hMenu, nFlags, x, y, 0, hWnd, lpRect);
}

BOOL CuMenu::DestroyMenu()
{
    return ::DestroyMenu(m_hMenu);
}


3 則留言:

  1. 很明顯的並沒有實作所有的功能, 只將現在需要的功能先實作出來, 其他的等要用到在加, 花個五分鐘包一下, 好用又不太花時間.

    回覆刪除
  2. 請教一下,
    要如何讓程式碼po出來的時候,有顏色跟格式?

    預設的編輯模式,似乎沒有這些功能..

    回覆刪除
  3. http://alexgorbatchev.com/wiki/SyntaxHighlighter 好用的程式碼顯示器 , 我是用這個, 那怎麼掛到Blogger 其實很容易,但是用打的很麻煩, 有空過來直接講五分鐘就行了!

    回覆刪除