検索結果 50 件
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: HSPのif文の実行内容が理解できません。
- 返信数: 4
- 閲覧数: 2250
Re: HSPのif文の実行内容が理解できません。
ここはC言語系の掲示板ですよ?と思いつつわかる範囲で答えてみます。 HSPなつかしいなぁ。 質問1:HSPについてまだよく理解できていないのですごく初歩的な質問なのですが、 「{Px=0 :Tg=1}」という記述では、Px=0とTg=1の両方の代入が実行されるのですか? これはその通です。 HSPはC言語などと違って命令文の後に;を打つ必要はなく、そのままでは1行に1つの命令しか書けません。 その代わり、命令文を:でつなぐことによって複数の命令を1行に書くことができます。 質問2:PxとPyとTgという変数が何を表しているのかよくわかりません。 ←を押したらキャラクターが左攻撃...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: ソートアルゴリズムの可視化
- 返信数: 6
- 閲覧数: 3821
Re: ソートアルゴリズムの可視化
私はWin32 APIをまともに触った経験がありませんが、MFC(C++)というのを使ってバブルソートやクイックソートなどを可視化した経験があったので、その動きについて少し書いてみます。 可視化する=動きを画面に出す ということで、まずは数字の流れを把握する必要があります。 また、ソートの過程を見せるためには、たとえばソートと描画を交互に行う必要があります。 ただ交互に行うだけでは処理が速すぎて人の目には何をやっているのかが分からないので、少なくとも描画の間隔は人がきちんと見れるくらい開けておかなくてはなりません。 そのためにはタイマー処理をする必要があります。 つまり、ちょっとソート→その時...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: こういう遅延は仕方ないのでしょうか?
- 返信数: 2
- 閲覧数: 2044
Re: こういう遅延は仕方ないのでしょうか?
OnKeyDownで スペースが押された→timerを4にする→SetTimerを実行→Invalidateを実行・・・① としていて、 OnTimerでは timerが3~1ならポーンを鳴らし、0ならピーンを鳴らす→timerを1減らす→Invalidateを実行・・・② としていました。 そのtimerを1減らすタイミングを音を鳴らす前に変えると、画面の数字と音が一致しました。 ①でSetTimerを実行した後約1秒後に②が実行されることになるから、初めの書き方だと ①終了→画面にtimerが4だから表示しない→約1秒経過→②実行開始→timerが4だから音を鳴らさない→timerをを1減...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: こういう遅延は仕方ないのでしょうか?
- 返信数: 2
- 閲覧数: 2044
こういう遅延は仕方ないのでしょうか?
Visual Studio 2008を使ってMFCで30秒の間に4,1,3,2,4という数字の列を何回打つことができるかというプログラムを作っています。 3(ポーン)、2(ポーン)、1(ポーン)、0(ピーン) というような感じでカウントダウンの表示と共にリソースのwaveファイルを鳴らしています。 ですが、なぜか 3(聞こえない)、2(ポーン)、1(ポーン)、0(ポーン)、(ピーン) と1秒遅れて聞こえてきます。 SetTimer(1,1000,NULL); でタイマーを作り、OnTimerで HINSTANCE hInst = AfxGetInstanceHandle(); if(timer...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: CStringやCTimeがうまく使えていない?
- 返信数: 10
- 閲覧数: 5897
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: CStringやCTimeがうまく使えていない?
- 返信数: 10
- 閲覧数: 5897
Re: CStringやCTimeがうまく使えていない?
使い分ける必然がないなら_T()で統一をしましょう。 はい。 今まで文字列関連でビルドエラーになったら「Lつけないとだめか・・・」というスタンスでやってきてしまっていましたが、これからはどちらにせよきちんと_T()を使うことにします。 授業でLを教わらなかったのもこういうことのためなんでしょうね。 日時が表示できないことについてデバッグして調べてみました。 str=cTime.Format(_T("%Y/%m/%d %H:%M:%S")); のときのstrを見てみると、str = ""と表示されました。 どうやらフォーマットした日時を取得できずにいるのかもしれません。 そこで、cTimeにつ...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: しばしば起こるので困っています。
- 返信数: 5
- 閲覧数: 2917
Re: しばしば起こるので困っています。
ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか? が延々と表示されjます。 とありますが、そのビルドエラーの内容は何なのでしょうか? 出力ウィンドウやエラー一覧ウィンドウを見ればエラー内容が書かれているはずです。 もしそのようなウィンドウが見当たらないのであれば、2010だと 表示(V)→出力(O) Alt+2 表示(V)→その他ウィンドウ(E)→エラー一覧(I) Ctrl+\,E でどちらかあるいは両方のウィンドウを出せばエラーを見ることができるはずです。 私は出力ウィンドウよりエラー一覧ウィンドウのほうがエラー内容が見やすいと思います。 書いてあることはどちらも...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ vectorの2次元配列
- 返信数: 2
- 閲覧数: 6214
Re: C++ vectorの2次元配列
std::vector< std::vector<Panel> > panel; という宣言の変数panelにpush_backできるのはstd::vector<Panel>型で、panel にpush_backできるのはPanel型です。 なので、 panel[i].push_back( std::vector< std::vector<Panel> >() ); という書き方は間違っていることになります。 たとえば for(int i=0;i<10;i++){ std::vector<Panel> pv; panel.push_back(p); for(int j=0;j<10;j++)...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: CStringやCTimeがうまく使えていない?
- 返信数: 10
- 閲覧数: 5897
Re: CStringやCTimeがうまく使えていない?
_T()やLを使う理由については知りませんでした。へにっくす さんが書きました:CStringはTCHARを基に構成されているので、Unicode/MBCSで特に分ける必要がないのならば、必ず_T()を使うべきだと思います。
CTime.Formatについても同様です。
最初_T()を習い、そのあとどこかでLを見てから_T()ではなくLを使っていました。
そうだったんですね。へにっくす さんが書きました:ちなみにTextOutは、改行などの文字は認識しません。認識させたいのならば、DrawTextを使用してください。
これから改行付き文字列を描画させたい時はDrawTextを使うことにします。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: CStringやCTimeがうまく使えていない?
- 返信数: 10
- 閲覧数: 5897
Re: CStringやCTimeがうまく使えていない?
CTime.FormatのほうにもLをつけてみましたが、それでも日時は表示されませんでした。みけCAT さんが書きました:混ぜるのは良くないと思います。CTime.Format、str.Format共にこのプログラムではLをつけてみてください。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: CStringやCTimeがうまく使えていない?
- 返信数: 10
- 閲覧数: 5897
Re: CStringやCTimeがうまく使えていない?
"clear:%d\nmiss:%d\n"や"practis.txt"の前にはLがついているのに、"%Y/%m/%d %H:%M:%S"の前にはついていません。 これはこういう書き方で大丈夫なのでしょうか? 参考にしたstr.Formatのサンプルでは_T("")を使っていた、L""を使うことにしました。 CTime.Formatのサンプルではそういうたぐいがなかったので特につけていません。 という理由でしかありません。 CTimeのほうは以前別のプログラムでこのような書き方をしていて、その時は特に問題なく出力ができたので、(たぶん)その書き方で大丈夫だと思っています。 str.Format...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: CStringやCTimeがうまく使えていない?
- 返信数: 10
- 閲覧数: 5897
CStringやCTimeがうまく使えていない?
Visual Studio 2008を使ってMFCで30秒の間に4,1,3,2,4という数字の列を何回打つことができるかというプログラムを作っています。 30秒たった後に何回打つことができたのか(int clear)・何回失敗してしまったのか(int miss)・いつ開始したか(CTime cTime)を表示させるとともに、その結果をテキストファイルに出力させようとしています。 画面に表示させる結果はすべて1つのCString型変数に格納させたものを表示させるようにしています。 ------------------------- clear:クリア回数 miss:失敗回数 %Y/%m/%d %...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: マインスイーパーの上級がうまくいきません。
- 返信数: 14
- 閲覧数: 8067
Re: マインスイーパーの上級がうまくいきません。
ほかの良さそうな方法としては、 1.置きたい数の爆弾をマップの上の方にかためて配置し、残りのますを空欄にする 2.マップのますをシャッフルする 3.ヒントの数字を計算する という方法が考えられます。 マス50×100の爆弾4999―つまり空きが1マスしかない状況でも重いということはなくすんなりウィンドウが出たので問題ないと思いましたが、参考にさせてもらいます。 せっかくc++なんですから、mallocは止めてnewにしましょう。 あとmap自体をクラス化して全メンバ関数において添字範囲外チェックを行った方が良いでしょう。 そうすれば、サイズ変更のための初期化を忘れて落ちるという事態をガードで...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: マインスイーパーの上級がうまくいきません。
- 返信数: 14
- 閲覧数: 8067
Re: マインスイーパーの上級がうまくいきません。
void CマインスイーパーDoc::GameSetting(){ map=(int **)malloc(sizeof(int *)*blocks.x); //2次元配列のメモリをmallocで動的に確保 if(map==NULL){ AfxMessageBox(L"mapデータ領域を確保できませんでした。\nプログラムを終了します。"); exit(1); } data=(int **)malloc(sizeof(int *)*blocks.x); if(data==NULL){ AfxMessageBox(L"dataデータ領域を確保できませんでした。\nプログラムを終了します。"); ...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: マインスイーパーの上級がうまくいきません。
- 返信数: 14
- 閲覧数: 8067
Re: マインスイーパーの上級がうまくいきません。
お使いのPCはクアッドコアですか? だとしたらCPU使用率が25%で固定になっているなら、コアのうち1つが無限ループ状態になっていると 考えればよいかと。 そういう意味があったりするんですね。 これから覚えておきます。 ちなみにコンピュータのプロパティーを見てみると以下のように書いてありました。 プロセッサ:Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz 2.13 Ghz それでバグは本当に治ったのでしょうか? 私には、まだ潜んでいる気がしてなりません。 ※ x,yを大きな数字にだけにしてみるとバグが再現するかもしれません。 偶然発生しない状況で直ったと思い...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: マインスイーパーの上級がうまくいきません。
- 返信数: 14
- 閲覧数: 8067
Re: マインスイーパーの上級がうまくいきません。
usaoさんの言うように配置がどのようになっているのか出力させて調べてみることにしました。 すると、配置に時間がかかる原因が分かりました。 爆弾を配置するときに何もないなら置いていいとしていたため、爆弾でなくヒントの数字が入っているとそこも置けないことにしていました。 そのために、今見てみると94個を置くのにずっと時間がかかり、93個置いてある状況で何もないマスは2つだけ。 480マスの中からその2マスを探すのに時間がかかっているようで。 そもそもその2つが見つけられたとしても置けるのは95個。 こんな調子ではどうやっても99個置けるはずがありません。 そんな状況をしばらく眺めていたところ、W...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: マインスイーパーの上級がうまくいきません。
- 返信数: 14
- 閲覧数: 8067
マインスイーパーの上級がうまくいきません。
この間の質問でウィンドウサイズを変更できるようになり、初級(マス:9×9 爆弾の数:10)だけでなく中級(マス:16×16 爆弾の数:40)もできました。 ですが、上級(マス:16×30 爆弾の数:99)がうまくいきません。 デバッグなしで開始してみてもなかなかウィンドウが出ず、デバッグ開始してどこで詰まっているのか調べてみることにしました。 すると、爆弾の配置部分に時間がかかっているようで、実行を一時停止させてみるとそのあたりで止まります。 そのまま実行させてみるとエラーが出ることもありましたが、今何度か試してみてもエラーにたどりつきません。 エラーの内容は 「マインスイーパー.exeの0x...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC プログラム実行途中でウィンドウサイズを変更したい。
- 返信数: 5
- 閲覧数: 15179
Re: MFC プログラム実行途中でウィンドウサイズを変更したい。
みけCATさんの回答やサイトにもあったSetWindowPosを試してみましたが、それでも挙動は変わりませんでした。 でも、へにっくすさんの回答を読んでなぜうまくいかないのかが分かりました。 このプログラムはMFCのSDIで作っていて、参考にしたサイトは何で作っていてどこに記述しているのかわかりませんが、このプログラムではマインスイーパー.cppのメッセージハンドラのところに書いていました。 初めはthisは省略してもいいだろうと書かず、うまくいかなかったのでthisを書き足してみてもうまくいかずで質問させてもらうことにしたのですが、そのthisが指しているであろうCマインスイーパーViewが...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC プログラム実行途中でウィンドウサイズを変更したい。
- 返信数: 5
- 閲覧数: 15179
MFC プログラム実行途中でウィンドウサイズを変更したい。
マインスイーパーの初級が出来上がったので、中級など別のサイズも作りたいと考えています。 ウィンドウのサイズを取得する にMoveWindow関数を使えばできるとあるので使ってみました。 元のウィンドウのサイズは200×230+枠などのサイズです。 テストでハイスコアダイアログを閉じた後に以下のようにして画面サイズを変更するようにしてみました。 CRect wrect; this->GetWindowRect(&wrect); this->MoveWindow( wrect.left, wrect.top, 400, 460, TRUE ); すると、なぜかウィンドウのサイズは変わらなかったもの...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC タブコントロールのOwner Draw Fixedについて
- 返信数: 13
- 閲覧数: 10482
Re: MFC タブコントロールのOwner Draw Fixedについて
Vista以降の描画スタイルとかも関係ありそうですね。 ここ直すのはかなり知識を必要とするので、知識を増やしてからのほうがよさそうです。 CTalCtrlは使ったことがないのでサンプル出せなくて申し訳ないです。 ※ いつもは私は設定メニューなどでプロパティシートのタブを使っているのですが仕組みが違いすぎて例にならないのです。 プロパティーシートとタブコントロールが全くの別物であるのはどこかのサイトで見ました。 今回いろいろと質問してみて私にはわからないことだらけだったので、今回はOwner Draw Fixedについてはあきらめることにします。 いつか継承のこととかしっかり勉強してから改めて...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC タブコントロールのOwner Draw Fixedについて
- 返信数: 13
- 閲覧数: 10482
Re: MFC タブコントロールのOwner Draw Fixedについて
なるほどMFC側の基礎クラスのDrawItem()でアサートしていたんですね。 詳しくないと分からないと思いますが、MFCは基本的に継承してクラスを利用しています。 なので、いつの間にかオーバーライドを使っている所が多数あります。 たとえばMFCで自動で作られるC~ViewクラスがCViewクラスを継承して作られているなどというのは知っていました。 それと適当に継承しても上手く行かなって当たり前です。 なんだろう、C++の勉強も必要ですが、各クラスの継承関係も把握しないと多重継承なんてしてはいけません。 「MFC 階層図」 http://msdn.microsoft.com/ja-jp/li...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC タブコントロールのOwner Draw Fixedについて
- 返信数: 13
- 閲覧数: 10482
Re: MFC タブコントロールのOwner Draw Fixedについて
>ASSERT(FALSE); 本当にあなたのコードにこれが書かれているのであれば, Debug実行した際には,ここに到達した時点で Debug Assertion Failed と言われるのは当たり前です.そうしろと書いたのだから. >ASSERT(FALSE); これはウィザードが自動生成したコードである可能性が高いですね。自動生成時のコメントが有るはずです。 オーナードローを選択したのだから自分で描画コードを書くはずだから、書いてないのは忘れているミスって解釈なのでしょう。 【補足】 // must override for self draw tab controls ってウィザード...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC タブコントロールのOwner Draw Fixedについて
- 返信数: 13
- 閲覧数: 10482
Re: MFC タブコントロールのOwner Draw Fixedについて
その行にはどういう命令が有るんでしょうか? void CTabCtrl::DrawItem(LPDRAWITEMSTRUCT) { ASSERT(FALSE); // must override for self draw tab controls } のASSERT部分です。 ということは、タブコントロールの描画部分が原因なのでしょうか? これだけの情報だとなんとも言えないんですが、試しに新規でダイアログを作ってタブコントロールを置いてOwner Draw Fixedをtrueとして見ましたが問題は発生しませんでした。 【補足】 トラブルが合った場合、問題を切り分けるために私はよく新規でプ...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC タブコントロールのOwner Draw Fixedについて
- 返信数: 13
- 閲覧数: 10482
Re: MFC タブコントロールのOwner Draw Fixedについて
画像が小さすぎて見えませんので、お願いします。 確かに画像小さいですね・・・すいません。 画像はフォーラムのアルバムにアップロードしたものです。 「File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winctrl2.cpp Line: 1219」 などと書かれていました。 Owner Draw FixedはtrueはOSやMFCに任せずに自分で親ウィンドウが描画を担当するという意味です。 デザインが気に入られたみたいですが、あれは何もしていない状態ですね。 そうだったんですか。 VBAのユーザフォームにあるタブみたいでいいと思いました。 ただ、O...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC タブコントロールのOwner Draw Fixedについて
- 返信数: 13
- 閲覧数: 10482
MFC タブコントロールのOwner Draw Fixedについて
Windows7 Visual Studio 2008で、MFCのSDIでダイアログを作成しています。 MFC編 - タブコントロールの基本1 を参考にタブコントロールを使っています。 表示は問題なくでき、タブコントロールのプロパティーの表示部分をいじってどうなるのか試してみました。 Owner Draw Fixedをtureにしたときのデザインがいいと思い、そのまま実行させてみました。 [album]698[/album] すると、そのダイアログを表示させようとするとDebug Assertion Faildが出てしまいました。 [album]700[/album] ダイアログのほうを見てみ...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC CStringの中身をファイルに書き出したいのですが。
- 返信数: 5
- 閲覧数: 12210
Re: MFC CStringの中身をファイルに書き出したいのですが。
コードを見るにWCHARの文字列を使用している(文字列にLを使用している)ようですが、grade、numbersの定義がchar[]なのはおかしいと思いませんか。 それもダメですか? やっぱり今回ファイルからの読み込みをfscanfでやっていることもよくないんでしょうね・・・ 初めにfscanfでgrade・numbers・recordsというcharの配列に読み込んでいます。 gradeは書き換えないのでそのまま、numbersは書き変わりますが数値をいじるだけなので分解していじってくっつけるで型はそのまま、recordsだけはクリアーしたときにタイムを記録させるときにCTimeのForm...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC CStringの中身をファイルに書き出したいのですが。
- 返信数: 5
- 閲覧数: 12210
Re: MFC CStringの中身をファイルに書き出したいのですが。
char[]をそのままCStringにキャストしようとしているのがそもそもの間違い。 間違いなんですね。 今はじめて知りました。 デバッグでCStringの中身を見てみると正しい内容が入っていたので、問題ないと思っていました。 紹介してもらったページを参考に以下のように変えてみました。 CStdioFile fout(L"time.score",CFile::modeCreate | CFile::modeWrite ); for(int n=0;n<3;n++){ CString cg(grade[n]); cg+=L"\n"; fout.Write(cg.GetBuffer(),cg.G...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC CStringの中身をファイルに書き出したいのですが。
- 返信数: 5
- 閲覧数: 12210
MFC CStringの中身をファイルに書き出したいのですが。
Windows7でVisual Studio 2008を使ってMFCプログラミングをしています。 マインスイーパーのハイスコアを記録させたいと思い、CString型を含むデータをファイルに書き込みたいと思っています。 データは以下のようなものです。 [hr]初級 プレイ回数0 クリア回数0 クリア率0% 連勝数0 連敗数0 現在0 1. 999 名無し 0000/00/00 00:00:00 2. 999 名無し 0000/00/00 00:00:00 3. 999 名無し 0000/00/00 00:00:00 4. 999 名無し 0000/00/00 00:00:00 5. 999 名無...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: なぜか自作プログラムの画面が真っ白になりました。
- 返信数: 5
- 閲覧数: 3313
Re: なぜか自作プログラムの画面が真っ白になりました。
"test.txt"というファイルが使いまわされているのが原因ではないでしょうか? CマインスイーパーDocクラスのLoadSettingという関数で、設定を読み出していますが、同クラスのSaveRecordという関数内で全く関係なさそうな値を、"text.txt"ファイルへ書き出しています。 そして、次の起動時にLoadSettingが呼び出された際に読み出しに失敗して、変数の初期化に失敗しています。 text.txtへの書き出し部分をコメントアウトしてみたら画面が出るようになりました。 たぶんgame.settingやtime.scoreを使う部分をtext.txtに変えていたみたいで・...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: なぜか自作プログラムの画面が真っ白になりました。
- 返信数: 5
- 閲覧数: 3313
Re: なぜか自作プログラムの画面が真っ白になりました。
ダウンロードに失敗するようで、サイズが0バイトになります。 他の場所にアップロードできますか? 少なくともソリューションを作りなおすのは何の解決にも成っていないと思います。 根っこのバグを何とかしないとダメなんでしょうが、コードを落とせないみたいなのでお待ちします。 MFCですよね? 対応出来る人は限られるかもしれません。 プロジェクトファイル、ソリューション、リソース、ソース、ヘッダを残して他を削るとファイルはコンパクトになりますよ。 ReleaseやらDebugやipchの名前のフォルダは不要です。 Releaseは作っていません。 Debugを消してみけCATさんが教えてくれたアップロ...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: なぜか自作プログラムの画面が真っ白になりました。
- 返信数: 5
- 閲覧数: 3313
なぜか自作プログラムの画面が真っ白になりました。
以前MFCでマインスイーパーを作ろうとしていました。 プレイはもうできて、ハイスコア登録もさせようとしていたころ、あまり時間が取れなくなり作れなくなりました。 で、最近時間ができたのでいざ続きを作ろうと思ったのですが、実行させてみるとタイトルバーやメニューバー以外は真っ白でした。 リビルドしてみてもPCをシャットダウンさせてみてもダメでした。 そこで、ソリューションを作りなおしてソースとリソースをコピペさせてみたところ、きちんと画面が表示されるようになりました。 そのままプレイしてみると、まだバグが残っていたのでハイスコア登録の名前登録部分でダイアログが何度も出続けてしまいました。 そのうち動...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: Doc-Viewアーキテクチャの書き方について質問です。
- 返信数: 10
- 閲覧数: 3873
Re: Doc-Viewアーキテクチャの書き方について質問です。
はっきりどの値でエラーになるのかを調べるべく途中結果を出力するようにし、バックアップを取っていたうまくいく方でも同じようにしようと思ったときに、うまくいく方でもエラーが出るようなりました。 なぜだろうと元に戻し比較してみたら原因がわかりました。 //分ける前のソースにあった条件文 if((x2>-1 && x2<blocks.x) && (y2>-1 && y2<blocks.y) && map[x2][y2]!=9){ //すべてx2,y2になっていた //分けた後のソースにあった条件文 if((x2>-1 && x<blocks.x) && (y2>-1 && y<blocks.y) &&...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: Doc-Viewアーキテクチャの書き方について質問です。
- 返信数: 10
- 閲覧数: 3873
Re: Doc-Viewアーキテクチャの書き方について質問です。
Releaseでビルドしてみても、ビルドエラーにはなりませんでした。softya(ソフト屋) さんが書きました:リリースビルドしていたらエラーになるかも知れませんね。
そのままでバックしてみても、状況は変わりませんでした。
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: Doc-Viewアーキテクチャの書き方について質問です。
- 返信数: 10
- 閲覧数: 3873
Re: Doc-Viewアーキテクチャの書き方について質問です。
if((x2>-1 && x<blocks.x) && (y2>-1 && y<blocks.y) && map[x2][y2]!=9){ という問題の条件文についてもう少し調べてみました。 すると、x,y,x2,y2についてウォッチ式で「CXX0017: エラーです: シンボル "x" が見つかりません」というように言われました。 とりあえず原因はmapではなさそうです。 でも、なぜこのように言われるのでしょうか? x,yはその前にfor文で使ったりしていましたが、そのx,yはfor文内で定義したものですし、それはそのforの中だけのはずですよね? そのあと別にきちんと定義していますし、あ...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: Doc-Viewアーキテクチャの書き方について質問です。
- 返信数: 10
- 閲覧数: 3873
Re: Doc-Viewアーキテクチャの書き方について質問です。
if((x2>-1 && x2<blocks.x) && (y2>-1 && y2<blocks.y) && map[x2][y2]!=9){ map[x2][y2]++; } であるとき、x=0or8でx2=-1or9となっても(y,y2も同様)mapの比較をする前でfalseになって、そのあとの比較をやめるのではないのですか? 私は少なくともMFCではその考えてやっていますし、Docを使わずにViewのみでやっていたときでも爆弾が端(x or y=0or8)にあってもエラーにはなったことはありません。 って、そういう話ではなかったでしょうか? あ。 mallocに失敗しているように見えた...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: Doc-Viewアーキテクチャの書き方について質問です。
- 返信数: 10
- 閲覧数: 3873
Re: Doc-Viewアーキテクチャの書き方について質問です。
画面内をクリックしたらタイマー作動にしているので、ViewのOnLButtonDownなどでSetTimer(1,1000,NULL);をしているのですが、そういう書き方はよくなかったということでしょうか?softya(ソフト屋) さんが書きました:たぶん、Viewが先に生成されるのでマズイんじゃないかと思うわけです。
ViewのOnInitialUpdateでタイマーを設定してみては?
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: Doc-Viewアーキテクチャの書き方について質問です。
- 返信数: 10
- 閲覧数: 3873
Doc-Viewアーキテクチャの書き方について質問です。
MFC ウィンドウを閉じてもプロセスに残ってしまう。 をきっかけに、今作っているマインスイーパーをDoc-Viewアーキテクチャにのっとって書き換えようとしています。 (書き換える前の状況はバックアップ済みです。) Doc-Viewアーキテクチャって、Viewは描画関係の記述中心で、その他データ処理などはDocに記述するってことですよね? 元のソースは上記トピックにあるのでここでは提示しないことにしますが、マインスイーパーではだいたい以下のような感じでしょうか? ViewはOnDrawでの描画処理と各種イベントハンドラー、その他必要な関数の呼び出しと再描画命令の記述する。 Docはマスの状況...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
だからうまくいかなかったんですね。softya(ソフト屋) さんが書きました:openに失敗したistreamはopen出来ないようですね。
プログラムも作っていただきありがとうございました。
6~13のように関数やifなどでなくても{}で囲うという書き方もできるんですね。
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
と思ってあとからofsでファイルへ書き込んだ後にofs.close();を追記したのですが、それでもうまくいきませんでした。softya(ソフト屋) さんが書きました:ofsに関してはclose()していないので出来ないのでは?
そのあとのifsで読み込んでみたとき、うまくいかずに変数にはでたらめ(?)なマイナス値が入っています。
既にファイルがある時は正しい値が入っているのですが。
最初にできなかったときにしておかないといけないのかな?と思って書いていました。softya(ソフト屋) さんが書きました:それとopen出来ないファイルのifs.close();は不要です。
fopen同様開けなかったらいらないんですね。
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
ファイルがない時はifs==NULLの条件に引っかかって書き込みのほうに行ったのですが、そういう書き方はよくなかったんですね。
きちんとis_openのほうを使うようにします。
でも、問題の書きこんでから読み込みで開き直すというのは、どのようにすればうまくいくのでしょうか?
閉じてから開けばうまくいくと思っていたのですが・・・
きちんとis_openのほうを使うようにします。
でも、問題の書きこんでから読み込みで開き直すというのは、どのようにすればうまくいくのでしょうか?
閉じてから開けばうまくいくと思っていたのですが・・・
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
もともとは全角スペースでつないでいたのでどうすればよいかと思っていましたが、半角スペースでつなげばsoftya(ソフト屋)さんの方法でできることを以下のプログラムで確認できました。 ありがとうございました。 (今回の本題ではないのでスポイラーで表示しています。) #include <fstream> #include <string> #include <iostream> int main() { std::ofstream ofs( "test.txt" ); ofs <<1<<" "<<9<<" "<<9<<" "<<10<<std::endl<<1<<" "<<1<<" "<<0<< ...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
設定用のファイルには、
1 9 9 10
1 1 0
という2行7つのデータがあります。
この2行目の3つの数値をboolに―ifstreamでどのようにわけて取得できるのでしょうか?
boolに限らず、ifstreamを使って1行から複数のデータを取り出す方法が分かりません。
seekgかreadsomeというのを使えばできるのでしょうか?
1 9 9 10
1 1 0
という2行7つのデータがあります。
この2行目の3つの数値をboolに―ifstreamでどのようにわけて取得できるのでしょうか?
boolに限らず、ifstreamを使って1行から複数のデータを取り出す方法が分かりません。
seekgかreadsomeというのを使えばできるのでしょうか?
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
タイム記録部分であるSaveRecordの呼び出しはそのままに、中身をすべてコメントアウトして機能しないようにしてみました。 それでもウィンドウを閉じた後もプロセスにマインスイーパー.exeが残ったままになっていました。 実は、プロセスに残ったままになったころに作ったものにLoadSetting関数というのもありした。 そこのファイル読み込み部分を以下のように変更して読み込みをしないで動くようにしてみました。 /*FILE *fp; fp=fopen("game.setting","r"); if(fp==NULL){ fp=fopen("game.setting","w"); fprintf...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
プロジェクト名がクラス名になっているcppとは、マインスイーパー.cppということでしょうか?softya(ソフト屋) さんが書きました:ExitInstance()でブレークしてみてください。プロジェクト名がクラス名になっているcppにあると思います。
検索対象ソリューション全体でExitInstance()を検索してみましたが、どこにも見つかりませんでした。
[album]592[/album]
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
スレッド処理とか同期待ちとか起こしそうな処理は提示されたソースコード以外にありますか? 私が書き換えたコードのほとんどはそのcppです。 あとはそのhにcppで使っている関数や変数の宣言を書いて、MainFrameでウィンドウサイズを指定して、メニューを改造して、さらにリソースでまだどこでも呼び出していないダイアログを2つ作っているだけです。 それとExitInstance()にたどり着いているかも確認してみてください。 呼び出し履歴を見てみましたが、ExitInstance()は見当たりませんでした。 mfc90ud.dll!CWnd::DestroyWindow()などはありましたが。
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
Re: MFC ウィンドウを閉じてもプロセスに残ってしまう。
どこかでループしているならデバッガで中断すれば調べられると思います。 デバッグ開始でプログラムを実行し、プレイせずにウィンドウを閉じてみました。 事前にマインスイーパーViewのデストラクタの終わりにブレークポイントを置いてみました。 そこへはすんなり行きましたが、そこからがどこかで何かの処理をしているのかデバッグが終わる気配がなく、手動で中断してみました。 すると、画像にあるように「すべてのスレッドが中止されました。」と言われ、wincore.cppの439行目に矢印がありました。 [album]591[/album] wincore.cppの439行目周辺 case WM_INITDIA...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC ウィンドウを閉じてもプロセスに残ってしまう。
- 返信数: 19
- 閲覧数: 8625
MFC ウィンドウを閉じてもプロセスに残ってしまう。
MFCでマインスイーパー を作っています。 タイム記録機能を作る前は1度もなかったことなのですが、タイム記録機能を実装しているうちにプログラムのウィンドウを閉じてもプロセスにプログラムが残ったままになってしまうようになりました。 ということは、原因はタイム記録機能実装部分にあり、ウィンドウを閉じても見えてないところで何かの処理が終了できていないということですよね? でも、プログラムを起動してプレイせずに閉じただけでもプロセスにプログラムが残ったままになってしまうし、今の私では何が原因かわかっていません。 作りかけのマインスイーパーView.cppを、長いのでスポイラーテキストで載せてみます。...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC 日時をchar*に入れたいのですが。
- 返信数: 4
- 閲覧数: 4006
Re: MFC 日時をchar*に入れたいのですが。
そういうことだったんですね。softya(ソフト屋) さんが書きました:VC++2005以前とVC++2005以降ではデフォルトの文字コードが違うとか、VC++7.0(Visual C++.NET 2002)でMFC/ATLが統合したとか色々違いがあります。
MFC関係のサイトでは大ヒットしたVC++6.0前提で書かれた古いものもありますので見るときは注意してくださいね。
これからはそういうことも注意することにします。
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC 日時をchar*に入れたいのですが。
- 返信数: 4
- 閲覧数: 4006
Re: MFC 日時をchar*に入れたいのですが。
CString型からのchar型へのコピーはUNICODEの場合に大変ややこしいことになります。 なので、TCHAR型へコピーするなどTCHAR系の処理で全て固めないといけません。 strcpyは_tcscpy、charはTCHARなどなどatoiも_tstoiと言う違う関数になります。 そうすれば、(LPCTSTR)にキャストするだけでコピーできるはずです。 UNICODEとマルチバイトの文字コードの違いは理解しておかないと後々苦労すると思いますので、この機会に。 CStringとcharの相互変換 などを見てみると普通にstrcmpで行けるみたいに書いてありましたが、それらの環境はUNI...
- 12年前
- フォーラム: C言語何でも質問掲示板
- トピック: MFC 日時をchar*に入れたいのですが。
- 返信数: 4
- 閲覧数: 4006
MFC 日時をchar*に入れたいのですが。
MFCでマインスイーパー を作っていて、今クリアタイムの記録部分を作っています。 日時をCTimeで取得し、クリアタイムと合わせて以下のようなフォーマットで記録しています。 999 0000/00/00 00:00:00 その記録は10個記録できるようにしていて、今それをランキング形式で記録させたいと思っています。 考えとしては、記録されたクリアタイムを抜き出し、今クリアしたタイムも含めて早い順にソートして、先頭に順位を付けて書きだそうと思っています。 1. 999 0000/00/00 00:00:00 ランキング形式にする前は、CTimeのFormatがCStringを返すことからRea...