ウインドウを最小化しようとしたとき、
WM_SYSCOMMANDのSC_MINIMIZEが送られますが
最小化のアニメーションが完了したタイミング
で処理を行いたいのですが可能でしょうか?
可能だとするとどのような方法をとるのはよいかも
宜しくお願いします。

A 回答 (3件)

>そこまでシビアなところでしたら、


>SetWindowsHookExでWH_CALLWNDPROCRETかな?

よく考えるとそこまではいらないか。
DefWindowProc()にわたしてるんですよね?
WM_SYSCOMMAND。

ってことは、DefWindowProc()が制御を戻した後にチェックすればいいかと。
    • good
    • 0
この回答へのお礼

おっしゃるとおりでした。
LRESULT ret = DefWindowProc( hWnd , msg , wp , lp );
の後に処理を加えただけで、できました。
有難うございました。

お礼日時:2005/04/21 15:56

そこまでシビアなところでしたら、


SetWindowsHookExでWH_CALLWNDPROCRETかな?

http://www.microsoft.com/japan/msdn/library/defa …
    • good
    • 0
この回答へのお礼

処理後のメッセージのみの受け取りもできるんですね。
参考になりました。

お礼日時:2005/04/21 15:54

WM_ACTIVATEかな?


VisualStudioならSpy++でみてればすぐわかるかと。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
WM_ACTIVATEだと(WM_ACTIVATEAPPも)アニメーションが終了する前
に受け取ってしまいます。

アニメーションが終了するタイミングですが
spy++でみるとWM_SYSCOMMANDのSC_MINIMIZE
P(ポスト)→S(送出)→R(送出したメッセージの戻り値)を最後にアニメーションが終了します。

WM_SYSCOMMANDのR(送出したメッセージの戻り値)のタイミングを検出すれば
いいのかと思うのですが、その方法がわかりません。

お礼日時:2005/04/21 13:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qプロアクティブの意味、例

仕事をする上で「プロアクティブに」、というのはどんな意味でしょう。

辞書レベルの意味はわかります。

仕事をする上で具体的にこんなのがプロアクティブな仕事、という例があれば教えてください

Aベストアンサー

http://www.amazon.co.jp/%E3%80%8C%E5%85%88%E8%AA%AD%E3%81%BF%E5%8A%9B%E3%80%8D%E3%81%A7%E4%BA%BA%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99-~%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%97%E3%83%AD%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%83%BB%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88~-%E6%9D%91%E4%B8%AD-%E5%89%9B%E5%BF%97/dp/4534043708

上のサイトの本が役に立ちそうです。
抜粋すると、
「先読み力」で無理・ムダなく推測し、「プロアクティブ」に行動すれば、常識はずれの残業時間、不要なトラブルに巻き込まれなくなり・・・・

http://www.amazon.co.jp/%E3%80%8C%E5%85%88%E8%AA%AD%E3%81%BF%E5%8A%9B%E3%80%8D%E3%81%A7%E4%BA%BA%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99-~%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%97%E3%83%AD%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%83%BB%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88~-%E6%9D%91%E4%B8%AD-%E5%89%9B%E5%BF%97/dp/4534043708

上のサイトの本が役に立ちそうです。
抜粋すると、
「先読み力」で無理・ムダなく推測し、「...続きを読む

QWM_PAINTとWM_MOVEで同じ事をしたいけど

VC.NETにて、
ウィンドウプロシージャでWM_PAINTとWM_MOVEを拾って、テキストを書き直す関数に飛ばしているのですが、WM_MOVEでは書き直してくれません。
書き直し関数はウインドウの座標の絶対と相対をGetClientRectとGetWindowRectで得て表示をするだけです。
WM_MOVEでも関数に飛んで、座標を得てはいるようですが、表示しなおしてくれません。
ウインドウの大きさを変えると表示し直してくれます。
何故でしょうか?

Aベストアンサー

>hdc = BeginPaint(hWnd, &paint);
と、
>EndPaint(hWnd, &paint);

これはWM_PAINTの中でしか使用できません。

WM_MOVEで描画を行うのでしたらGetDC()、ReleaseDC()を使用してください。

Qアクティブの意味教えてください。

アクティブの意味教えてください。

Aベストアンサー

「活動的な」「活発な」形容詞。

QWM_SIZEとWM_SIZINGの違い (Win32API)

Windowsプログラミングで、画面のサイズを変更したときに送られてくるメッセージで、
WM_SIZEで処理するのとWM_SIZINGで処理するのとでは何が違うのでしょうか?
WM_SIZEとWM_SIZINGの違いは何なのでしょうか?

また、似たようなものでWM_MOVEとWM_MOVINGの違いも教えてもらいたいです。

Aベストアンサー

実際にプログラムを書いてみれば、両者の違いは明白になるでしょう。

WM_SIZE は「サイズの変更後に」メッセージがアプリケーションに飛んでくるので、
ウィンドウのコーナーからマウスを離した時に文字がビョンと移動します。

Windows98 くらいまではウィンドウのサイズの変更はまずは輪郭だけサイズが変って
マウスをコーナーから離した時にウィンドウの中身が再描画されていたので、
WM_SIZE のメッセージハンドラを実装することになったでしょう。

しかし最近のインターフェイスはサイズ変更中もズリズリとウィンドウの中身が
再描画され続けます。これには WM_SIZING のメッセージハンドラを実装して、
サイズ変更中常に文字列の再描画を繰り返す必要があるでしょう。

Qプッシュアウトとアクティブの意味。

またまたゴルフで申し訳ありません。プッシュアウトというゴルフボールの球筋がありますが、右に出て正面に帰って来ず、行きっぱなしのボールのことですが、俗にスライスはボールを捉えきれて無く、飛距離が出ないと言われますが、プッシュアウトはスライスとは違い、方向性は今一つですが、ボールは捉えているので、飛距離はフックボールと変わらないのでしょうか?やはり若干とは言え、フックボールのほうが飛距離は出るのでしょうか?またタイガーウッズは昔、かなりのフックグリップでしたが、(左手をフックに握る事により、より[アクティブ]になると言ってますが、このアクティブとはどのような意味でしょうか?かなりフックに握った結果がプッシュアウトでした。

Aベストアンサー

こんにちは。

振り遅れた(フェースターンが遅れた)プッシュではなく、いつもより軌道がインサイドから入ってきて結果的に右方向へストレートに飛び出したボールの飛距離はナイスショットと遜色ありません。

私は先輩ゴルファーに絶対に左に行かせたくないときにそのような打ち方をする事を勧められ実践しています。アウトサイドインのカット軌道で打ってもいいのですが、実際コースでは左に振りぬくよりも安全なサイドにヘッドを抜いていくほうが遥かに気が楽です。びくびくしながらカットに打って体が止まった場合には「真っ直ぐ左」なんてこともありますから。

カット打ちが得意な人は人いいでしょうが、ボールを少し体の中に入れて外に振り出す打ち方はよく飛んで、左も怖くなくなります。パーシモンで糸巻きボールでは大フックになったかもしれませんが、今の道具では、ミスしてもフェアウエーの左サイドに行くくらいで、とても便利な打ち方だと感じて、自分自身は多用しています。なにより、カット打ちよりはるかに飛びますし。

プッシュとフックの飛距離の差ですか?難しいですね。
1~2yの曲がり幅のドローが一番飛ぶと感じますが、諸条件にもよりますがフックで5y以上曲がったらプッシュの方が飛ぶんじゃないでしょうか。


最近の道具はフェードでもドローと遜色ないくらい飛びますし、日本で1.2の飛ばし屋・額賀プロも持ち球はストレートから若干フェード気味です。

こんにちは。

振り遅れた(フェースターンが遅れた)プッシュではなく、いつもより軌道がインサイドから入ってきて結果的に右方向へストレートに飛び出したボールの飛距離はナイスショットと遜色ありません。

私は先輩ゴルファーに絶対に左に行かせたくないときにそのような打ち方をする事を勧められ実践しています。アウトサイドインのカット軌道で打ってもいいのですが、実際コースでは左に振りぬくよりも安全なサイドにヘッドを抜いていくほうが遥かに気が楽です。びくびくしながらカットに打って体が止まっ...続きを読む

QなぜhButton1ボタンからのWM_COMMANDはフックできてクライアントエリアのWM_RBUTTONDOWNはフックできないのでしょうか?

#define STRLBUTTON TEXT("マウス左ボタンが押されました from mainProc")
#define STRRBUTTON TEXT("マウス右ボタンが押されました from my_HookProc")
#define STRCOMMAND TEXT("ボタンが押されました")


HWND hButton1;



LRESULT CALLBACK my_HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPRETSTRUCT *pcwpRetStruct = (CWPRETSTRUCT *)lParam;
HDC hDC;

if(nCode==HC_ACTION)
{
hDC = GetDC(pcwpRetStruct->hwnd);
switch(pcwpRetStruct->message)
{
case WM_COMMAND:
TextOut(hDC, 10, 10, STRCOMMAND, strlen(STRCOMMAND));
break;
case WM_RBUTTONDOWN:
TextOut(hDC, 10, 10, STRRBUTTON, strlen(STRRBUTTON));
break;
}

ReleaseDC(pcwpRetStruct->hwnd, hDC);
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}



LRESULT CALLBACK mainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HHOOK hHook;
HDC hDC;

switch(uMsg)
{
case WM_DESTROY:
UnhookWindowsHookEx(hHook);
PostQuitMessage(0);
return 0;

case WM_CREATE:
hHook = SetWindowsHookEx(WH_CALLWNDPROCRET, my_HookProc, NULL, GetCurrentThreadId() );
if(!hHook)
MessageBox(NULL, "hooking failed", NULL, MB_OK);

hButton1 = CreateWindow(
"BUTTON", "hButton1",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 40, 100, 20,
hWnd, NULL,
((LPCREATESTRUCT)lParam)->hInstance, NULL
);
return 0;

case WM_LBUTTONDOWN:
hDC = GetDC(hWnd);
TextOut(hDC, 10, 10, STRLBUTTON, strlen(STRLBUTTON));
ReleaseDC(hWnd, hDC);
return 0;
}

return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

#define STRLBUTTON TEXT("マウス左ボタンが押されました from mainProc")
#define STRRBUTTON TEXT("マウス右ボタンが押されました from my_HookProc")
#define STRCOMMAND TEXT("ボタンが押されました")


HWND hButton1;



LRESULT CALLBACK my_HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPRETSTRUCT *pcwpRetStruct = (CWPRETSTRUCT *)lParam;
HDC hDC;

if(nCode==HC_ACTION)
{
hDC = GetDC(pcwpRetStruct->hwnd);
switch(pcwpRetStruct->message)
{
case WM_COMMAND:
Tex...続きを読む

Aベストアンサー

WH_CALLWNDPROCRETはSendMessageで送られたメッセージのみを対象とし、WM_xBUTTONDOWNはPostMessageで送られるからです。WH_GETMESSAGEならばWM_xBUTTONDOWNをフックすることができます。

Qアクティブとアグレッシブのニュアンスの違いは?

アクティブとアグレッシブ、どちらも「活動的な」という意味で使われますが、この二つはどのように使い分けたらいいのでしょうか。

私的に、
アクティブは、行動を伴ったもの・とにかく動き回るイメージで、
アグレッシブは、なんというか・・・いろいろ考えたり計画を立てたりと、
単に行動に移すだけじゃなくてもっと深くて貪欲なイメージなんですけど・・・

伝わりづらくてすみません・・・

質問としては、
タイトルのとおり
アクティブとアグレッシブのニュアンスの違いを教えてください
というものです。
よろしくお願いします。

Aベストアンサー

こんにちは。
nnYnnさんのつかんでるニュアンスで、ほぼあっている気がします。

職場で英語を使う関係で私がもっているニュアンス的には、
「アクティブ」は「インドア」の対義語の様な感じで、
やはりいろいろ動きまわって行動する的に使います。
それに対し、「アグレッシブ」は対象物が1つかそれ以上で、
対象物に対して(意図的に)PUSHしていく感じかなと思います。

範囲の広さでいうと「アクティブ」の方が広いですし、
追求心の深さでいうと「アグレッシブ」の方が深いと思います。

私のニュアンス説明がわかりずらかったら、ごめんなさい

QWM_CHAR or WM_KEYDOWN の「wParam」について

よくわかっていないのですが、

switch (message)
{
case WM_CHAR:
というところで、wParamから、文字の情報取得して、
HDC宣言して、TextOut関数使用…、の途中で、
wParamの文字情報は、どのようにすれば
TextOut関数に渡せるのでしょうか?
Visual C++を勉強したてで、勉強の成果をと思い、
テキストエディタを作ってみたいと思ったのですが、
さて、どうしたらよいのでしょうか?
エラー内容は、unsigned int → const char *
にできません、ということなのですが、
じゃぁ、型の変換の仕方は?という感じです。
初心者なので、簡単な例をつけて説明してくださると助かります。よろしくお願いします。

Aベストアンサー

TextOut(~, (char*)wParam, ~);

と、char*型に型変換すると良い気がします。

--
TextOut関数の宣言、

TextOut(~, (const char*)szText, ~);

のconstキーワードは、
「TextOut関数に渡したwParamの値をTextOut関数の内部で書き換えることはありませんので安心してね。」
という意味ですので、

unsigned int
long double

などの2つの単語で宣言される「型」とは意味合いが異なります。
ヘルプの説明ですと釈然としませんが、参考URLなどを読んでみてください。

プログラマの正体!? - 誰が為にconst
http://www.asahi-net.or.jp/~vx2t-andu/lets/20020203.html

参考URL:http://www.asahi-net.or.jp/~vx2t-andu/lets/20020203.html

Qセルとアクティブセルの違い

技術の質問です。
セルとアクティブセルの違いって、
アクティブセルはリボンされている?というような解釈で
あってますでょうか…。
逆にセルはただのマスで、リボンされていない状態
という意味でしょうか?
あまり専門的な知識は必要ないので、
小学生にでもわかるくらいの簡単の説明でお願いします(-。-;
すいません
追記:カテゴリがよくわからず、間違っていたらすみません

Aベストアンサー

フォーカスがあたっているかどうかです。

つまり、カーソルが当たっていて、編集可能な状態にあるのがアクティブセル。
そうじゃないのはセルです。

QWinAPIにてWM_SIZE以外の方法で最大化を検出したい

環境:WinXP, VS2005
WinAPIでウィンドウプロシージャのWM_SIZEメッセージを使えば
最大化状態などウィンドウの状態を調べることができますが、
プロシージャを直接使わないでするような方法はあるのでしょうか?

Aベストアンサー

★アドバイス
・状態を取得するには IsZoomed()、IsIconic() 関数を利用します。
 これを利用すると『最大化』『最小化』『普通の状態』を区別できます。

if ( IsZoomed(hWnd) ){
   :
 最大化状態
   :
}
else if ( IsIconic(hWnd) ){
   :
 最小化状態
   :
}
else{
   :
 普通の状態
   :
}

その他 ShowWindow() 関数などがあるので状態を変更したいときに使います。

// 最大化
ShowWindow( hWnd, SW_MAXIMIZE );

// 最小化
ShowWindow( hWnd, SW_MINIMIZE );

// 元に戻す
ShowWindow( hWnd, SW_RESTORE );

// 最小化する
CloseWindow( hWnd );

// 最小化から元に戻す
OpenIcon( hWnd );

等があります。


人気Q&Aランキング

おすすめ情報