- 締切済み
C++ ダイアログ画面について
VC++2008で,新規ダイアログ画面を作成します。このときダイアログにOKとキャンセルボタンが構成され,画面に文字が表示されます。ここで画面にグリッドを付けます。見えやすいように 2×2 のグリッドにします。すると画面にグリッドが表示されます。この場合,全体がグリッドエリアになる場合と、グリッドエリアと非グリッドエリアが繰り返される(タイル表示?)画面になる場合があります。後者のばあいだと,画面にSetPixelで線を引いた時,非グリッドエリアで線が消えてしまいます。 この非フリッドエリアがどこで設定されるのか、または切り替えられるのか ご指導をお願いいたします。ダイアログプロパティではないようです。いろいろ調べ、初期化、再インストールもしましたが解決できません。 OSはVistaです。OSがXP Homeでは、全画面グリッドとなります(あまり使用していない)。 よろしく、お願いいたします。
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- wwsm
- ベストアンサー率0% (0/0)
お世話になります。 メモリやクロックは問題なさそう、ということですね。 まず、 >Vistaでは,エクスプローラで >ファイルのサイズやホルダを見たりする時、サイズとか種類、更新日時などが >表示されず、音楽を聴くときの評価とかタブとかに変わってしまい、一々修正しています。このような現象が,発生しているのかもしれません。 とありますが、それはVistaの仕様ですので問題はありません。なお、 これをある程度統一?することは可能ですが、それはこの質問とは かけ離れているので、設定を確かめればできると思います。 さて、今回の問題ですが、私はVSに問題があるようには思えません。 マシンにも特に問題がないとするとあるとすればOSかもな、と思いました。 つまり、Vistaを再インストール、またはリカバリ(プリインストール版)したのちに、VSを再インストールしてみる、 事を試してみたらどうだろう、というのが最終的なアドバイスになります。 私は専門家とまではいかないので、上記アドバイスはそちらの自己責任において試すか試さないかをご検討ください。 ただし、その前にMicrosoft様のVS2008のサポートを受ける、という手があります。これにはインシデントを1つ消費するかもしれませんが、 私よりも、有益な手段だと思われます。 ご検討ください。 誠に遺憾ではありますが、これ以上はこちらでは問題解決のための力が足りないと判断しております。よって、別の方か、前述の手段をとっていただく、というアドバイスしか出来そうもありません。 お力になれず申し訳ありません。
- wwsm
- ベストアンサー率0% (0/0)
どうも。えっといただいた回答をコードに書いても普通に動きますね。 グリッドは[書式]→[ガイドの設定...]で添付した画像のように出ますよね?そこでDLUを5,5としても変わりませんか? これは余談ですが、ダイアログのOnPain()ないでは CPaintDC dc(this); dc.SetPixel(..); としたほうがいいですよ。 っと、本題に入りますが、別の環境だとならない、となると、 グリッド表示に使っている処理(VSの)が マシン自体のメモリが足りていないためかのためにおこるときがします。VS自体ではなく、もしかしたらマシンスペックの上で起こるトラブルかもしれません。 こちらはメモリ12GBありますし、グラボも256MB(これはたぶん使っていないと思うけど)あるのでグリッドを1,1にして大きなダイアログにしてもダイアログのクライアント領域全面にグリッドが表示されます。 OSがXPのマシンのがメモリが多いなんてことはありませんか? ちょっと、そのあたり位しか表示されない原因がこちらもわかりかねます。 も少し技術的にいえば DCが確保するメモリ量が足りていないのかな? という感じ? んー…環境で結果が異なるということはVS自体ではなくマシン環境依存かもという気がします。OSはこんなところでVistaとXPで違うってことはないと思いますから… ちょっとその辺をご確認してみてはいかがでしょうか?
補足
ご返事ありがとうございます。 メモリはVistaは2G、Core2 3G で Xpはメモリ700M程度、ペンティアム4 2.4Gですので、Vistaのほうが上位機種です。 メモリ上で関係があると、思えません。あったとしても増やす程度で確認のしようがない?。 グリッドの大きさには関係がなさそうです。 何か、環境が変わるためにおこっているようです。Vistaでは,エクスプローラで ファイルのサイズやホルダを見たりする時、サイズとか種類、更新日時などが 表示されず、音楽を聴くときの評価とかタブとかに変わってしまい、一々修正しています。このような現象が,発生しているのかもしれません。 現在のところ、お手上げです。window7にすると、良いのかもわかりません。 わかる範囲で、ご指導をよろしくお願いいたします。
- wwsm
- ベストアンサー率0% (0/0)
申し訳ありません。どうやらバイナリデータ(圧縮ファイル等)は添付できないようです。… 何とかしてプロジェクトのデータをやり取りした方が手っ取り早く解決できるような気がするんですが、メールアドレスが公開されてしまうので… Twitterはご存知でしょうか、私のアカウントURLを載せておきます。 http://twitter.com/TwittSpearmint これを使ってこちらの、ないしそちらのメールアドレスのやり取りを公開せずにできます。 手順: 1.もしアカウントをお持ちでない場合は一時的にでも作成 2.上記私のアカウントをフォローします 3.「私に「C++ ダイアログ画面について」のモノです」とでも ダイレクトメール(よければそちらのメールアドレスも記載) 4.ない場合はこちらのアドレスを記載してTwitterアカウントにダイレクトメールを返信いたします。 5.私とあなた間でメールアドレスのやり取りが可能になります。 6.必要ならばTwitterアカウントを削除してください 以上でこの場ではなくダイレクトにプロジェクトソースなどのやり取りが可能ですが、私と貴方間でアドレスが分かってしまいます。 こちらはそちらもこちらもがアドレスを悪用したりしないことを前提として話を進めておりますが、貴方がためらわれるのならば、 残念ながら、この場では不具合?状況が把握できないため、これ以上お力にはなれそうもありません。 ご検討の上、ご回答をしていただきたく思います。問題なければ、 ご回答をいただかなくともTwitterのメール通知で分かりますので 必要はありません。 では、ご検討よろしくお願いいたします。
補足
Twitter登録しましたが、ログインできない状態です。 いろいろありがとうございます。 ファイルのやり取りもありますが、MFCでダイアログ作成の初期画面で、上記 画面になるか否かです。ファイルは、ダイアログにボタン1つつけ CDC* pDC=GetDC(); を入れ for(int i=100; i<=1000;;i++) pDC->SetPixel(i, 150,RGB(255,0,0)); を起動するだけです。この場合,ダイアログのグリッド部は、赤い線で表示され 非グリッド部は、見えない状態です。 ファイルは、他に挿入したものはありません。 上記コマンドを,OnDrawに入れようが,OnPaintを入れて、挿入しても、同じ状態です。 複雑な処理はありません。添付しようとした1つのアプリは、SetPixelで同心円間に放射状に描いた絵です。グリッド部と非グリッドに同じ状態で描いたものにすぎません。単純には、上記の水平線で確認できます。 ツイータが使えたら,またそちらからお願いいたします。 多分、お使いの環境では、ダイアログ画面は、上記のようになっていないと思います。その状態で,ファイルを動作させたら、すべて正常になると思います。 こちらの、別パソコンのXP環境では、そのような結果でしたから。 さらなる,ご指導をお願いいたします。
- wwsm
- ベストアンサー率0% (0/0)
お世話になります。 画像拝見させていただきました。 この画像ですが、開発画面ですよね? できれば実行画面のスナップでの不具合を見たかったのですが… んー…このグリッド幅を5,5位に変えてもなりますか? ちょっとこっちのプロジェクトファイルを添付しますので、 同様の?(発生する状態)に設定してもらえませんでしょうか? また、どう圧縮ファイル内に私のメールアドレスを記載したテキストファイルがございますのでそちら当てにプロジェクトファイルを圧縮して ご返信願えないでしょうか? いうまでもないとは思いますが、メアドは悪用しないでくださいね。
- wwsm
- ベストアンサー率0% (0/0)
回答内容記載時に下の方に //--- 回答へのデータ添付は投稿完了後に行えます。 確認画面で回答内容を確認し、投稿が完了した後、 データ添付を行ってください。 //--- とありますよね? で、回答を完了した後、画面上の方に「データ?添付する」というボタンが表示されると思います。 そこをクリックするとウィンドウが表示され画像・動画…などなどと種類選択ボタンがありますのでそれに従って、画像なら画像でスナップ画像のファイルパスを入力し、アップロードします。 他は試したことがないのですが、.cppのファイルなら.txtに拡張子変更して行った方がいいのかもしれません。(サポートしていない可能性あり)。いずれも容量の制限がありますので表示される内容をよくお読みくださいね。 こちらはほぼ一日対応が可能ですので(睡眠時除く)、できれば問題解決までお手伝いできたらな、と考えております。
補足
早速のご返事、ありがとうございます。 画像を添付します。やはりできなかったら、画像は添付できなかったと思ってください。確かに、前は投稿完了で、画像添付があったのですが、今回この投稿完了でできなくなっています???です。 再度行ってみます。 画面は、ダイアログ画面状態と、アプリケーションで描いた図形です。アウリでは、表題の下にそれぞれ絵が描けるのですが、片側が消えている。そのため、右側へずらしたずけいです、水平線は、そのまま描いています。
- wwsm
- ベストアンサー率0% (0/0)
特に著作権上問題なければ、プロジェクトもしくはダイアログクラスのソースを公開していただけないでしょうか? もしかしてこのような状況を指しているのでしょうか? (添付ファイル参照) 画面のスナップ等を添付していただけると状況が分かりやすいのですが。
補足
早速のご回答ありがとうございます。 サンプル画像が奇麗に入るとは思いませんでした。図を添付と思いましたが、文章内にと思い”入らない"で添付できませんでした。サンプルのようにできるのだと思い、ダイアログとサンプル画面を添付しようとやりかけたのですが、挿入するところがありません。 もし、ご存知でしたら、教えてください。至急添付いたします。 確認画面->投稿->完了で画像を入れるところは?です。
- wwsm
- ベストアンサー率0% (0/0)
どうもお世話になっております。 先日の補足情報ですが、とりあえず作ってみました。 クラスCtestDlgがダイアログクラスになります。 コードを示しますが、その前に処理概要を、 タイマーを作り10msごとにCtestDlg::OnPaint()を呼び出し x,yをインクリメントしています。以下にOnPaint()を示しますね。 //----- void CtestDlg::OnPaint() { if (IsIconic()){ .. }else{ static int x = 1, y = 1; CPaintDC dc(this); //dc.MoveTo(0, 0); //dc.LineTo(x++, y++); dc.SetPixel(x++, y++, (COLORREF)0xFFFFFFFF); CDialog::OnPaint(); } } //--- といったコードを書きました。で、実行すると上記で// されているLineTo()はちゃんと表示されるけど、SetPixel()だと点が動いていく ような状況になります。 これはCDialogクラス(基本クラスCWnd)が内部のOnCtlColor()で再描画のたびにダイアログの色で塗りつぶしているためだと思われます。 そのためSetPixel()の2回目が描画されたとき、1回目の描画されたピクセルはダイアログカラーで上塗りされ消えてしまうためですね。 LineTo()は一回の描画で線を描画します。SetPixel()は一回の描画では点を描画するだけです。 グリッド云々は関係ないと思います。 これを回避するには、オーナードローなどした方がいいかもしれません。
補足
早速のお返事ありがとうございます。 タイマーなど使うと、再描画などするかもしれません。単純に for(int i=100;i<=800;i++) dc.SetPixel(i,200,RGB(255,0,0)); で回すと、再描画せずに、線が描けると思います。通常の考えです。 ところが。今回は、グリッド領域では、線が描けますが、描けない領域が出てきます。 グリッドは、話の説明で使いました。説明のしようがありませんので。 別のパソコンでXP環境上で行うと、正常に表示されます。このときは、ダイアロググリッドを付けた画面は、全面につきます。 小生の使用しているVistaでは、ダイアログすべてが、前に説明したような状況になります。 オーナードローをしたのも、作成していますが、はやり行き着くところ、原点に戻ってしまいます。 前に進めなくて大変困っています。 さらなる、ご指導をお願いいたします。
- wwsm
- ベストアンサー率0% (0/0)
えっと。質問内容がちょいと分かりにくいのですが、前者の場合だと日グリッドエリアはないのですよね?その場合は表示されるのですか? たぶんこちらの想像ですけど、タイル表示?のときダイアログ画面に四角の波線が表示されていませんか? カーソル操作でその波線を広げてダイアログ全体(システムメニューバーは除く)、いわゆるクライアント領域まで広げれば表示されると思いますけど… こちらも試してはいませんがその状態は消える部分というのはクリッピングされている部分のことを指しているのだと思われますが… もしかして見当違いのことを言っているのかもしれませんが、 参考にしてみてください。 その状況を出す手順?を箇条書きなどにしていただければ 問題の状態が把握しやすいのですが、ちょっと質問分から状態が分かりにくいので。
補足
四角の波形?は、表示されていません。ガイド設定でグリッドを付けると、認識できるものです。グリッドをつけなければわかりません。 マウスでつかむことはできません。 ちなみに、XPで正常な画面ファイル(同じ方式で作成したもの)をVistaに持ってきて、表示したら同じことが発生しました。ウィンドウの画面設定が悪いのか確認しましたが、変わりませんでした。 状況を出す手順: 新規作成-> MFCアプリケーション->次へ->ダイアログ選択->......あとはそのまま次へをクリック 最後に完了。 ダイアログ画面が表示される。単純に何もしていないOKとキャンセルボタンがある画面です。 この画面に、ツールバーの書式でガイド設定をクリックし,グリッドを1,1にして表示します。すると、見た目で50mm位の間隔で左側からグリッド部ヒ非グリッド部が 繰り返し表示されます。 この状態で、グリッド部とヒグリッド部にSetPixelで線などを描くと、非グリッド部には、描けない状況となっています。SetPixelではなく、Moveto、LineToなどで処理すると、線、円、文字など問題なく描画できます。 ご指導を、よろしくお願いいたします。
- sankaku197
- ベストアンサー率47% (29/61)
質問文を推敲して再投稿される事をお勧めします。 私はwinアプリにあまり詳しくないのですが、例えばグリッドを付けるとかダイアログプロパティとか、それはC++でwinアプリを作られる方にとって共通の単語なんですか? おそらく、win32api、mfc、atl、.net等何を利用するかによって作法は変わってくると思うのですが。
補足
基本的には、どの手法を使用しても、ダイアログの初期画面は,変わらないと思います。WIN32でもMFCでも.........。 ここでは、MFC作成でダイアログを選択した場合の、初期画面の質問です。 ダイアログプロパティは、画面をクリックして、プロパティ表示をしたとの意味です。 ボタンを選択した場合、ボタンのプロパティを選択し、表示します。 グリッドは、ボタンの配置など正確にあるいは、整列させるために使います。 アプリケーション内では残念ながら、機能しません。 ご意見ありがとうございます。状況を見て、再登校を行うか判断します。
お礼
いろいろアドバイスありがとうございました。 Vistaの再インストは、他の環境を再現するのに大変なので、今は行なえません。容量が大きくなっているので、VistaをやめてWindow7に移行したほうがよいかもしれません。 このまま、どなたか現れるのをもうすこし、待ちます。小生もさらにいろいろ調査します。 再度、ありがとうございました。