0

MFC ダイアログ アプリケーションを作成しました。

メッセージループを使いたいのですが、見つかりません。mfc が作成してくれますが、非表示になると読みました。どうすればメッセージループを操作できますか?

そのアプリケーション用に作成したトレイ アイコンからイベントを受信するには、メッセージ ループが必要です。

私はそのようなものを使用できるように:

long CALLBACK WndProc(HWND hWnd, UINT nMsg, UINT wParam, LONG lParam) 
{ 
   switch(nMsg) 
   { 
   case (WM_USER + 1): 
      { 
         switch(lParam) 
         { 
         case WM_RBUTTONUP: 
            { 
               /**/
            } 
         } 
         return 0; 
      } 

   default: 
      return DefWindowProc(hWnd, nMsg, wParam, lParam); 
   } 
}

私はまだmfcの初心者です。

4

1 に答える 1

2

Shell_NotifyIcon によってシステム トレイにアイコンをインストールすると、このアイコンがダイアログ UI の拡張になります。ユーザーがこのアイコンを操作すると、UI メッセージは OS によって自動的にダイアログにリダイレクトされます。

これらのユーザー メッセージを提供するには、いくつかの手順を実行する必要があります。

(1) (.cpp) ファイル内にメッセージ ハンドラー定義 (ON_MESSAGE(WM_TRAY_NOTIFY, OnTrayNotify)) を追加します。BEGIN_MESSAGE_MAP/END_MESSAGE_MAP ブロック内にある必要があります:

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
   //{{AFX_MSG_MAP(CTestDlg)
   ON_WM_PAINT()
   ON_WM_QUERYDRAGICON()
   ...
   //}}AFX_MSG_MAP
   ON_MESSAGE(WM_TRAY_NOTIFY, OnTrayNotify)
END_MESSAGE_MAP()

(2) 実際の作業を実行するために、(.cpp) ファイルにメッセージ ハンドラーの実装を追加します。

void CTestDlg::OnTrayNotify(UINT nID, LPARAM lEvent)
{
    if (nID==TRAYICON_ID1)
    {   
        // handle messages here
        if (lEvent==WM_LBUTTONDBLCLK)
        {  // do left button double click, usually restore application
        }
        if (lEvent==WM_RBUTTONUP)
        {  // do right button up, usually popup a menu at clicked location
        }
    }
}

(3) このメッセージ ハンドラのプロトタイプ定義 (afx_msg void OnTrayNotify(UINT nID, LPARAM lEvent);) を (.h) ファイル内に追加します。BEGIN_MESSAGE_MAP/END_MESSAGE_MAP ブロック内にある必要があります:

// Generated message map functions
//{{AFX_MSG(CTestDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
...
//}}AFX_MSG
afx_msg void OnTrayNotify(UINT nID, LPARAM lEvent);
DECLARE_MESSAGE_MAP()

(4) (.h)ファイル内に定義を追加

#define WM_TRAY_NOTIFY WM_USER+567
#define TRAYICON_ID1 0x1234

上記のコードは、次のことを前提としています。

  • ダイアログ名は CTestDlg です。ダイアログ名に変更してください
  • Shell_NotifyIcon のセットアップに使用されるユーザー コールバック メッセージ識別子 (uCallbackMessage) は、WM_TRAY_NOTIFY です。
  • Shell_NotifyIcon をセットアップするために使用されるトレイ アイコン (uID) の識別子は TRAYICON_ID1 です。
于 2013-01-17T21:30:32.237 に答える