スライダー メンバ変数設定後にプログラム実行不可 子ダイアログ

[戻る]
merlo 2002/04/23(火) 21:31:35
いつもお世話になっております.

さっそくですが
症状を説明させていただきます.

 MFC ダイアログベースにてプログラム作成
 スライダーを利用したいため,スライドバーをツールボックスから設置
 C***Dlg::OnHScrollメンバ関数追加
 ダイアログ::イニシャル関数にて諸値を初期化.

をしまして,(1)

メンバ変数→IDC_SLIDERでメンバ変数追加
変数は,m_sldr タイプCSliderCtrl に設定

としました.

(1)より前の段階では,Ctrl+F5にて実行(または!アイコン)できるのですが
(1)以後では,実行するアイコンをクリックしても
ステータスバーに”現在のプログラムを実行”と文字が表示されるだけで
無視されてしまいます.

この症状に関して,何かご指摘できることがありましたら
どんな些細なことでもかまいません.どうぞよろしくお願いします.

また,もうひとつ質問ですが,
DLGベースで作成した場合,実行中に
CMyDlg myDL;
myDL.DoModal();
として,設定等を行うのに便利な子ダイアログを
生成しますが,その子ダイアログ(と呼んでいいのでしょうか)にて
スライダーを使う場合,初期化をするOnInitDialog()がありません
子ダイアログでスライダーは利用できるのでしょうか.

お忙しい中大変申し訳ありませんが,
学校での研究にどうしても必要であり
教えていただける方がこのラウンジにしか
いらっしゃらないので,
重ねてよろしくお願いします

さなえ 2002/04/24(水) 00:24:55
>無視されてしまいます.
無視されているというよりダイアログの初期化に失敗してすぐ終了していると思います。

>ダイアログ::イニシャル関数にて諸値を初期化.
スライダーの初期化にm_sldrは使用しなかったのでしょうか?

メンバー変数を追加したぐらいでめげはしないはずですが
OnInitDialog()にブレークポイントをつけてステップ実行してみてください。

>子ダイアログでスライダーは利用できるのでしょうか.
できます。
OnInitDialog()はCDialogから派生したクラスになら
クラスウィザードから追加できますから。

merlo 2002/04/25(木) 02:06:48
さなえ 様

お返事ありがとうございました.

SLIDERのIDがデフォルトのままだったのが
原因だったようでした.

IDがデフォルトだと問題が多発すると
よくこの掲示板で見受けられますが,
その通りでしょうか?
事実,それが原因で初期化に失敗していました.
↓
具体的には,スライダーのメンバ変数を初期化するとき
m_sldr.□□□
と書いても,"."のところで,Ctrl+Spaceを
連打しても,候補一覧メニューが出てきませんでした.
おかしいなと思っていましたが...

子ウィンドウに関してもまもなくトライします!!

merlo 2002/04/25(木) 02:52:39
>具体的には,スライダーのメンバ変数を初期化するとき
>m_sldr.□□□
>と書いても,"."のところで,Ctrl+Spaceを
>連打しても,候補一覧メニューが出てきませんでした.
>おかしいなと思っていましたが...

アドバイスのおかげで,スライダーが使えるようになりました.
しかしながら,正常に使えるにもかかわらず,
ダイアログ::イニシャル関数内において,
上記したような現象がまだ発生します.
(つまり,候補ヒントを表示できない)

これに関して,どなたかご存知ないでしょうか.
具体的な解決方法はないのでしょうか.

実質的には致命的な現象ではありませんが,
まだ始めたばかりで覚えることが多いので
できれば,候補ヒントを表示して負担を少しでも
軽減したいと思っています.

よろしくお願いします

Bun 2002/04/25(木) 08:28:18
>(つまり,候補ヒントを表示できない)

インテリセンスとかゆーやつのことですね。
どーもVC側にバグがあるみたいですよ。

この質問のおおかたの回答は「そんなものあてにしてはアカン」でした。

この質問をあちこちでみかけるので、
「インテリセンス」っつー名前もやめて欲しいなぁ。> To MS
「バグバグセンテンス」でどー?

ゴミでした。m(__)m

sugar 2002/04/25(木) 09:26:22
> (つまり,候補ヒントを表示できない)
>
事前にncbファイルを削除してからプロジェクトを開くと、
直ることが多いようです。

merlo 2002/04/25(木) 13:34:20
Bun 様,sugar様

アドバイスありがとうございました.

>事前にncbファイルを削除してからプロジェクトを開くと、
>直ることが多いようです。

削除したら,直りました☆☆☆(T_T)
ありがとうございました.

>>初期化をするOnInitDialog()がありません
>>子ダイアログでスライダーは利用できるのでしょうか.

>できます。
>OnInitDialog()はCDialogから派生したクラスになら
>クラスウィザードから追加できますから。

え,え,んー,これって,どういうことなのでしょうか.
クラスウィザードにて
親DLGになら,容易に追加(もしなかったら)できますが,
子DLGクラスを選択時には,イニシャル関数のメッセージ
が見当たりません.
たぶん,何か他に方法があるような気がしますが,
まったく検討がつきません.
もうちょっとだけ,ヒントをいただけないでしょうか

sugar 2002/04/25(木) 13:48:06
今度は、事前にclwファイルを削除してからプロジェクトを開いてみましょうか。
その後にクラスウィザードを開こうとすると、
ソースからクラス情報を再作成されるので、状況が変わるかもしれません。

merlo 2002/04/25(木) 14:03:27
sugar様

やってみました.
clwファイルを削除してから,Ctrl+w をしたら
何かを再構築していましたが,
結局のところ,C***Dlg(子ダイアログ)には,イニシャル関数はメッセージを
探してもありませんでした.
WM_INITDLG
ならありましたが・・・

クリリン 2002/04/25(木) 14:41:58
どうもです。
>イニシャル関数はメッセージを探してもありませんでした.
新規でダイアログを追加した場合は、OnInitDialog()はありませんよ。
よって、クラスウィザードでメッセージの「WM_INITDIALOG」を選択して関数を作成してくださ
い。
また、必要と思われるメッセージが見つからない時は、クラスウィザードのクラス情報を選択
し、メッセージフィルダの内容を変更してみてください。
そのフィルタに対応したメッセージの一覧が表示されます。

merlo 2002/04/26(金) 11:46:15
[[解決]]
クリリン 様

アドバイスありがとうございました.
WM_INITDIALOGで無事イニシャル関数を
容易することができました.

ありがとうございました!!

古いスレッドには追加発言できません。