最小化ボタンをクリックしたときに、
ウィンドウを隠すところまではうまくいきました。
しかし、通知領域のアイコンをダブルクリックして
ウィンドウを表示させようとしてもうまくいきません。
どうすればよいのでしょうか?
[ここをクリックすると内容が表示されます]
AB Ver.: 5.00.00 (CP3)コード: 全て選択
Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (dwMessage As Long,ByRef lpdata As NOTIFYICONDATA) As Long
Type NOTIFYICONDATA
cbSize As DWord
hWnd As DWord
uID As DWord
uFlags As DWord
uCallbackMessage As DWord
hIcon As DWord
szTip[127] As Byte
dwState As DWord
dwStateMask As DWord
szInfo[255] As Byte
dummy As DWord
szInfoTitle[63] As Byte
dwInfoFlags As DWord
End Type
Type TPMPARAMS
cbSize As Long
rcExclude As RECT
End Type
Const MSG_TRAYICON = &H1000
Const NIM_ADD = &H0
Const NIM_MODIFY = &H1
Const NIM_DELETE = &H2
Const NIIF_NONE = &H0
Const NIIF_INFO = &H1
Const NIIF_WARNING = &H2
Const NIIF_ERROR = &H3
Const NIF_ICON = &H2
Const NIF_MESSAGE = &H1
Const NIF_TIP = &H4
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Dim si As NOTIFYICONDATA
Dim Msg As Long
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
Select Case dwMsg
Case WM_CREATE
' 通知領域のアイコンを丈夫にする
Msg=RegisterWindowMessage("TaskbarCreated")
Case SW_MINIMIZE
' ここでウィンドウを隠す
ShowWindow(hWnd,SW_HIDE)
Case MSG_TRAYICON
Select Case lParam
Case WM_LBUTTONDBLCLK
' ここでウィンドウを表示させたい
' ShowWindow(hWnd,SW_SHOWNORMAL) をしてもダメだった
End Select
Case Msg
Shell_NotifyIcon(NIM_ADD,si)
Case WM_DESTROY
' 通知領域のアイコンを消す
Shell_NotifyIcon(NIM_DELETE,si)
End Select
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
FillMemory(VarPtr(si),Len(si),0)
With si
.cbSize=Len(si)
.hWnd=hMainWnd
.uID=1
.uFlags=NIF_ICON or NIF_MESSAGE or NIF_TIP
.uCallbackMessage=MSG_TRAYICON
.hIcon=LoadIcon(CreateStruct.hInstance,101)
End With
Shell_NotifyIcon(NIM_ADD,si)
End Sub