こんばんわ。
WinXP VC7.0 MFCで開発しようとしています
VC6.0での
「プロジェクト」-「プロジェクトへの追加」-「コンポーネントおよびコントロー
ル」の挿入はVisualStudio2005ではどこにありますか?
また、ボタンコントロールなどのイベントハンドラの返り値を変更するには
どうすればよいですか?現在すべてvoidになってしまいます。
VC6.0では自分で変更できたのですが、今では変更するとコンパイルエラーになって
しまいます。
ご教授のほどお願いいたします。
VC6でもイベントハンドラの型は固定じゃないの。
メッセージマップ定義のマクロがキャストしていたのでコンパイルエラーを検出できない
という指摘が昔からあり、それが厳格化されたんじゃないの(推測)。
たまたま今まで動いていただけだと思う。
実際int型の戻り値ってEAXレジスタ渡しだからスタック壊さないし
EAXを無視するか、戻り値とみなすかの違いだけで
たまたま動かすことが出来る。
超初心者さんの
> イベントハンドラの型は固定じゃないの。
に同意見ですね。
イベントハンドラの関数のプロトタイプは決まっているので
変えてはいけないと思います。
超初心者さんの話からすれば、マクロ定義の所為でコンパイルエラーになって
いなかっただけの話ではないかと思います。
ちなみにイベントハンドラの返り値っていったいどういう使い方をしていたんでしょう。
通常はフレームワークが呼び出すので確認しようが無いと思いますけれど。
レスどうもありがとうございます。
イベントハンドラは他クラスから呼ぶときに使いました。
本当はやっちゃいけないことですか?
ところで、コンポーネントの挿入はなくなってしまったのでしょうか?
プロトタイプと違う型での関数呼び出しは、undefined behaviorかな。
やっちゃいけないことだと思いますが。直接関数コールしたということなら、
面倒でもイベントハンドラとは別の関数を作って委譲するべきでしょう。
> 面倒でもイベントハンドラとは別の関数を作って委譲するべきでしょう。
補足しますと、イベントハンドラの中の機能をごっそり
別に作成した自分でコールする為の関数に移します。
イベントハンドラは、自分で作成した関数を呼び出すようにします。
これでコードは一箇所でイベントハンドラの型を変える必要もなくなります。
というか、普通はこっちの方法で対処します。
ハンドラの関数の型を勝手に変えてしまうとフレームワークの内部で
不都合が起こらないとも限りませんし。
フレームワークがその型にしているのに意味がある場合は
フレームワークが誤動作するかもしれません。
ちなみにVS2005を使っているならVC++8になると思います。
ただし、こう書くよりもVS2005でVC++非CLI MFC使用と書いた方が伝わりやすいです。
ちなみにですが、コンポーネントの追加ですが、
VS2005のHELPでCOMコンポーネントで調べると出てきますが、
メニューのツール-ツールボックス アイテムの選択で出てくるダイアログに
COM コンポーネントのタブがあります。
このタブのリストコントロールにPC内にインストールされているCOMが
全て表示されるので必要なCOMのチェックボックスをチェックすれば、
ツールボックスに表示されると思います。
試して見てください。
「コンポーネントの挿入」という概念そのものが無いようですね。
レスどうもです。
Visual C++ コンポーネントはないのですか?
ダイアログバーとか、プログレスダイアログとか便利だったのですが・・・。
見た限りでは見当たりませんね。
私自身、Visual C++ コンポーネントは殆ど使っていなかったので
良くわかりませんけれど、見当たらないと言う事は無くなったんじゃ
ないでしょうか。