• ベストアンサー

Win32 API ウィンドウ

メニューバーの項目をクリックしてバージョン情報やヘルプなどの ウィンドウを出すようなプログラムを作りたいのですが、 どうすれば良いのかわかりません。 プロシージャのWM_COMAND内でCreateWindowを使おうと考えてみたのですが 引数のインスタンスがプロシージャ内ではわからないので、できませんでした。 こういったプログラムはどうやって作るのでしょうか?

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

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

方法はいろいろありますが、 一番簡単なのは、WinMain内でグローバルに保持しておくことでしょう。 その他に、WINAPIのGetModuleHandle関数をNULLで呼び出すことで、 直接アプリのインスタンスを取得する方法もあります。

cern5100
質問者

お礼

回答ありがとうございます。 大変参考になりました。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); でも取れますよ

cern5100
質問者

お礼

回答ありがとうございます。 大変参考になりました。

回答No.1

メニューはリソーススクリプトファイルで作成します。 ちょっと古いかもしれませんが、↓なんかが参考になると思います。 http://homepage2.nifty.com/c_lang/sdk/sdk_06.htm 開発環境によっては、直接リソーススクリプトを記述しなくても、GUI で作れたりします。 インスタンスは、WinMain の時点でグローバル変数に保存しておくとか、でしょうか。

cern5100
質問者

お礼

回答ありがとうございます。 大変参考になりました。初心者な者で全然やり方がわからなかったので助かりました。

関連するQ&A

  • Windows APIのメニューバーに関する関数

    今プロシージャのWM_CREATEのところでメニューバーを設定しているのですが メニューバーを設定する部分をそれ用の関数にした方がいいでしょうか? 初心者で一般にどうするかわからず、参考になるソースも見つからなかったので質問させて頂きました。 試しにやってみようとしたのですが、書き方も変わってくるのでちょっと苦戦中です。 何か参考になるメニューバーを含んだ小さめのプログラムのソースがあれば教えて欲しいです。

  • メニューバーを表示させたい。Win7

    WINDOWS7のパソコンで、Windows Media Playerのバージョンを調べたくて、このソフトを起動させました。 画面にメニューバーがあって、「ヘルプボタンを選択して」、とネットで解説を見つけたのですが、私のパソコンには、メニューバーが表示されません。これどうしたらいいですか? 補足: コンピューター>整理>フォルダーと検索のオプション>表示>常にメニューを表示する。にチェックを入れました。 コンピューター>整理>レイアウト>メニューバーにチェックが、入ってます。 スタートから「コンピューター」をクリックすると、メニューバーは表示されます。 ですが、、Windows Media Playerの画面上では、メニューバーが表示されません。 よろしくお願いします。

  • Sleipnir(スレイプニル)のメニューバーについて

    スレイプニルのメニューバーが「ファイル」と「ヘルプ」しか表示されません。 今まではメニューバーに「編集」「表示」「お気に入り」「ツール」などが表示されていたのですが、いつの間にか(数日の間に)それが表示されなくなり、「ファイル」をクリックしても「アプリケーションの終了」しか表示項目がない状態になっています(「ヘルプ」は「バージョン情報」のみ)。 色々と検索してみてもなかなか解決方法が見つからず困っています。何かいい方法はないでしょうか?

  • Win32 メッセージループ

    ウィンドウズプログラミングを勉強はじめたばかりなのですが、2つ質問があります。教えてもらえると助かります。 まず、GetMessage関数の第2引数です。 これはメッセージを取得するウィンドウハンドルを指定とありました。NULLを使えばそのスレッドのすべてのメッセージを取得することになると思いますが、NULL以外で実際にウィンドウハンドルを指定するプログラムは一体どういうときなのか知りたいです。 試しにCreateWindow関数でウィンドウを2つ作りをメッセージを取得したいウィンドウハンドルを指定したところ指定しなかった方はメッセージを取得しませんでした、もちろん想定どおりです。しかし、メッセージの取得するウィンドウでサイズなど変更できない場合がありました(取得しないウィンドウをクリックした直後など)これはメッセージキューのメッセージ処理によるものだと(自分の考えなのであってるか不明)思います。結局NULL以外使い道ないんじゃないかとと思ってしまいました。 もう一つの質問です。 ウィンドウプロシージャはコールバック関数であるのでしょうか?システムから呼ばなくてはいけない理由が知りたいです。 これも自分の勝手なよそうですが、DispatchMessage関数が送るメッセージをシステムがどのウィンドウプロシージャを呼び出すのかMSG構造体のウィンドウハンドルを見てさらにWNDCLASSEX構造体などから判断して決めるのをシステムが行うのでコールバック関数なのかな? DispatchMessage関数が直接ウィンドウプロシージャ呼び出さない理由が知りたい。

  • ウィンドウが出てこない!!

     かつて、あるウィンドウが邪魔になってしまったので、「閉じる」にしないで、ドラッグして移動させてしまいました。  その移動と言うのが、下のツールバー!?の下まで移動させてしまったのです。  その後、そのプログラムを開いても、下のバーに表示はされるのですが、ウィンドウが出てきません。  インストールしなおしたりしたのですが・・・  下のバーに表示されたところで右クリックをしたら、「移動」の項目は出るのですが、まったくできません。 どうしたらいいのでしょうか・・・

  • Windows Media Player で「取り込み」のタブが見当た

    Windows Media Player で「取り込み」のタブが見当たりません。WMPのバージョンを確認してから質問しようと思ったのですが、メニューバーも見当たらないため、「ヘルプ」からバージョン情報も確認できません。(比較的新しいPC=Windows 7に付いていたものなので、わりと新しいものだとは思います。)タブとしては、右上に「再生」「書き込み」「同期」があるのみです。取り込みをしたいのですが、方法が分かりません。よろしくお願いします。

  • Windows7の最新の情報に更新

    WindoesXp では Explorer のメニューバーの表示をクリックしたら、『最新の情報に更新』というメニューがありますが、Windows7には見当たりません。 Windows7で『最新の情報に更新』をやるには どうしたらよのか お教えください。

  • WIN32APIアプリでツールバー/スステータスバーの表示切り替え

    VC++6.0のwin32sdkで、MFCのSDI標準テンプレートのようにメニューでツールバー,ステータスバーを切り替えるアプリケーションにしたいと思います。 以下のようなコードにしていますが、このままでは表示非表示を切り替えた場合、中央ウインドウのサイズが変更されません。 ドラッグして全体のサイズを変更すると中央メインウインドウも正常な表示になりますが、なにか中央のウインドウを再描画する処理が必要と思われます。その再描画処理についてご教示くださいますようお願いします。 1)ステータスバーの高さ,ツールバーの高さをグローバル変数にする 2)メニューからのメッセージでこのグローバル変数を表示(夫々のバーの高さ)、非表示(夫々のバーの高さ=0)を切り替える。 3)WndProcのWM_SIZEで中央メインウインドウをMoveMindowする [グローバル変数] ---------------------------------------------- static int bShow = 16;//ステータスバーの高さ(非表示は0) static int tbShow = 25;//ツールバーの高さ(非表示は0) ---------------------------------------------- [LRESULT CALLBACK WndProcの一部] ----------------------------------------------- case WM_SIZE: ...... MoveWindow(中央のハンドル, 0, tbShow, LOWORD(lp), HIWORD(lp)-tbShow-bShow, TRUE); break; -----------------------------------------------

  • Dreamweaver メニューバー Widgetについて

    単純なことなんですが宜しくお願いします。 項目追加などの作業で、ヘルプに 1、ドキュメントウィンドウで、メニューバー Widget を選択します。 2、プロパティインスペクタで、1 列目の上にある [+] ボタンをクリックします。 と有りますが、「メニューバー Widget を選択します」とはどの様に選択するのでしょうか? 太枠になった状態ではダメでした。

  • 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; ご指導よろしくお願いします。  

専門家に質問してみよう