アクティブ・非アクティブの判別方法 – プログラミング – Home

アクティブ・非アクティブの判別方法
 
通知
すべてクリア

[解決済] アクティブ・非アクティブの判別方法


める
 める
(@める)
ゲスト
結合: 22年前
投稿: 62
Topic starter  

過去レスにもあったのですが、
上手くいかないので教えてください。

アプリケーションにフォーカスが移った(アクティブ)の場合と
フォーカスが外れた(インアクティブ)の場合を取得しようと
思い、PretransMessage()に以下の記述(抜粋)をしましたが、
取得出来ません。

case WM_ACTIVATE:
if (pMsg->wParam == WA_ACTIVE) {
// アクティブになった場合
a = 1;
}
if (pMsg->wParam == WA_INACTIVE){
// インアクティブになった場合
a = 1;
}

if文にブレーク張っているのですが、case文にすら来ていないようです。
何がいけないのでしょうか?宜しくお願いします。
VC6.0、MFCです。


引用未解決
トピックタグ
める
 める
(@める)
ゲスト
結合: 22年前
投稿: 62
Topic starter  

自己レスです。

書き忘れましたが、ダイアログベースで作ってます。
色々と情報探して、見つけたのがOnActivate()です。

ClassWizardのクラス情報のメッセージフィルタを
「ダイアログ」から「ウィンドウ」に変更すると、
メッセージマップの「メッセージ」にWM_ACTIVATEが
ありましたので、そこで取ることが出来ました。

void CxxxDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);
int a;
a = 1;
}

メッセージフィルタってなんのためにあるのでしょうか?
「ウィンドウ」に変更しなかったら、WM_ACTIVATEは取れないのでしょうか?
また、やっぱりPreTranslateMessage()では取れないものなのでしょうか?
宜しくお願い致します。


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

> メッセージフィルタってなんのためにあるのでしょうか?

メッセージはとても数が多いので、いつも全部表示されていると
目的のメッセージを探し出すのが困難になります。
フィルタを使うことで、そのとき気になっている系統の
メッセージだけに絞り込んで表示することができるので、
目的のメッセージを素早く見つけ出すことが可能になります。

例えば、「ダイアログ」の場合は、ダイアログプログラムで
よく使うメッセージだけが表示され、
たまにしか使わないメッセージは表示されません。

これは、ツールの機能なので、プログラムの動作には何の影響も与えません。

> また、やっぱりPreTranslateMessage()では取れないものなのでしょうか?

PreTranslateMessage() で取れるのは PostMessage で送られたメッセージだけです。
どれが Send され、どれが Post されるかは、
ヘルプでは、

The WM_ACTIVATE message is sent to...
The WM_CHAR message is posted to...

のようにさりげなく書き分けられています。


返信引用
める
 める
(@める)
ゲスト
結合: 22年前
投稿: 62
Topic starter  

dairygoodsさん。
いつも回答有難うございます。

>>また、やっぱりPreTranslateMessage()では取れないものなのでしょうか?
>PreTranslateMessage() で取れるのは PostMessage で送られたメッセージだけです。

そーだったんですね。納得しました。いままで知りませんでした。
ありがとうございました。解決です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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