いつもお世話になっています。Legolasです。
[環境]Windows2000,VC6.0(SDK)
ダイアログベースでプログラムを作っているのですが、
最小化ボタンを押下したときに、ShowWindow(hwnd, SW_HIDE);
で画面を消去して、Shell_NotifyIconでタスクトレイにセット
しているアイコンを左クリックすると、また画面が表示される。
という基本的?な動作を実現しようとしているのですが、
最小化ボタンを押したときに、タスクバー上にウィンドウ
のタイトルが残ってしまいます。これは、最小化ボタンではなくて、
なんらかのボタン(WM_COMMANDで処理する)で、
ShowWindow(hwnd, SW_HIDE);
すると、何故か上手く消えます。
最小化ボタンを押したときに、上手く
ShowWindow(hwnd, SW_HIDE);
で画面もタスクバー上のウィンドウも消去したいのですが、
上手くいきません。どなたかご存知のかたいらっしゃいましたら
お知恵をお貸し下さい。よろしくお願いします m(__)m
↓最小化ボタンを押した時の処理
void Cls_OnSysCommand(HWND hwnd, UINT cmd, int x, int y)
{
switch(cmd){
case SC_MINIMIZE:
ShowWindow(hwnd, SW_HIDE);
break;
}
return;
}
OnSize(WM_SIZE)でSIZE_MINIMIZEDをひっかければ良いかと思われます。
てつやさん、レスありがとうございます。
WM_SIZEメッセージで、SIZE_MINIMIZEDを
ひっかけてやる方法はすでに試していたのですが、
確かにこれならタイトルもタスクバーから消える
のを確認しています。
(この質問に関しての返答としては正しいですよね)
ここまでに至った原因の一つとして、このWM_SIZEで
引っ掛けたときに、左クリックでウィンドウを元通り
表示させてやろうとしたところで、上手く今度は
表示が出来なかったんです。。
で、何らかのボタンを押して最小化してから、
もう一度左クリックを押すとちゃんと戻っていたので、
最小化のほうで何か他の実装手段を考えないと。。
と思って、WM_SIZEで引っ掛ける方法を断念しました。
実は私の考え方が間違っているのかもしれませんが。。
ちなみにその左クリックイベントはこのように
実装しています。
↓↓
case SYWM_NOTIFYICON:
switch(lParam){
case WM_LBUTTONDOWN:
ShowWindow(hwnd, SW_SHOW);
break;
case WM_LBUTTONDBLCLK:
ShowWindow(hwnd, SW_SHOW);
break;
}
break;
}
自己レスです。
最小化→MINIMIZED
非表示→HIDE
ということをよくよく考えたら、
表示→SHOW
元に戻す→RESTORE
すればいけるのかな?
と思ってやってみたらいけました。(汗)
とりあえず現段階では解決しました。。
てつやさんありがとうございます。
ただ作っていて思ったんですが、このタスクトレイへの
格納方法って、スタンダードなんでしょうか。。
タスクトレイにアイコンを作っているのなら、
タスクトレイのアイコン以外は、タスクバーには
(ウィンドウのタイトルとか)表示されないのが
普通なのかな?と思ったりしたんですが、そんな
方法はまだ勉強していないので出来るのか出来ないのか
わかりませんが、どうなんでしょう??
タスクトレイに登録するようなツールは、普通は
タスクバーにウィンドウタイトルなども表示されない
ように作っているんでしょうか?
質問内容変わってますが。。
イマイチ状況がつかめない。
ウィンドウを表示しているにもかかわらずタスクトレイにアイコンが表示されている。
これは、一般的ではないような気がするとかそんな話ですかね。
そんなのはあなたのアプリの仕様かと思われます。
とりあえず、OnSize(WM_SIZE)でSIZE_MINIMIZEDが来た時に、
タスクトレイにアイコンを登録して、ShowWindow(SW_HIDE)
タスクトレイで左クリックされた時にタスクトレイのアイコンを削除して、自分はShowWindow
(SW_SHOWNORMAL)する。
とかそんなんでいいんじゃないんですか?