2

システムトレイにアプリケーションのポップアップメニューがあります。私が抱えている問題は、アイテムを選択しないとメニューが消えないことです。

ウィンドウの他の場所をクリックしたときにポップアップメニューが消えるようにするにはどうすればよいですか?

ポップアップメニューを表示するためのコードは次のとおりです。

LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    if( message == WM_MYMESSAGE && lParam == WM_RBUTTONDOWN)
    {
        m_menu.CreatePopupMenu();        
        POINT point;

        GetCursorPos(&point);
        m_menu.AppendMenu(MF_POPUP, WM_MAXIMIZE, _T("Maximize"));
        m_menu.AppendMenu(MF_POPUP, WM_EXIT, _T("Exit"));
        m_menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);

    }
    return CDialog::WindowProc(message, wParam, lParam);
}

CMenu::DestroyMenu運が悪かったので使ってみました。

4

2 に答える 2

4

私にとってうまくいった解決策は、 を呼び出すSetForegroundWindow();前に関数を呼び出すことTrackPopupMenuでした。

機能説明の備考に解決策が見つかりました。TrackPopupMenu

于 2012-11-02T21:02:58.543 に答える
0

TPM_RETURNCMDフラグを追加します。このフラグを使用すると、メニュー項目が選択された場合、またはユーザーが外側をクリックした場合に、TrackPopupMenu関数が返されます。

CMenu menu;
CMenu *pSub = NULL;

// popup a menu to get the number of pages to display
VERIFY(menu.LoadMenu(IDR_MY_MENU));
pSub = menu.GetSubMenu(0);

int command = pSub->TrackPopupMenu(
        TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, 
        point.x, 
        point.y, 
        this);

これは私のために働いています。

于 2012-11-02T18:06:26.563 に答える