設定時間になったらダイアログを最前列に表示させたいのですが・・
誰か助けて下さい。お願いします。
WINDOWS XP
VC6.0 SP5
MFC使用
どこまでできてんの?
1、ダイアログは表示できる?
2、表示非表示は制御できる?
3、『設定時間』を判別できる?
4、TopMost表示はできる?
全部できるなら組み合わせるだけ。
PAIさん 宜しくお願い致します。
1、表示されてます
2、表示非表示は出来ます。(が、表示させっぱなしです)
3、出来ます。
4、SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
こいつのことでしょうか?
これは、常に最前列ですよね?
別のダイアログの後ろになってる(非表示でなく)のが一番前に出てくる
(常に最前列でなく)ようにしたいんです。
ダイアログに時間(時計)が表示されてて、昼になると『昼飯だよ』って
教えてくれるようなイメージです。
何か説明が下手なんですがわかるでしょうか?
ん?じゃあ、その指定時間になったら、
SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
をするとか、
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
するとかで、できません?
PAIさんありがとうございます。
SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
は最前列に出てきますが、常に最前列っていうのを使いたくありません(じゃま)。
ちなみに出ては来ますがアクティブにはなりませんよね?
SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
はかくれたままです。
エクセルに隠れた状態でテストですが、
CWnd* pA = GetActiveWindow(); --> pA==NULL
SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
CWnd* pB = GetActiveWindow(); --> pB!=NULL
になるので何らかの動きはあるみたいです(Z順の先頭?)。
アクティブにしたいということでしょうか?
XPではないですが、下記が参考になると思います。
http://techtips.belution.com/ja/vc/0012/
saraさん ありがとうございます。
そうなんです。私の知りたかったのはこれなんです。
説明が下手なものでPAIさんにもsaraさんにもご迷惑かけました。
それで早速試してみましたが SPI_SETFOREGROUNDLOCKTIMEOUT
は現在サポートされていない?(ビルドでエラー)
MSDNで SystemParametersInfo をみてもない。
使っちゃ駄目ってことですかね?
winuser.h ファイルによると
WINVER >= 0x0500 であれば、SPI_SETFOREGROUNDLOCKTIMEOUT が使えます。
saraさん ありがとうございます。
XP(HomeEdition)は駄目みたいです。
XPなら大丈夫だと思うのですが。。。
stdafx.h の中で、ヘッダファイルをインクルードする前に
#define WINVER 0x0500
を記述してみてください。
saraさん ありがとうございました。
うまくいきました。感謝感謝です。
PAIさん ありがとうございました。
また質問すると思いますので宜しくお願いします。