掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
メインウィンドウのないアプリでメッセージを受取るには? (ID:55013)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
タスクトレイのアイコンは、オーナーウインドウに関連づけられていますから、表示されてなくてもメインウインドウが存在すると思います。 ダイアログを1つ作成して、WS_VISIBLE スタイルをはずし、次のようにすれば、そんな動きはしますが...。 #include <windows.h> #include "resource.h" // resource.h とは限らない。 BOOL CALLBACK DialogProc(HWND,UINT,WPARAM,LPARAM); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmd, int state) { HWND hDlg; MSG msg; NOTIFYICONDATAA nData; LPCTSTR Tip; Tip="左クリックで表示、右クリックで終了"; hDlg=CreateDialog(hInstance,MAKEINTRESOURCEA(IDD_DIALOG1),0,DialogProc); ZeroMemory(&nData,sizeof(NOTIFYICONDATAA)); nData.cbSize=sizeof(NOTIFYICONDATAA); nData.uID=1; nData.hWnd=hDlg; nData.hIcon=LoadIcon(0,IDI_APPLICATION); lstrcpy(nData.szTip,Tip); nData.uCallbackMessage=WM_USER+2; nData.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; Shell_NotifyIconA(NIM_ADD,&nData); while (GetMessage(&msg,0,0,0)) { if (!IsDialogMessage(hDlg,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } Shell_NotifyIconA(NIM_DELETE,&nData); return msg.wParam; } BOOL CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: ShowWindow(hDlg,0); break;; } return 1; case WM_DESTROY: PostQuitMessage(0); return 1; case WM_USER+2: switch (lParam) { case WM_LBUTTONUP: ShowWindow(hDlg,1); SetForegroundWindow(hDlg); break; case WM_RBUTTONUP: DestroyWindow(hDlg); break; } return 1; default: return 0; } } ただ、もっといい方法があるのかもしれません。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.