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

スライダー メンバ変数設定後にプログラ...
 
通知
すべてクリア

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


merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

いつもお世話になっております.

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

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

をしまして,(1)

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

としました.

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

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

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

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


引用未解決
トピックタグ
さなえ
 さなえ
(@さなえ)
ゲスト
結合: 23年前
投稿: 24
 

>無視されてしまいます.
無視されているというよりダイアログの初期化に失敗してすぐ終了していると思います。

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

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

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


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

さなえ 様

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

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

IDがデフォルトだと問題が多発すると
よくこの掲示板で見受けられますが,
その通りでしょうか?
事実,それが原因で初期化に失敗していました.

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

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


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

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

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

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

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

よろしくお願いします


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>(つまり,候補ヒントを表示できない)

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

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

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

ゴミでした。m(__)m


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

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


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

Bun 様,sugar様

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

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

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

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

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

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


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

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


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

sugar様

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


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
 

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


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

クリリン 様

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました