猫でもわかるWindowsプログラミングの勉強でウィンドウの閉じるボタンが反応しない

このQ&Aのポイント
  • モードレスダイアログボックスでコントロールは問題なく行えるが、ウィンドウの閉じるボタンが反応しない
  • ダイアログボックスのボタン類と同様にウィンドウの閉じるボタンの存在を確認したがIDが見当たらない
  • Windows7、Visual Studio 2010、C言語を使用している
回答を見る
  • ベストアンサー

windowsプログラミング

"猫でもわかるwindowsプログラミング"を読みながらWin32 APIを勉強しているのですが、なかなかうまくいかないところがあります。 モードレスダイアログボックスを表示してコントロールも問題なく行えているのですが、ダイアログボックスのウィンドウについている赤い閉じるボタンが反応を返しません。 自分で作った閉じるボタンでは正常に閉じるのですが、ウィンドウの閉じるボタンを押しても閉じません… ダイアログボックスのボタン類のIDと同様にウィンドウについている閉じるボタンにもIDは存在するのかと思ったのですが、resource.hを見ても書かれていないのでなさそうですね… メインウィンドウであればWM_CLOSEメッセージが送られてきますが、この場合も何かしらのメッセージが送られてきているのでしょうか? Windows7 , Visual Studio 2010 , C言語で書いています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ちと調べると WM_CLOSE が飛んでくるように見える....

KabosuOrange
質問者

お礼

回答ありがとうございます。 確かにWM_CLOSEが来ていました。 ダイアログプロシージャ内にその時の処理を書き忘れていました><

その他の回答 (1)

回答No.2

SC_CLOSEかな?

KabosuOrange
質問者

お礼

回答ありがとうございます。 今回はWM_CLOSEでした。 自分はSC_CLOSEも知らないのでまだまだ勉強しないといけないです。。。

関連するQ&A

  • ウィンドウアプリが思うように動かない(GetWindowTextの使い方?)

    プログラミング初心者です。Windows XP, Visual Studio 2005 PE 使用。MFCは使わない(というより使い方がわからない…)。 簡単なウィンドウプログラムを作っています。エディットボックス1つとボタン1つを含むもので、ボタンを押すとエディットボックスの文字列を取得して、もしそれが close であればプログラムを終了するようにしたいんです。 自分で書いたコードの一部(プロシージャのみ)を以下に載せます。WM_CREATE、WM_DESTROYメッセージは省略。edit1はエディットボックスのハンドル、case式の2はボタンの子ウィンドウIDです。 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ char lpString[6]; switch(msg){ case WM_COMMAND: switch(LOWORD(wParam)) { case 2: GetWindowText(edit1,lpString,6); if(lpString == "close") SendMessage(hWnd, WM_CLOSE, 0, 0); else SendMessage(edit1, WM_CLEAR, 0, 0); return 0; } return 0; default : return DefWindowProc(hWnd,msg,wParam,lParam); } return 0; } Visual Studioではちゃんとビルドしてくれるんですが、いざ実行してcloseと入力した上でボタンを押してもうんともすんとも言いません。原因は何でしょうか?素人ながらlpStringをそのまま取り出して使用してるのがまずいのではと思いますが、関数の使い方がわからず対処に困っています。教授いただければ幸いです。

  • windowsプログラミングでprintf

    windowsプログラミング中に printf("test\n");と記述しても cmd(コマンドプロンプト)の画面がでて「test」と表示されずに 無視されてしまいます。 windowsプログラミング中でも コマンドプロンプトに文字を表示させるにはどうしたらいいでしょうか? 例えばメッセージループの途中で case WM_PAINT: printf("WM_PAINTです\n"); break; の様にするとコマンドプロンプトが現れて表示させたいのです。 尚MessageBox関数はあえて使いたくないので今回質問しました。 ■環境 Windows 7 Visual Studio 2008 SP1

  • 推奨書籍を教えてください

    こんにちは。 Visual C++.NET2003を用いてプログラミングを行っています。しかし、コンパイラとして使用しているだけでダイアログボックスやボタンなどのビジュアル的なプログラミングはしておらず、C言語によるコンソールアプリケーションを作っています。 今後も、マルチスレッドなどのプログラムを、コンソール上でプログラミングしていきたい思っています。しかし、本のサンプルプログラムを見ても、だいたいはウィンドウベース(ボタンやマウスクリック、ダイアログボックス)でのマルチスレッド処理等が記載されており、コンソール上でのAPIの使用の仕方がありません・・・(今現在、ソケットプログラミングを進めています) ウィンドウベースではなく、コンソール上でのAPIの使用の仕方などが記載されている本はありますでしょうか? まずは、ウィンドウズプログラミングを知ることからはじめる必要があるということでしょうか・・・・ よろしくお願いします。

  • Windowsプログラミングでの質問です

    よろしくお願いします。 windowsのプログラミングを、『猫でもわかるwindowsプログラミング弟2版』と言う本を参考にしながら、C言語で作っています。 2ヶ月ほどがんばってみたのですがどうしてもうまく行きません。 手順です、 1、空のウィンドウを作りメニューバーを作成。 2、メニューに『ファイルと、オプションタブを作る』 3、オプションタブに、ダイアログボックスを『開くと、閉じる』タブ   を作る。 4、『開く』タブをクリックすると、名前を入力するためのダイアログ  ボックスを開く。 と言うプログラムなのですが、作成されたウィンドウから⇒オプションタブ⇒開くをクリックしても、ダイアログボックスが表示されません。 リソースファイルや、ヘッダファイルを開いて、参考にしている本と比べてみたのですが、ほとんど変わっていません。自分では原因が発見できないのですが、詳しい方、ご指摘をお願いします。 5、気になる所では、ソース中で、ウィンドウプロシージャの記述で、  else文に{}が無いので、そこをいじってみたのですが、うまく行きま せんでした。   case WM_PAINT: //描画処理 if(strcmp(szName, "")==0) strcpy(szBuf, "まだ名前の入力はありません"); else wsprintf(szBuf, "入力された名前は%sさんです", szName); hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 10, 10, szBuf, (int)strlen(szBuf)); EndPaint(hWnd, &ps); break; ご指導よろしくお願いします。  

  • C言語 ダイアログボックスについて

    C言語でダイアログボックスを作っています。 閉じるボタンを押しても、ウィンドウが閉じないようにするには、どうしたらいいですか? ちなみに、閉じるボタンを表示しなくするのではなく、閉じるボタンは押せるのですがおしても無反応(操作を設定していないボタンみたいな)にすることはできませんか? 閉じるときに、ウィンドウだったらWM_CLOSEが送られてきますよね、それのダイアログ版というかがあれば閉じる作業をする前にreturnしてしまえばいいのですが・・・もしあったら教えてください。 コンパイラはBccです。

  • 最近のWindowsプログラミング環境について

    久しぶりにWindowsで趣味プログラミングをしようと考えています。 以前はDelphi、C++BuilderのRADプログラミング環境を使ってお手軽にやっていたのですが手持ちのバージョンも古いのと、今後(というか、すでに)MS系開発環境が主流だしなぁと、今回はVisual Studio(Visual C++)を使ってみようと思っています。 APIのみでゴリゴリと書いたこともあるので、またそれでいくか!とも考えましたが、さすがに今更APIだけでやるのは面倒くさいと、何かフレームワークを、MFCかATL/WTLあたりになるのかなぁと。 ちょっとしたツール程度のものを作るのにちょうどいいようなフレームワークで、おすすめがありましたら、ご紹介ください。(ちょっと漠然とした質問になってしまいましたが) #GTKやQTなどもどうなんでしょうね?

  • ペイント系ソフトのレイヤーのようなGUIを作りたい

    既出かもしれませんが、質問させて下さい。 質問タイトルの通り、PhotoShopやGIMPのような レイヤーの機能を持つウィンドウ(ダイアログボックス?)や、ツールボックス を作りたいと考えています。 今、自分が用意している開発環境は    OS:Windows7  ソフトウェア開発スイート:Visual Studio 2010 C++  API:WinAPI  言語:C++ ホームページで「猫でもわかるプログラミング」さんをWinAPI開発に参考にさせていただき、 同HPと同じく、空のプロジェクトでAPIを使用しながら一からコードで作成したいと 考えています。 自身の知識としては、C/C++でDirectXを使用しての3D描画くらいで、 GUIの設計は初めてです。 調査不足かもしれませんが、質問させて下さい。 PhotoShopやGIMPのようなレイヤーやツールボックスウィンドウは、 WinAPIのみで作成されているのでしょうか? それとも、他にGUIプログラミング用のAPIがあるのでしょうか? もしあるのならば、APIや参考HPを教えて頂けたら嬉しいです。 プログラミング初心者ですが、どうかよろしくお願い致します。

  • windowsプログラミングの入門書

    明けましておめでとうございます。 ちょっと遅いかもしれませんが(笑) 自分は3Dのゲームを作ろうと思い、ネットで調べたらC→C++→win32→directxの順番で勉強するのがいいと聞きました。 CとC++は1通り勉強しました。 次にwin32の勉強をしようと思い、本を買ったのですがどうやらwindowsシステムプログラミングの本で、しかも入門書ではありませんでしたOTL。8000円もしたのに~(笑) アマゾンやジュンク堂のwebサイトでwindowsプログラミングの入門書を調べたのですが、あっても1990年代の本しかなく、在庫ぎれもありました。 自分は無償のvisual studio 2008でしたいので、最近のwindowsプログラミングの入門書でvisual studio 2008を使って学べるいい本はあるのでしょうか?あっ、猫でも分かるプログラミングの本はアマゾンのカスタマーレビューを見て良くなさそうな本だったので、これ抜きでお願いします。 自分はdirectxの本が読める程度のwindowsプログラミングを学べる方法を探しています。よろしくお願いします。

  • windowsプログラミングがしたい

    Visual C++ 2008 Express Editionを使い、C言語でWINDOWSをプログラミングをやりたいんですが、 どういう風に設定すればできるのでしょうか。 ご存知の方教えてください。

  • APIはプログラミング言語?

    基本的な事がわからないので教えていただきたいのですが APIと言うのは、Parlやjavaのような 「プログラミング言語」なのでしょうか? そして、APIを理解することで windowsプログラミングと言うのができるのでしょうか?

専門家に質問してみよう