タスクトレイのアイコン ダブルクリック – プログラミング – Home

タスクトレイのアイコン ダブルクリック
 
通知
すべてクリア

タスクトレイのアイコン ダブルクリック


みに
 みに
(@みに)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

VC++6.0で常駐プログラムを作成しております。
タスクトレイにアイコンを表示するところまでは
できました。
画面の最小化ボタンを押下したら画面が消え、
タスクトレイにあるアイコンをダブルクリック
したら表示される様にしたいです。

//最小化ボタンで画面を消す処理
void CChildDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフ
ォルトの処理を呼び出してください
ShowWindow(SW_HIDE);
//CDialog::OnSysCommand(nID, lParam);
}

最小化ボタンで画面を消す処理は上記の様にしたのですが、
これでよかったでしょうか?
後、アイコンをダブルクリックして元に戻したいのですが
それをどこにコーディングしたらよいのかが分からず悩んで
おります。

すいませんが、どうぞよろしくお願いします。


引用解決済
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ここを参考にされては?
Win32APIでのやり方ですが、参考にはなると思います。

第254章 タスクトレーに格納する
http://www.kumei.ne.jp/c_lang/sdk3/sdk_254.htm


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

OnSysCommand() がどういう時に呼び出されるのか
ということは調べましたか?


返信引用
みに
 みに
(@みに)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

>OnSysCommand() がどういう時に呼び出されるのか
>ということは調べましたか?

使い方が間違っているということですよね?
最小化した際に走るイベントだと思っていました。。。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

CWnd::OnSysCommandを調べてみれば、わかると思います。
HELPを引く癖をつけたほうが良いです。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

追加。

HELPのCWndクラスのメンバーを説明するページを上から下まで
一通り読んでみるとどんな物があるのかわかりますよ。
下の方にXXXXXメッセージ ハンドラと言うのが固まってますから
一通り読んでみるとよろしいかと。


返信引用
みに
 みに
(@みに)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

void CChildDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフ
ォルトの処理を呼び出してください
switch(nID){
case SC_MINIMIZE :
ShowWindow(SW_HIDE);
break;
}
CDialog::OnSysCommand(nID, lParam);
}
PATIOさん、こんな感じでよかったですか?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ちょっと疑問。

ShowWindow(SW_HIDE)している状況でデフォルトのCDialog::OnSysCommandを呼び出すべき
なのか?
デフォルトの処理を動かしたくないのであれば、呼び出すべきではないような気もします。
非表示状態のウインドウに対する最小化ってどう処理されるんだろう。


返信引用
みに
 みに
(@みに)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

void CChildDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフ
ォルトの処理を呼び出してください
switch(nID){
case SC_MINIMIZE :
ShowWindow(SW_HIDE);
break;
case SC_CLOSE:
PostMessage(WM_CLOSE);
break;
}
//CDialog::OnSysCommand(nID, lParam);
}

そうですねー。すいません。
あの後、動かしてみて修正しました。
今は上の様になっております。

今はコード変換ってどうやるのだろう。。。と悩んでおります。
PATIOさんの様にできるようになりたいものです・・・。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

今度は、「最小化」と「閉じる」以外は何も起こらないコードになってますが、
大丈夫でしょうか?

あとヘルプに、

| In WM_SYSCOMMAND messages, the four low-order bits of the nID parameter
| are used internally by Windows. When an application tests the value of
| nID, it must combine the value 0xFFF0 with the nID value by using the
| bitwise-AND operator to obtain the correct result.

とある通り、(nID&0xFFF0) と比較しなければなりません。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

基本的に自分が処理しない部分はデフォルトの実装であるCDialog::OnSysCommandを呼ぶ
のが定石だと思います。
独自の操作をしてなおかつ、デフォルトの操作を通したくない場合はCDialog::
OnSysCommandを呼びません。
呼ぶべきか、呼ぶべきでないかは自分がやりたい処理に依存します。
独自の操作+デフォルトの動作が必要な場合は、操作を行った上でCDialog::
OnSysCommandの呼び出しも行う必要があると思います。
厳密にはデフォルトの動作がどういう処理を行っているのかまで把握していないときちん
とした判断は難しいと思いますよ。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました