0

タスクバーの上にトレイ メニューを表示するのに問題があります。y 位置として何を指定しても問題ありません。せいぜいタスクバーにぶつかるだけです。トレイ メニューはリソースです。

これは、systrayicon の右クリックに使用しているコードです。

// The message loop
case WM_RBUTTONUP:
{
    CPoint point;
    ::GetCursorPos(&point);

    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    HMENU hMenu = menu.GetSubMenu(0)->Detach();

    CMFCPopupMenu* pMenu = theApp.GetContextMenuManager()->ShowPopupMenu(hMenu, point.x-5, point.y, this, TRUE);
    pMenu->SetForegroundWindow();
    break;
}
4

1 に答える 1

0

確かに RecalcLayout は、ポップアップがモニターの作業領域内に表示されることを確認します (タスクバーを覆い隠しません。しかし、この動作をオーバーライドすることを妨げるものは何もありません。Windows のメニューと CMFCPopupMenu の違いは、メニューがによって作成されるウィンドウであることです。 OS と CMFCPopupMenu は、メニューの動作を模倣するフレーム ウィンドウです. あなたはほとんどそこにいましたが、SetForegroundWindow がウィンドウを移動せず、Z オーダーを変更するだけであるという事実を見逃しました. 私は個人的にそれを行う利点は見当たりません.しかし、私が言うように、達成することが不可能なことは何もありません。

    CMFCPopupMenu* pMFCMenu = pCntxtMgr->ShowPopupMenu(hMenu, ptClick.x, ptClick.y, AfxGetMainWnd());
    CRect rectMenu;
    pMFCMenu->GetWindowRect(rectMenu);

    pMFCMenu->SetWindowPos(&CWnd::wndTopMost, rectMenu.left, rectMenu.top + 25, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE);

25 は、デモ目的で使用した任意の数値です。メニューの下部が画面からはみ出さないように計算する必要があります。

于 2013-06-11T05:21:11.883 に答える