• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リストコントローラについて)

リストコントローラについての問題

このQ&Aのポイント
  • MFCを使用して画面にリストコントローラとボタンを配置しましたが、選択したファイルがリストコントロールに反映されない問題が生じています。一度レジストリに覚えていた値を削除すると正しく反映される場合もあり、対処方法がわかりません。
  • リストコントローラについての問題が発生しています。選択したファイルが反映されない場合があり、解決策が分かりません。一度レジストリに覚えていた値を削除すると正しく反映されることもあります。
  • WindowsXP ProとVC++6.0を使用して画面にリストコントローラとボタンを配置しました。しかし、選択したファイルがリストコントロールに反映されない問題が発生しています。ただし、一度レジストリに覚えていた値を削除すると問題は解消しますが、再現性がありません。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>DWORD kind; >INT size = sizeof(INT); >INT colWidth; >::RegQueryValueEx(hKey,"Column0",NULL, &kind, (BYTE*)&colWidth, &size)); 読み込むところも、とりあえず上のコードの部分は問題なさ送ですね。キーのopenがないんでそっちはわかりませんが。 ということで、順番に調査するしかなさそうですね。 まず、レジストリに書かれた値がおかしいということから、 「レジストリに値を書く処理は動作している。」と推定できます。 では、値が不正になるタイミングはどこなのかというと、 1.カラム幅の取得 2.レジストリの値の書き込み 3.レジストリの値の読み込み(ただし、アプリケーション終了時に無条件にカラム幅を書き込む処理が組まれているとき) 3.絡む幅の設定(ただし、アプリケーション終了時に無条件にカラム幅を書き込む処理が組まれているとき) のどれかと考えられます。 上記の処理が正しく行われているかを戻り値等を確認していくしかないでしょう。 ASSERTマクロを利用するのも手だと。 #動きがおかしいといって聞く前に、まず戻り値くらいは見ましょうね。あとはWinAPIを使うのでしたらGetLastError()の値も。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>>どうやって? >>ここがわからないと誰も答えられないと思いますど。 > >保存するキーをRegCreateKeyEx()関数でオープンして、 >カラム幅を取得して、RegSetValueEx()関数を使用しています。 >具体的にコードで下記に記述します。 特に問題なさそうですね。 ちなみに、 >そこで、一度レジストリに覚えていた値を削除してプログラムを起動したところ、正しく反映されていました。 ってことですが、そのときにレジストリにかかれていた値はなんだかわかりますか? 幅が0になってて、次回起動時にファイル名を表示したんだけど単純に見えなくなってるだけのような気がするのですが。 あと、できればレジストリを読み込むところのコードも一緒に。 #ちなみにCListCtrlはMFCのクラスの名前です。本当のコントロールの名前はListViewコントロールです。

noname#153041
質問者

補足

>そのときにレジストリにかかれていた値はなんだかわかりますか? 0x77CFF465というとても大きな値になってました。 コードの補足です。 RegSetValueEx()でDWORDの値を書き込む前に、文字列を書き込もうとしていました。ただ、最後の引数のサイズに問題があるのかと思い、後にs.GetLenth()+1に修正しました。 <<コード>> CString s = "test"; ::RegSetValueEx(hKey,"StringTest",0,REG_SZ,(BYTE*)(LPCTSTR)s, s.GetLength()); <<値と読みところ>> DWORD kind; INT size = sizeof(INT); INT colWidth; ::RegQueryValueEx(hKey,"Column0",NULL, &kind, (BYTE*)&colWidth, &size)); 以上、よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>今MFCを使用して、画面にリストコントローラと、ボタンを配置しました。処理の流れとして、 リストコントローラってなんですか? カラム幅ってあるからリストビューのことですか? >1.ボタンを押すと、CFileDialogクラスを起動して、 訳わかりませんが。クラスを起動するってのが。 DoMoadlメソッドを呼び出すことですか? >3.終了時にリストのカラム幅をレジストリに覚える。 どうやって? ここがわからないと誰も答えられないと思いますけど。 #勝手に言葉を作るのはやめましょう。

noname#153041
質問者

補足

説明不足ですみません。補足させていただきます。 >リストコントローラってなんですか? >カラム幅ってあるからリストビューのことですか? CListCtrlのことです。 >訳わかりませんが。クラスを起動するってのが。 >DoMoadlメソッドを呼び出すことですか? はい。CFileDialogオブジェクトを生成して、DoModalメソッドを呼び出しています。 >どうやって? >ここがわからないと誰も答えられないと思いますど。 保存するキーをRegCreateKeyEx()関数でオープンして、カラム幅を取得して、RegSetValueEx()関数を使用しています。具体的にコードで下記に記述します。 <<コード>> HKEY hKey; DWORD sts; CListCtrl *pListCtrl = (CListCtrl*)GetDlgItem(IDC_LISTCTRL); ::RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Test", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &sts); INT iWidth = pListCtrl->GetColumnWidth(0); ::RegSetValueEx(hKey,"Column0",0,REG_DWORD,(BYTE*)&iWidth, sizeof(INT)); よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ListViewにSETしたファイル名からファイルパス取得方法

    今、ファイル名変換プログラムを作成しています。 そこで、ドラッグ&ドロップまたはフォルダ参照ダイアログから、 ファイルステータスをリストビューにセットしました。 (ファイル名)EX) XXXX.txt #その時、ファイルパスは取得できています。 その後、実行する時にリストビューから ファイル名は、GetItemTextで取得できました。 しかし、ファイルパスは取得できません。 ファイル名だけから、ファイルパスを取得するには、 どのようにしたら良いのでしょうか?? ファイル名の変更は、CFileDialog::Renameで考えているので、。。 それとも、他に良い方法はございますでしょうか? また、構造体かなんか定義して、 リストビューへSETする時に構造体にパスを保存し、 実行時に参照して処理すべきでしょうか? ただ、リストビューで選択し「DEL」ボタンで、 削除できるようしてあるので、 この方法は、効率が悪いように思えて・・・ 環境は、Win2000、VC++6.0、MFCで作成しています。 以上、ご教授ください!

  • フォルダ指定

    VC++6.0のMFCを使ってます。 FileDialogクラスで 例えば CFileDialog a(TRUE,"","*.*"); とするとコンピューター上のファイルを選択できます。 しかしフォルダが選択できません。このような参照からフォルダを 選択したいのですが何か方法ありますでしょうか

  • プレイステーション2のコントローラ1が動作しない

    しばらく押し入れに眠っていたプレイステーション2を久々にだしてきて、ゲームDVDをいれて起動できるかためしてみました。 最初、コントローラ1の端子にコントローラを差し込んで、ゲームDVDを入れてみましたが、そのままゲームは起動せず、「ブラウザ」と「ディスク」の選択画面がでました。 どちらを選択しようにもコントローラの操作は画面には反映しない状態でした。 次に、コントローラ2の端子にコントローラを差し込んで、ゲームDVDを入れてみると、同じくそのままゲームは起動しないのですが、「ブラウザ」と「ディスク」の選択操作はできるようなので、「ディスク」を選択すると、ゲームのオープニングが始まります。 ゲームは、私が好きだった「メタルギアソリッド2」と「メタルギアソリッド3」なのですが、これらのゲームでは、コントローラ2端子に差し込んだ状態で、ゲームスタートはできないようでした。 質問1 コントローラ1端子が使えないにしろ、コントローラ2でゲームはできるのでしょうか? (一人用ゲームができないということですかね?) 質問2 コントローラ1端子だけを交換したら使えるようになるのでしょうか? ご回答よろしくおねがいいたします。

  • Wiiのコントローラーについて

    こんにちわ。 Wiiのコーントローラーについてお伺いしたいのです。 昨日、初めてコントローラーを両手で使用するゲームをしたのですが、 最初は何の問題もなくゲームをプレイすることが出来ました。 ただ、一度電源を落として時間を置いてトライしてみると、 新しく購入した方のコントローラーが反応しません。 ホームボタンからまたコントローラーの設定をし直しました。 Wiiの場合、コントローラーを2つ使用して遊ぶ場合、 毎回ゲーム起動時に設定を行わなければいけませんか?

  • リストのプリントアウト

    フォルダ内の多数のデータをリストでプリントアウトをする時、画面をプリントスクリーンのボタンを押してペイントを起動させ貼り付けて、出力していますが、フォルダーのファイルのリストを簡単にプリントアウトできる方法があれば教えてください

  • PS3コントローラーの割り当てを1にしたい

    普通の純正コントローラーが割り当て1にできません。 本体に2つあるUSB差込口の左に普通のプレステ純正コントーローラ、右に格ゲー用のスティックがつないであります。 で、プレステ起動時、いつも純正コントローラーのほうがききません。格ゲースティックの方しかききません。 PSボタンを押せば、きくようになるのですが、更にその後、ゲームを起動すると、やはり純正コントローラーのほうは全く操作できず、PSボタン長押し→コントローラー設定→コントローラー割り当て とやって数字を2から1に変えないといけません。 すごく面倒です。 プレステ起動時の画面 設定→周辺機器設定 →コントローラの割り当て  から割り当てを1にしても プレステを再起動した時にはその設定は忘れられていて、また純正コントローラーのほうが2になっています。 純正コントローラーのほうを常に1にして起動するにはどうしたらいいでしょうか?

  • PS3のコントローラーが動きません。

    PS3のコントローラーが動きません。 PS3で、PS1のソフト(FF8)をやろうと思っているんですが、 タイトル画面から先に進めません。 コントローラーのPSボタンを押すと、コントローラーの設定等画面が出て、充電中の表示も出ます。 その画面の時には、十字ボタンやスティック、○×ボタン等も反応するのですが、 タイトル画面に戻して、NEW GAMEを選択しようと、十字ボタンやスティックを押しても まったく反応しません。 PS3で、PS1のソフトは使えないのでしょうか。 どういうことか、分かる方はおられますか。

  • ファイルダイアログでのファイルの複数選択について

    VC++6.0でプログラムをしているのですが、CFileDialogクラスのコモンダイアログでファイルを開くときに、ファイルを複数選択できるようにしています。 しかし、試してみると14枚までしか開くことができません。プログラムは以下のとおりです。 CFileDialog dlg(TRUE, "bmp", "*.bmp", OFN_ALLOWMULTISELECT); if (dlg.DoModal() != IDOK) { return; } ファイルを15枚以上選択するとif文の中のreturnに入って関数を抜けてしまいます。原因が何なのか分かる方教えてください。

  • PCにPS4コントローラーを繋いでも認識されない

    題の通りですが、PCにPS4コントローラーを接続しても認識されません。 以前までは使えていたのですが、久しぶりに使おうと思ったところ、コンパネのデバイスに表示されなくなっていました。 ケーブルを抜き差しすると一瞬だけオレンジ色のランプが灯るし、PSボタンを押せばPS4が起動して正常にコントローラーとして使えます。 ですが以前使用していた時はPCにケーブルを刺していればPSボタンを押しても反応しない(PS4が起動しない)だったような気がします。 これはケーブルの問題でしょうか?コントローラーの問題でしょうか? 解決策がありましたらぜひご教授お願い致します。

  • VB6でレジストリファイルをインポートするには?

    ○○.regというファイル(レジストリファイル)を開こうとすると、「レジストリに追加しますか?」というメッセージが現れますが、 VB6でregファイルを開き、この状態にしたいです。 初めは安易にshell(~\○○.reg)でいけるのかと思ったらエラーになってしまいました。 どうすればいいのでしょうか・・・?? あと、ちょっと気になっているのですが、レジストをインポートしても直後には反映されず、再ログイン時等に反映されますが、直後に反映されるため、何かのexeファイルが動いているんですか? 実際にデスクトップの壁紙等もプロパティを開いて変更したら直後に反映されているので、あのOKボタンを押すことで何かが起動しているように思うのですが・・・