初めて質問させていただきます。よろしくお願いします。
当方、VisualStdio2005内のC++2005で、
ダイアログベースにてツールを開発していました。
ある日、ダイアログ上に多くのEditコントロールを作成(追加)することになり、
ダイアログリソースをVC内のリソースエディタにて、
テキスト形式でコントロールを追加していきました。
そのときは、テキストでの変更内容がダイアログにも反映されていたのですが、
その後はダイアログにツールボックスでのコントロールの追加やサイズ変更など、
見た目には反映されてもビルド後に反映されなくなってしまいました。
クリーン後のリビルドでも、問題は解決しません。
原因と対策をご存知の方、いらっしゃいましたらご教授いただけませんでしょうか。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
VC2005は初心者です。
VC6.0は仕事で使っていました。私はダイアログリソースをテキスト形式でコントロールを追加したことがないので、基本的にご期待に添える回答ではないと思いますが、ご参考までに。
回答する前に質問ですが、もっと詳しい問題の状況、状態を教えていただけませんか?「ビルド後に反映」とは?実行までおこなっていない、ということですか?
以下、回答です。
ダイアログリソースとダイアログのウィンドウの関連付けは正しいですか?ダイアログIDが間違って指定されていませんか?変更対象のダイアログとビルド後の実行したダイアログが違っているなんてことがあったりします。
上記のような間違いがなければ、Editコントロールを1つだけにしてビルド&実行してみてください。それで問題があれば、Editコントロールの書き方に問題があるかも?(いや、その場合はコンパイルでエラーになるはずだけど)。問題がなければ、Editコントロールを1つずつ増やしてビルド&実行する。ある程度増やしたら、思い切って半分くらい増やしてみたりしてもいいと思います。
この回答への補足
chaigon様、ご回答いただきありがとうございます。
また、お返事が遅れまして申し訳ございません。
説明の日本語が少々不明瞭だったようで、こちらもお詫びさせていただきます。
「ビルド後に反映されない」というのは、
一般的にボタンやエディットボックスなどを配置するグラフィカルなエディタ(すみません、正式名称はわかりません)上で、
・コントロールの位置を移動する、サイズを変更する
・コントロールを新しく追加する
などの「変更」を行っても、ビルド後のexeでは「変更」が行われない、ということです。
Aというデザインを修正してA'というデザインをつくり、ビルドしてexeを生成。
exeのデザインはA'になっているはずなのに、Aのまま・・・という感じです。
自分の拙い知識と技術の範囲内ですが、
ダイアログリソースとダイアログのウインドウの関連付け、またダイアログ自身のIDも間違ってないと思っております・・・(後述します)
ご指摘の実験を行ってみました。
バックアップを取り(もちろん関連のないフォルダで)、
Editコントロールをひとつにして(それ以外のコントロールを全部削除)ビルド・実行しましたが、
ダイアログ上にeditがひとつあるだけ・・・の状態のはずなのに、やはりほかのコントロールの削除前の状態になってしまいます。
ボタンに割り当てた関数などのソース自体は消していないので、
残っているボタンを押すと、それらの関数が走ります。
ちなみに、私も最近までVC6.0を使用しておりました。
当時も似たような状況になったこと(コントロールを大量に追加しなければいけなくなった)がありまして、
ひとつずつ追加するのが面倒なので、テキストでガンガンコントロールを増やしましたが、
テキストの変更結果も反映されるし、当然グラフィカルなエディタでの修正も反映されていたので、
今回の原因がさっぱりわからないのです。
先ほど後述と書いたことですが、
chaigon様の
>ダイアログリソースとダイアログのウィンドウの関連付けは正しいですか?ダイアログIDが間違って指定されていませんか?変更対象のダイアログとビルド後の実行したダイアログが違っているなんてことがあったりします。
のご指摘を、自分が正しく確認できていないと思いますし、
状況を冷静に考えても、この指摘が正しいように思います。
そこでぜひご教授願いたいのですが、
リソースとウィンドウの関連付けは、どのようにすれば確認できるでしょうか。
自分は、ダイアログヘッダ内、ダイアログデータの宣言部で、
enumにて配置されている一番先頭のIDが、
Resource.hにて割り当てられており、
ダイアログリソースファイル(.rcファイル)にてそのIDで各コントロールが配置されている
→関連付けられている
だと思っていますが、ちょっと違うのでしょうか・・・
ちなみに現在は、テキストでの変更はexeに反映されるので、
とりあえずの応急処理としてはテキスト上でコントロール配置(座標を全部計算・・・)し、
Resource.hにて割り当てを確認、という作業をひたすら繰り返しています。
・・・つまり、根本的な解決には至っていないのです(;;)
よろしくお願いします。
No.4
- 回答日時:
> 直接編集したモノは保存後にダイアログエディタで見るリソースに反映されています(逆は反映されません)。
> ダイアログエディタでの変更を保存する対象となるリソースファイルも同じです(保存結果はなにもかわりませんが)。
後者のリソースエディタで編集した場合に「保存結果はなにもかわりません」ということは、変更内容がリソースファイルに反映(保存)されないということでしょうか?
保存されないのであれば以下のような原因が考えられますが、どれも可能性は低いです。
・エディタなどでリソースファイルが開かれていて保存に失敗している(この場合は通常警告が出るはずなので可能性低いですが...)
・別ファイルに保存している(同じファイルということなので可能性低いですが...)
・保存する前にファイルを見ている(まさかとは思いますが...)
保存されるのにコンパイルしても実行時は編集前のダイアログが表示されるということであれば、リソースがコンパイルされていないとしか考えられません。
・メニュー「ビルド」⇒「ソリューションの消去」
・メニュー「ビルド」⇒「ソリューションのリビルド」
を行っても編集前のダイアログが表示される(=リソースファイルのダイアログの定義内容と実行ファイルで表示されるダイアログが異なる)というのであれば、もうわかりません。Microsoftに聞いた方がよいと思います。
この回答への補足
itohoo様、度々ありがとうございます。
>後者のリソースエディタで編集した場合に「保存結果はなにもかわりません」ということは、変更内容がリソースファイルに反映(保存)されないということでしょうか?
そうなのです。
>・エディタなどでリソースファイルが開かれていて保存に失敗している(この場合は通常警告が出るはずなので可能性低いですが...)
警告も出ず、保存した旨のメッセージが出ます。
>・別ファイルに保存している(同じファイルということなので可能性低いですが...)
当然ですが、パスもファイル名も同じです。
違うならば新たにファイルが増えるはずですが、これもありません。
>・保存する前にファイルを見ている(まさかとは思いますが...)
さすがにいくらなんでも…
保存後に古いものを保存なども当然してません。
今回はとりあえず必死にテキストで全部整えて事なきを得たので、
次回作成時はゼロから作成することで対応しようと思います。
Microsoftに聞くのも一つの解決法かと思いますが、
この解決までにかかる時間とコストを考えると、
組み立てなおしたほうが早いと思われるので、
時間ができたら再度調べてみようと思います。
No.3
- 回答日時:
>>実行時に表示させているダイアログと手動で編集したダイアログは、そもそも同じものなのでしょうか?
>テキストでの変更はexeに反映できることと、ANo.1の補足内容から、
>同じだと思っています。
>他に確認する方法があるならば、その限りではないのですが・・・
これが同じと思ってる根拠がわかりません。
リソースエディタで編集したモノが実行時に表示されない、直接編集したものが実行時に表示される、ということから、リソースエディタで編集しているダイアログリソースと直接編集したものが異なるものである、と考える方が自然ではないですか?
>>リソースエディタで編集する際に、エディットボックスではないID(検索しやすいユニークな名称にする)を持ったコントロールを追加してプロジェクトを保存し、
>>リソースファイルをテキストエディタで開いてそのIDを検索したときに、
>>それが自分で直接追加したエディットコントロールと同じダイアログリソース内にありますか?
>
>VC内のリソースエディタを使用しているため、
>同時にResource.hも変更(この場合は追加したIDのナンバーの定義を追加)した上で、プロジェクトを保存、
>外部よりテキストエディタにてリソースファイルを開いてみましたが、
>問題のダイアログリソース内に存在していました。
「問題のダイアログリソース」が何を指しているのかわかりませんが、このときにリソースエディタから追加したコントロールは実行時に表示されないと思いますので、試しにテキストエディタでリソースファイルを開いてこのコントロールを検索して、その直下にエディットコントロールを入れてみても表示されないと思いますが、いかがでしょうか?
この回答への補足
itohoo様、再度のご回答ありがとうございます。
言葉が足りなかったようで、お詫びいたします。
>これが同じと思ってる根拠がわかりません。
直接編集したモノは保存後にダイアログエディタで見るリソースに反映されています(逆は反映されません)。
ダイアログエディタでの変更を保存する対象となるリソースファイルも同じです(保存結果はなにもかわりませんが)。
以上から自分は「同じ」だと思っています。
>リソースエディタで編集したモノが実行時に表示されない、直接編集したものが実行時に表示される、ということから、リソースエディタで編集しているダイアログリソースと直接編集したものが異なるものである、と考える方が自然ではないですか?
上記から、とてもそう思えないのです。
それが無知故の妄想だと言われればそれまでですが、
逆に何(どこの情報、何の記述など)を調べれば「同一」かそうでないか判断できるか、ご教授願えませんでしょうか。
「問題のダイアログリソース」とは、
ダイアログの宣言部で、今回の現象が起こっているダイアログの宣言の部分、「BEGIN」~「END」内です。
記述が足らず、申し訳ありません。
>試しにテキストエディタでリソースファイルを開いてこのコントロールを検索して、その直下にエディットコントロールを入れてみても表示されないと思いますが、いかがでしょうか?
エディットコントロールの位置・サイズは妥当な数字(適当でなく、ダイアログのサイズ内におさまる数字)を入れ、保存してみました。
保存後にはダイアログエディタ上で表示されています(妥当な場所、サイズ)。
また、exeでも表示されています。
No.2
- 回答日時:
> 自分の拙い知識と技術の範囲内ですが、
> ダイアログリソースとダイアログのウインドウの関連付け、またダイアログ自身のIDも間違ってないと思っております・・・(後述します)
たぶんこの辺りが間違っているために意図した結果にならないのだと思います。
> 「ビルド後に反映されない」というのは、
> 一般的にボタンやエディットボックスなどを配置するグラフィカルなエディタ(すみません、正式名称はわかりません)上で、
> ・コントロールの位置を移動する、サイズを変更する
> ・コントロールを新しく追加する
> などの「変更」を行っても、ビルド後のexeでは「変更」が行われない、ということです。
実行時に表示させているダイアログと手動で編集したダイアログは、そもそも同じものなのでしょうか?
リソースエディタで編集する際に、エディットボックスではないID(検索しやすいユニークな名称にする)を持ったコントロールを追加してプロジェクトを保存し、リソースファイルをテキストエディタで開いてそのIDを検索したときに、それが自分で直接追加したエディットコントロールと同じダイアログリソース内にありますか?
この回答への補足
itohoo様、ご回答いただきありがとうございます。
引用で失礼いたします。
>実行時に表示させているダイアログと手動で編集したダイアログは、そもそも同じものなのでしょうか?
テキストでの変更はexeに反映できることと、ANo.1の補足内容から、
同じだと思っています。
他に確認する方法があるならば、その限りではないのですが・・・
>リソースエディタで編集する際に、エディットボックスではないID(検索しやすいユニークな名称にする)を持ったコントロールを追加してプロジェクトを保存し、
>リソースファイルをテキストエディタで開いてそのIDを検索したときに、
>それが自分で直接追加したエディットコントロールと同じダイアログリソース内にありますか?
VC内のリソースエディタを使用しているため、
同時にResource.hも変更(この場合は追加したIDのナンバーの定義を追加)した上で、プロジェクトを保存、
外部よりテキストエディタにてリソースファイルを開いてみましたが、
問題のダイアログリソース内に存在していました。
ANo.1の補足にも記述しましたが、
ダイアログエディタ(グラフィカルなエディタ)での変更が反映されず、
リソースエディタでの変更は反映されているのです。
(なので、まだ助かっているのかもしれませんが・・・)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# ActiveXコントロールを.NETにインポートできない??? 2 2023/05/02 02:50
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- C言語・C++・C# Seleniumで「ファイルを開く」ダイアログボックスのフォルダ指定する方法を教えてください。 1 2022/05/09 07:38
- その他(ソフトウェア) UnityのPublishing SettingsでCreate Keyを押しても反応しない 1 2023/06/27 01:03
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- Visual Basic(VBA) Application.Dialogs(xlDialogFileDelete).Showの件 1 2023/02/22 10:02
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
CWnd::EnableWindow()の扱い方
C言語・C++・C#
-
-
4
イベントハンドラが取得できない VC++ MFC
C言語・C++・C#
-
5
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
6
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
7
エディットボックスの入力制限について
C言語・C++・C#
-
8
ビジュアルC++でボタンの有効/無効
C言語・C++・C#
-
9
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
10
テキストボックスからフォーカス外す
C言語・C++・C#
-
11
デバッグ中のエラーのことで教えてください。
C言語・C++・C#
-
12
VisualStudio MFC変数が追加できない
C言語・C++・C#
-
13
MFCでbitmapを背景にしてstaticテキストを透過させる方法
C言語・C++・C#
-
14
MFCでOnPaintのタイミング
C言語・C++・C#
-
15
MFCのダイアログのリソースが更新されない
C言語・C++・C#
-
16
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
ActiveXコントロールを.NETにイ...
-
スピンボタンを右クリックして...
-
WindowsMediaPlayer全画面表示...
-
ダイアログとリストコントロー...
-
CreateWindowでSTATICコントロ...
-
TabControlとToolBarの背景色変更
-
コモンダイアログコントロール...
-
VCのコントロール最大配置数は?
-
コンビ エアロバイク 75XLI...
-
連続で印刷すると画像が更新さ...
-
文字色を変えたい(ACCESS VBA)
-
VisualStudio MFC変数が追加で...
-
MFCのプロジェクト作成時にコモ...
-
エクセル - リストボックスのマ...
-
VScrollBarの点滅を何とかしたい。
-
Excel VBAでのMultipageの選択
-
DateTimePickerでに年月までし...
-
VB6.0のデザイン時 コントロー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
-
ActiveXコントロールを.NETにイ...
-
連続で印刷すると画像が更新さ...
-
フォームでPDFを表示させた...
-
エクセル - リストボックスのマ...
-
コモンダイアログコントロール...
-
ワードのドロップダウンリスト
-
VBAでリストボックス内で↑↓の操...
-
EXCELVBA リストボックスで選択...
-
VB6.0のデザイン時 コントロー...
-
Accessのタブコントロールを2...
-
TabControlとToolBarの背景色変更
-
VisualStudio MFC変数が追加で...
-
警告表示を非表示にしたい
-
リストボックスの同期
-
C#.NETでのCOMコンポーネント作...
-
ダイアログボックスのボタンコ...
おすすめ情報