こんにちわ。E46-M3です。

さっそくですが、
デスクトップ上にあるウインドウを最小化させる
プログラムを作っているのですが、
肝心の最小化させる関数(API)がわかりません。

"最小化ボタン"を無効にする方法は、
よく見かけるのですが
ウインドウを最小化する方法はなかなか
発見できなくて・・・

どなたかご存知な方いらっしゃいませんか??
知っている方がいらっしゃいましたら
教えてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

ウィンドウを最小化するには、ShowWindow() またはCloseWindow() を使います。


CloseWindow()は名前をみるとウィンドウを閉じてしまうような感じがしますが、
最小化するだけです(^_^;
使い方はこんな感じ↓です。
ShowWindow(hWnd, SW_MINIMIZE);
CloseWindow(hWnd);

最小化時にタスクトレイに入るようなアプリの中には上記APIでは
アイコン状態で最小化してしまう(MDIの子ウィンドウを最小化した感じ)ものが
あるので、その場合はSendMessage()で直接メッセージを送れば良いでしょう。
SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);

各APIの詳細はMSDN等を参照してください。
    • good
    • 0
この回答へのお礼

お返事送れました!ごめんなさい。
ずばりこれでしたね!
膨大なAPIから目的の物を見つけるのは難しいですね。
ありがとうございました!!

お礼日時:2001/07/30 10:03

このQ&Aに関連する人気のQ&A

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

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

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

Qチワワは犬ではない?

お世話になります。

チワワは本当は犬ではないと言う噂があるのですが、本当でしょか?
他の犬との交配も出来(遺伝的に別種であれば不可能の筈)、世界最小の犬であると公認されていますので私は間違いなく犬だと思ってますが、一部に遺伝学的には犬ではないと言う様な噂があるのだそうです。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=872217

実のところどうなんでしょうか?
このカテゴリでは識者の方も沢山いらっしゃると思いますので何かご存知の方がいらっしゃいましたら宜しくお願いします。
またこの話の元をご存知の方も宜しくお願いします。

Aベストアンサー

こんばんは。

チワワは間違いなく犬です。あきらかに遊びの記事を真に受けた人がいた、と言うのが真相のようです。

http://x51.org/x/04/05/2658.php

参考URL:http://x51.org/x/04/05/2658.php

Qウインドウを最小化したとき

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

Aベストアンサー

>そこまでシビアなところでしたら、
>SetWindowsHookExでWH_CALLWNDPROCRETかな?

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

ってことは、DefWindowProc()が制御を戻した後にチェックすればいいかと。

Qc言語 正負の値それぞれでの最大値最小値

大学の研究で使うデータ処理で困っています。
Microsoft Visual C++ 2008 Express Editionを使っています。

例えば、10個の値が縦一列に入ったtxtファイルがいくつかあったとして
-5,-3,-2,0,3,4,5,6,7,8,
だった場合には
プラス側の最大値・最小値をそれぞれ求め(この場合、最大は8、最小は3)
マイナス側の最大値・最小値をそれぞれ求め(この場合、最大は-2、最小は-5)
結果として表示される

0,1,2,3,4,5,6,7,8,9,
だった場合には
プラス側の最大値・最小値をそれぞれ求め(この場合、最大は9、最小は1)
マイナス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません)
結果として表示される

0,0,0,0,0,0,0,0,0,0
だった場合には
プラス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません)
マイナス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません)
結果として表示される


といったプログラムを作成したいです。教えてください!

大学の研究で使うデータ処理で困っています。
Microsoft Visual C++ 2008 Express Editionを使っています。

例えば、10個の値が縦一列に入ったtxtファイルがいくつかあったとして
-5,-3,-2,0,3,4,5,6,7,8,
だった場合には
プラス側の最大値・最小値をそれぞれ求め(この場合、最大は8、最小は3)
マイナス側の最大値・最小値をそれぞれ求め(この場合、最大は-2、最小は-5)
結果として表示される

0,1,2,3,4,5,6,7,8,9,
だった場合には
プラス側の最大値・最小値をそれぞれ求め(この場合、最大は9、最小は1)...続きを読む

Aベストアンサー

本当に研究で使うデータ処理なのかなぁ?
こんな単純なデータ処理をして結果を表示するだけなんて研究に使うとは思えない。
むしろ課題を丸投げにしているように見える。

数値が縦一列に入っているということは各数値は改行で区切られているのだから、
ファイルをオープンして一行づつデータを読み取りながら、その数値の正負零を判定し、
(零を除いて)正負それぞれの最大最小を順次残していくようにすればよい。
最後に、残った最大最小の値を表示または非存在を表示する。
大した処理ではないと思われますが。。。

もしC言語が苦手だというのであれば、Excelなどの表計算ソフトのマクロで行っても
たいしたことは無いでしょう。

Qウインドウサイズを変更しても描画領域が変わらない(Win32API)

@ITの
http://www.atmarkit.co.jp/fwcr/special/custom_browser/01.html
を参考にブラウザを作ろうと思っています.
上記記事中のソースコード
http://www.atmarkit.co.jp/fwcr/special/custom_browser/code.html#02
をコピペしてビルドしたところ,確かにブラウザになったのですが,ウインドウサイズの変更がうまくいきません.
ウインドウ縁をドラッグしたり,最大化ボタンをクリックしてサイズの変更をしても,描画領域は変更されないのです.

(例えば)
・アプリ起動時に300x300のウインドウが生成,yahoo.co.jpが表示される
・縁をドラッグして450x450にする
・ウインドウは大きくなるものの,300x300の範囲にしかyahooが表示されない(スクロールバーの位置も変わらない)

といった具合です.
どうすればウインドウサイズとともに描画領域も変化するようになるのでしょうか?

Aベストアンサー

★『WM_SIZE』メッセージ(ハンドラ)などを処理すること
・ウインドウのサイズを変更したときに、ブラウザ画面をウインドウサイズに合わせて
 いないためです。スクロールバーの位置が変わらないのはその為です。
 ぱっと見た限りでは『WM_SIZE』メッセージを処理していないようです。
・『WM_SIZE』メッセージでウインドウのサイズが変化したときに、ブラウザ画面をその
 サイズに合うように再設定する必要があります。→『MoveWindow』や『SetWindowPos』
 API関数でサイズを変更できます。
・もう一度、ソースを良く見直してから『WM_SIZE』メッセージ(ハンドラなど)の処理が
 記述されていないときは、『WM_SIZE』メッセージでサイズの変更を処理して下さい。

最後に:
・なお、再描画はされていると思います。
 ですのでウインドウ縁をドラッグしたり、最大化ボタンをクリックしてサイズの変更が
 発生したときに、『WM_SIZE』メッセージ内で描画領域のサイズを自分で変更させる必要が
 あるのです。
・『MoveWindow( hWnd, 横位置, 縦位置, 横サイズ, 縦サイズ, TRUE );』
・『SetWindowPos( hWnd, NULL, 0, 0, 横サイズ, 縦サイズ, (SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW) );』
・以上。おわり。

★『WM_SIZE』メッセージ(ハンドラ)などを処理すること
・ウインドウのサイズを変更したときに、ブラウザ画面をウインドウサイズに合わせて
 いないためです。スクロールバーの位置が変わらないのはその為です。
 ぱっと見た限りでは『WM_SIZE』メッセージを処理していないようです。
・『WM_SIZE』メッセージでウインドウのサイズが変化したときに、ブラウザ画面をその
 サイズに合うように再設定する必要があります。→『MoveWindow』や『SetWindowPos』
 API関数でサイズを変更できます。
・もう一度...続きを読む

Q最小値を求める問題

xを実数とするとき、次の式を最小にするxの値と最小値を求めなさいという問題です。

√(x^2+6x+25) + √(x^2-12x+40)

平方完成すると、= √{(x+3)^2+16} + √{(x-6)^2+4}
前半を最小にするx=-3,後半を最小にするx=6はわかるのですが、それぞれの値が違います。
両方を同時に最小にするxの値がないとき、前半+後半の最小値をどう求めたらいいですか。

Aベストアンサー

f(x)=√(x^2+6x+25) + √(x^2-12x+40)
とおけば、
f’(x)=(x+3)/√(x^2+6x+25) + (x-6)/√(x^2-12x+40)
={(x+3)√(x^2-12x+40)+(x-6)√(x^2+6x+25)}/{√(x^2+6x+25)√(x^2-12x+40)}

(x+3)√(x^2-12x+40)+(x-6)√(x^2+6x+25)=0
のとき、f(x)は極値となるので、
(x+3)√(x^2-12x+40)=-(x-6)√(x^2+6x+25)
の両辺を2乗して、xの範囲に注意して解けばxが求まります。

Qc言語win32apiで孫ウインドウからメッセージ処理ができません。

c言語win32apiで孫ウインドウからメッセージ処理ができません。
親ウインドウを作りその中に子ウインドウを作りさらに孫ウインドウを作りました。
以下のような感じです。
--
親ウインドウ(A)親はNULL

子ウインドウ(B)親はA

孫ウインドウ(C、プッシュボタン)親はB

で、孫ボタンをクリックしたらwindprocにWM_COMMANDメッセージが飛ぶと思っていたんですが
まったく反応しません。
試しに親をAに変更したらちゃんと動きました。
孫ウインドウからwindprocにメッセージを飛ばすにはどうしたらいいんでしょうか。
それとも何か特別な方法があるんでしょうか。
開発環境はVC++ExpressEdition2008を使っています。

Aベストアンサー

>1の方法ですがそんな事が出来るんですか!?
>具体的な手法かもしくは参考ページとかあったら教えていただけないでしょうかm(_)m

実際のやり方としては2とそんなに違いはないかと思います。
子ウィンドウが具体的には何かが記述されていないので一般的な回答になりますが・・・

1.元の子ウィンドウのwndprocをGetWindowLongで取得する。
2.新しいwndprocを子ウィンドウに対してSetWindowLongで設定する。
3.新しいwndprocでは孫ウィンドウのWM_COMMANDメッセージを処理する。それ以外はCallWindowProcで元のwndprocを呼び出して処理させる。

これでサブクラス化するはずです。
1.の処理は2.のSetWindowLongの戻り値を利用することもできます。

1の方法は、孫ウィンドウのWM_COMMANDメッセージを受け取ったら、親ウィンドウに対してSendMessageでメッセージを送信する・・・という意味です。こちらも結局サブクラス化してますね・・・

2の方法は、何らかの方法で親ウィンドウハンドルを孫ウィンドウでアクセスできるようにしておく必要があります。

>1の方法ですがそんな事が出来るんですか!?
>具体的な手法かもしくは参考ページとかあったら教えていただけないでしょうかm(_)m

実際のやり方としては2とそんなに違いはないかと思います。
子ウィンドウが具体的には何かが記述されていないので一般的な回答になりますが・・・

1.元の子ウィンドウのwndprocをGetWindowLongで取得する。
2.新しいwndprocを子ウィンドウに対してSetWindowLongで設定する。
3.新しいwndprocでは孫ウィンドウのWM_COMMANDメッセージを処理する。それ以外はCallWindo...続きを読む

Qどなたか分かる方教えて頂けませんか?二次関数の最大最小の問題です。

どなたか分かる方教えて頂けませんか?二次関数の最大最小の問題です。

二次関数y=2X^2-4X+3の0≦X≦aにおける最大値、最小値を求めなさいと言う問題なんですが、自分なりに解いてみたら、
0≦a<1の時:最大値3(X=0)、最小値2a^2-4a+3(x=a)
1≦a<2の時:最大値2a^2-4a+3(x=a)、最小値1(x=1)
2≦aの時:最大値2a^2-4a+3(x=a)、最小値3(x=2)となりました。

解答は
0≦a≦1の時:最大値3(X=0)、最小値2a^2-4a+3(x=a)
1<a≦2の時:最大値3(x=0)、最小値1(x=1)
2<aの時:最大値2a^2-4a+3(x=a)、最小値1(x=1)となりました。
下の二つは分かったのですが一番上の場合の最小値は1だと思います。なぜ解答のようになるのか分かる方教えて下さい。お願いします。長文ですみません。

Aベストアンサー

結論から言うと、等号の扱いをどうするのかという問題になる。

>下の二つは分かったのですが一番上の場合の最小値は1だと思います

それも間違いではないが、それはa=1の場合に該当する。
最大値と最小値のグラフを書いてみるとわかるが、a=1の場合でも連続になっているだろう。
だから、その場合も含めて aについての場合わけは次のようにすると良い。
全ての両端に等号を付けても間違いではないから。

0≦a≦1の時:最大値 3(X=0)、最小値 2a^2-4a+3(x=a)
1≦a≦2の時:最大値 2a^2-4a+3(x=a)、最小値 1(x=1)
2≦aの時:最大値 2a^2-4a+3(x=a)、最小値 1(x=1)

従って、a=1の場合も含む解であることから、参考書(問題集)の解の方がベターだと言える。
君の解の方が、特殊なa=1を解にしていることから一般性がないので、むしろ不適当と言える。

Q【VC++2005(CLR)】ダイアログ右上の最小化、最大化、閉じるボタンの制御の仕方を教えてください。

VC++初心者です。
たびたび、お世話になっております。

現在、VC++2005 Express Edition、CLRのプロジェクトで
コーディングしています。

基本的な質問だと思いますが、ダイアログ右上に配置される
最小化、最大化、閉じるボタンの制御の仕方を
教えていただけませんでしょうか。

具体的にはやりたいことは、以下のようなものです。
・閉じるボタンを押されたら、MessageBoxを表示させる。
・他のダイアログのボタンから別のダイアログの最大化ボタンが
 押されたことと同じ動作をする。

Aベストアンサー

No.1さんMFCではないですよ。

最大化、最小化は
FormのResizeイベントでWindowStateプロパティを見ればわかります。

System::Void Form1_Resize(System::Object^ sender, System::EventArgs^ e)
{
  if (this->WindowState == FormWindowState::Maximized) {
    MessageBox::Show(L"最大化");
  }
  else if (this->WindowState == FormWindowState::Minimized) {
    MessageBox::Show(L"最小化");
  }
}

×ボタンで閉じるはFormClosingやFormClosedあたりのイベントで。

>・他のダイアログのボタンから別のダイアログの最大化ボタンが
> 押されたことと同じ動作をする。
とは?
この前の子フォームのと関連しているということでしょうか?
最小化時にに子フォームのVisibleプロパティをfalseに、最小化が解除されたとき(=最大化だけとは限らない)にtrueにするだけですが。
(そもそも、親フォームに最大化ボタンは必要あるか。)

No.1さんMFCではないですよ。

最大化、最小化は
FormのResizeイベントでWindowStateプロパティを見ればわかります。

System::Void Form1_Resize(System::Object^ sender, System::EventArgs^ e)
{
  if (this->WindowState == FormWindowState::Maximized) {
    MessageBox::Show(L"最大化");
  }
  else if (this->WindowState == FormWindowState::Minimized) {
    MessageBox::Show(L"最小化");
  }
}

×ボタンで閉じるはFormClosingやFormClosedあたりのイベントで。

...続きを読む

Q多変数関数の最小値

多変数関数の最小値を最急降下法で求めようとする場合、大域的な最小ではなく、局所的極小値につかまってしまう場合があることは良く知られています。しかし量子力学ではトンネル効果で壁を通り抜けて必ずポテンシャルエネルギー最小の状態にいくはずだから、これを利用して最小値が求められそうに思います。多変数のWKB法は難しいそうですが、これにより多変数関数の最小値は求められるのでしょうか。

Aベストアンサー

問題の関数をポテンシャルとして,
その中にある粒子を量子力学で考えるということでしょうか.
すぐに思いつくのは次の2点ですね.

(A) 量子力学的に考えるなら,全エネルギーが最小になるような状態を探すことになります.
これがポテンシャルの最小付近に局在した状態とは限りません.
簡単に1次元にして,2つのポテンシャル極小を
(1)  (k_1/2)(x-x_1)^2 + V_1
(2)  (k_2/2)(x-x_2)^2 + V_2
で近似します.
そのあたりに局在した状態の最低エネルギーはそれぞれ
(3)  E_1 = V_1 + (1/2)(hbar)ω_1
(4)  E_2 = V_2 + (1/2)(hbar)ω_2
程度ですから
(ω=√(k/m),m は粒子質量, hbar はプランク定数を2πで割ったもの),
V_1 < V_2 であっても E_1 > E_2 という状況は十分に可能です.
つまり,最小値が付近のポテンシャルが狭くて深くなっていれば,
そこに局在した状態がエネルギー最小とは限りません.

(B) 真の最小でない極小付近に局在してしまった状態から
量子ゆらぎで脱出するのに要する時間も問題にしないといけないでしょう.
ちょっと峠の高さが高いと宇宙の年齢など目じゃないほど時間がかかったりします.
WKB 法の例題に,
車が小山(古典的には乗り越えられない)を量子力学的に「すり抜ける」確率を求める,
なんていうのがありますが,とんでもない小さな確率になります.
質量 m を小さくすれば確率は大きくなりますが,
そうすると(A)の方で具合が悪くなります.

でも,この回答じゃ grothendieck さんには釈迦に説法ですよね.

問題の関数をポテンシャルとして,
その中にある粒子を量子力学で考えるということでしょうか.
すぐに思いつくのは次の2点ですね.

(A) 量子力学的に考えるなら,全エネルギーが最小になるような状態を探すことになります.
これがポテンシャルの最小付近に局在した状態とは限りません.
簡単に1次元にして,2つのポテンシャル極小を
(1)  (k_1/2)(x-x_1)^2 + V_1
(2)  (k_2/2)(x-x_2)^2 + V_2
で近似します.
そのあたりに局在した状態の最低エネルギーはそれぞれ
(3)  E_1 = V_1 + (1/2)(...続きを読む

Q最大化と最小化ボタン

Win32Applicationサンプルを作っていて疑問に思ったのですが。

(1) メインウィンドウの右上の閉じる「×」は必要ですが、最小化・最大化ボタンを「なくす」方法は、どうすれば良いのでしょう。
(2) ダイアログボックスで反対に最小化・最大化ボタンを「追加する」方法は、どうすれば良いのでしょう。

まず(1)を知りたいです。 VC++超初心者レベルとお考え下さい。 宜しくお願い致します。

Aベストアンサー

>(1) メインウィンドウの右上の閉じる「×」は必要ですが、
>最小化・最大化ボタンを「なくす」方法は、どうすれば良いのでしょう。

CreateWindowまたはCreateWindowExのパラメータで、ウィンドウスタイルを設定するパラメータで、WS_MINIMIZEBOXとWS_MAXIMIZEBOXを含まないスタイルを指定します。

http://yokohama.cool.ne.jp/chokuto/urawaza/prm/window_style.html

>(2) ダイアログボックスで反対に最小化・最大化ボタンを「追加する」方法は、どうすれば良いのでしょう。

ダイアログのデザインで、プロパティのスタイルに設定するところがあります。


人気Q&Aランキング

おすすめ情報