- 1 名前:デフォルトの名無しさん [2007/01/10(水) 00:00:39 ]
- 1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14
Visual C++入門者・初心者からの質問を、 お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう。 ・できるだけ具体的に。 質問の仕方については次のページが大変参考になります。 www.hyuki.com/writing/techask.html myu.daa.jp/osiete/ ■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか) ・ネタや煽りは軽く流しましょう。 過去スレ、関連スレなどは>>2-5。
- 47 名前:7 [2007/01/11(木) 10:26:21 ]
- ワーカースレッドだと複雑な処理は難しいでしょう
JAVAなら割り込みメソッドがちゃんと用意されてるみたいです www.javaworld.jp/technology_and_programming/-/10795-5.html
- 48 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 10:34:04 ]
- InitInstance内で済まそうとしてるってことは単純な処理としか思えんが・・・
- 49 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 10:37:28 ]
- >>47 の内容みたけど、その程度ならEvent使えば同じことできるじゃん
- 50 名前:7 [2007/01/11(木) 10:38:56 ]
- 今のところUIスレッドから派生したクラスの中で作った
メンバ関数をInitInstance内の中で呼び出すしかないと思ってやってるんですが 初心者なので他になにか良い方法があれば教えてください
- 51 名前:7 [2007/01/11(木) 10:43:23 ]
- Eventは使ったことがないのですが調べてみます
参考ページがあれば教えてもらえたらうれしいです
- 52 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 10:49:13 ]
- つまり、ユーザーインターフェースは入力も出力も必要ない
割り込みは必要ってことでいいのかな
- 53 名前:7 [2007/01/11(木) 10:53:17 ]
- はい
子スレッドの状態を見るのはメイン側にメッセージを飛ばして解決しています
- 54 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 11:16:02 ]
- 単純な処理を複雑にやりたいということか
- 55 名前:7 [2007/01/11(木) 11:19:17 ]
- クラスで実装しないと厳しいので単純でもないです
- 56 名前:7 [2007/01/11(木) 11:23:34 ]
- 初期化はコンストラクタ内でやっています
InitInstanceかRunいがいに処理を置ける場所がないように見えます 処理はし続けているので単純と言われれば単純ですね メッセージを待って処理をするタイプではないです
- 57 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 11:38:24 ]
- Javaの例も割り込みは自分でチェックするか例外が発生するしかないようだし
イベントの発生をチェックしては。 Sleepが絡むときはSleepのスレッド作ってそこからイベント、かなあ 最近のMFC知らんけどもっといい方法あるのかな
- 58 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 11:51:18 ]
- .NETのSystem.Threading.Threadを派生する感じで実装するといい。
これでスレッドとクラスが一対一になって扱いやすくなる、といいな。 MFC使ってるみたいだから、 メンバにCWinThreadのポインタと中断用のCEventを用意して、 StartでAfxBeginThreadでタスクメンバ関数を起動、 ただし、CREATE_SUSPENDEDで起動 - CWinThread.m_bAutoDelete=FALSE - CWinThread.ResumeThread() の手順を踏んでおく。 タスクメンバ関数は中断用CEventを適時監視しつつ処理を実行する。 AbortではCEvent.SetEvent()。 JoinはWaitForSingleObjectをINFINITEで、 IsAliveはWaitForSingleObjectをウェイト0で呼び出す。 ちなみに、CWinThreadポインタの破棄は、 もう一度スレッドを起動しなおす時か、デストラクタの時だけにした方が色々楽。 中断するときは、Abort->Join呼び出しでスレッド停止待ち。 自然に完了を待つには、SetTimerのハンドラでIsAlive見て確認、ってのが一番楽。
- 59 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 12:20:44 ]
- 何この馬鹿?
教えるだけ無駄だろ > 25 名前:7[] 投稿日:2007/01/10(水) 18:12:42 > スレッドメッセージループはRunの中なのですか? > 子スレッドはInitInstance()内で処理をし続けているので > メッセージループがRunにあるとすれば回っていないと思います > > 26 名前:7[] 投稿日:2007/01/10(水) 18:23:30 > InitInstanceの処理中に他の処理を割り込ませることは無理なのですか?
- 60 名前:7 [2007/01/11(木) 12:22:41 ]
- MFCで.NETのクラスを派生ですか
どうやればできるのかわかりません クラスの追加ウィザードからできるのでしょうか? 環境はVC++7.0です
- 61 名前:7 [2007/01/11(木) 12:24:50 ]
- >>59
すいません初心者なもので あとそれは引用だけでまったく答えになっていませんよね
- 62 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 12:30:13 ]
- 馬鹿を晒しものにしてやってるだけだから気にしなくていいよ
- 63 名前:7 [2007/01/11(木) 12:32:43 ]
- >>61
そうですか初心者を教えるスレで初心者相手に 馬鹿にして猿山大将気取りのなにが楽しいのか わかりませんが気にしないことにします
- 64 名前:7 [2007/01/11(木) 12:33:33 ]
- >>62さんでした^^;
- 65 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 12:40:12 ]
- 初心者ならともかく馬鹿に教えることは不可能
- 66 名前:7 [2007/01/11(木) 12:52:20 ]
- >>65
>>25>>26の時点では InitInstanceの処理中に割り込みをするにはメッセージを使うのかもしれないと 思っていたのでRun関数は通っていないのでメッセージ待ちは他の場所がるのかと 勘違いしていました この時点での初心者と馬鹿の違いを教えてもらいたいところですが それはまたスレ違いだと思いますので 馬鹿ですいませんがVC++を教えてもらえないでしょうか?^^;
- 67 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 12:56:56 ]
- 割り込みって書いてる時点で、Windowsアプリの知識が根本的に足りないと感じた。
- 68 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 12:57:11 ]
- 便乗質問ですが
ワーカースレッドでは実現困難で、UIスレッドを使うべきケースが思い浮かびません。 いくつかサンプルを拾って見てみたのですが、サンプルを書くために必然性なしにUIスレッドに しているとしか思えないようなモノばかりでした。 CWinApp以外ではどういう時に使ってます?
- 69 名前:デフォルトの名無しさん [2007/01/11(木) 12:57:52 ]
- 一つ聞かせて頂きたいんですけど、C++はCの上位互換ですけど
C++が出来てCが出来ない人って居るんでしょうか?
- 70 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 13:02:29 ]
- そうでもない
- 71 名前:7 [2007/01/11(木) 13:02:53 ]
- >>67
子スレッドの処理中にメイン側の合図で他の処理をすることが目的なので 割り込みと表現したのですが^^;
- 72 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 13:04:48 ]
- >>69
STLとboostが使えないと何も出来ない、という人はいるかも。
- 73 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 13:08:34 ]
- >>71
Windowsではそういうことはできない。 メッセージでも、明示的/暗黙的にメッセージを処理できる状態にしてやらないと処理できない。
- 74 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 13:13:38 ]
- スレッドと言いながら関数に割り込みかけてる。
- 75 名前:7 [2007/01/11(木) 13:19:41 ]
- >>73
できないとなるとフラグメンバ変数かシグナル状態を変えて ソース内で定期的にif文を記述しでチェックするしかないのでしょうか そうなると>>58さんの方法がまだ理解できてないんですが 同じような方法ということでしょうか?
- 76 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 13:22:22 ]
- 関数の中のループに割り込みかけたいらしい。
- 77 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 13:24:58 ]
- winnyはC++で書かれていますが、winMXもC++で書かれているのですか?
- 78 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 13:37:41 ]
- >>75
フラグ変数がCEventオブジェクトになっただけ
- 79 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 13:45:15 ]
- >>75
普通、重たい処理はループしてるから遅いわけで、ループ一回りに掛かる時間は ごくわずか。そのループ中に1行eventの状態チェック入れるだけ。 ループしてないのに重いとか、ループ一回りが遅いというなら75の言うとおりになるかも。
- 80 名前:77 mailto:age [2007/01/11(木) 16:10:41 ]
- 誰か知りませんでしょうか?
- 81 名前:デフォルトの名無しさん [2007/01/11(木) 16:34:28 ]
- VisualStudio2003を使用してMFCでモードレスダイアログを実装しようとしています。
support.microsoft.com/kb/403848/ja こちらのページを見て、そのとおりに記述しているのですが、コンストラクタ内の Create文を通ってもダイアログが表示されません。OSはWinXPです。 問題がわかる方、またはその他の良い方法を知っている方がいましたらよろしくお願いします。
- 82 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 16:37:50 ]
- >>81
ダイアログのID はIDDですか?
- 83 名前:82 mailto:sage [2007/01/11(木) 16:49:15 ]
- >>81
ごめん、ちょっとやってみた。 ダイアログのプロパティでVisible をtrueにするか new したあとで ShowWindow(SW_NORMAL) 呼んでみな
- 84 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 18:47:13 ]
- MFC使うなら2005Expressじゃダメですか?VC8.0あたり買ってこないとダメ?
後これといった質問はないのですが、 此処での初心者ってのはどこまでが初心者なんですか?
- 85 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 19:24:55 ]
- >>81
特に問題なくダイアログ表示できた
- 86 名前:81 mailto:sage [2007/01/11(木) 19:29:46 ]
- >>82
IDDでした また、Visibleにしたところ、ちゃんと表示されるようになりました。 (今までのは作成だけされて見えていなかったということでしょうか? タスクを見ているとメモリ使用量だけはCreateした分だけ増えていたので・・・) ありがとうございました!
- 87 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 21:30:29 ]
- まあそうみたいだな。
モードレスダイアログは作りっぱなしでSHOW、HIDEするケースが多いから ShowWindow()も試しておいたほうがいいと思うよ。
- 88 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 22:06:09 ]
- プログラム関連ではないのですが、質問です。
resource.hのファイル名を変更してTestResource.hとしました。 以降このファイルにリソースのdefine値を連動させておくため、 リソースファイルのincludeをresource.hからTestResource.hに変更した まではよかったのですが、リソース変更後に保存するとなぜかinclude 先がresource.hに戻ってしまいます。これはどうしてなんでしょうか? 解決法を知っている方いましたらお教えください。お願いします。
- 89 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 22:10:17 ]
- 変えるとなんかいいことあるの?
- 90 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 22:13:38 ]
- >>88
リソースビューで、xx.rcを右クリックしてインクルードファイルの設定替えればいい つーか、ヘルプに書いてあると思うが
- 91 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 22:25:06 ]
- >>84
Express Edition には MFC はついてこないので パッケージ版を購入してくるべし。
- 92 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 22:34:15 ]
- >90
できました、ありがとうございます。
- 93 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 22:36:49 ]
- >>91本当ですか。。。。所持金ヤバイのにorz2万とかムリス
アカデミはなんか無理そうだし・・・
- 94 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 22:55:38 ]
- >7にはこのコードをあげる。よい子は使っちゃダメだぞ。
typedef void (*throwFuncType)(); void dothrow_func(){ throw 300;} DWORD CALLBACK threadproc( void * ){ printf("BeginThread\n"); int i=0; try{ while(1) { i++; } }catch( int ){ printf("\n%d: catched exception.\n",i); } return 0; } int main(){ throwFuncType dothrow_ptr = dothrow_func; DWORD id; HANDLE hThread = CreateThread(NULL,0,threadproc,NULL,0,&id); char t[255]; fgets(t,200,stdin); CONTEXT context; context.ContextFlags = CONTEXT_CONTROL; SuspendThread( hThread); GetThreadContext(hThread, &context); context.Eip = (DWORD)dothrow_ptr; SetThreadContext(hThread, &context); ResumeThread( hThread); WaitForSingleObject(hThread,INFINITE); }
- 95 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:10:33 ]
- >>93
アカデミックはスタンダード相当でMFCもきちんとあるはずだぞ。
- 96 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:28:20 ]
- >>94
こんな手があったのか。面白いけどちょっと怖いな。
- 97 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:34:16 ]
- >>95
学生じゃ無くて無理そうなのでは
- 98 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 13:33:06 ]
- MFCのデータベースプログラミングをしようとして
ODBCを使ってみたんですがテーブルごとにクラスが作られてしまいますが いろいろなテーブルを取得したい場合はどうすればいいのでしょうか?
- 99 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 15:25:55 ]
- >>98
自分で直接CDatabaseやらCRecordsetやらをいじくればいいが、 今時ならせめてADOかOLEDBを使うのを薦める。
- 100 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:16:14 ]
- 環境 VC++7.0 Windows2000
保存と取り出しができているので成功しているはずなんですが INIファイルで保存と取り出しはできたのですが保存先がわかりません プロジェクト名.INIで保存されてるはずのファイルがみつかりません ファイルの検索でもひっかかりません Windows2000だとどこか特別な場所に保存されるのでしょうか? m_pszProfileNameもデバッグ時に確かめましたがプロジェクト名でした ソース m_iData1 = 20; m_sString1 = "mojiretsu"; …… // INIファイルに情報を保存する CWinApp* pApp = AfxGetApp(); pApp->WriteProfileInt("ProgramData", "IntData1", m_iData1); pApp->WriteProfileString("ProgramData", "String1", m_sString1); // INIファイルから情報を取り込む CWinApp* pApp = AfxGetApp(); m_iData = pApp->GetProfileInt("ProgramData", "IntData1", 0); m_sString1 = pApp->GetProfileString("ProgramData", "String1", NULL);
- 101 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:23:00 ]
- プロジェクト名.INI に保存されるというのはどこに書いてあった?
まあ2000ならwin.ini でもなくてレジストリにマッピングされてると思うけど。
- 102 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:23:02 ]
- レジストリ?
- 103 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:25:26 ]
- >>101
ここです www.alpha-net.ne.jp/users2/uk413/vc/VCT_INI.html
- 104 名前:100 mailto:sage [2007/01/12(金) 16:34:41 ]
- レジストリエディタから検索かけたら
プロジェクト名.iniがありましたが これ直接編集できるんですか?
- 105 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:35:22 ]
- ええと、VC++の7.0って.NETの年数無しバージョンだっけ?
ちょっとMFCのバージョンわからんが、 InitInstance() に、SetRegistryKey(_T("アプリのキー")) というのが無いかな? そこで指定した文字列をキーに、 \\HKEY_CURRENT_USER\Software\アプリのキー\ProgramData\IntData1 に データが入って無いか? レジストリはスタートメニューからファイル名を指定して実行を選んで regedit と入れれば レジストリエディタが起動する。
- 106 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:42:40 ]
- もう一つ前のバージョンだったか。
NTの時から、INIファイルをレジストリにマッピングする機能があって INIファイルに書いてもレジストリに書き込まれる仕組みがOSにあった。 その場合は HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping 以下にできる MFCはそれを使わずにレジストリに切り替える機能もある。 SetRegistryKey()がそれ 任意のファイルにしたければ、APIのWritePrivateProfile・・・ を使えばいいかな。
- 107 名前:100 mailto:sage [2007/01/12(金) 16:48:02 ]
- >>105
.NETの年数無しバージョンです ありがとうございますありました これはレジストリエディタを使わないと編集できないということなのでしょうか?
- 108 名前:100 mailto:sage [2007/01/12(金) 16:55:21 ]
- INIファイルをレジストリにマッピングする機能ですか・・・
INIファイルを普通に編集したいならWritePrivateProfileで保存しなければ いけないんですね ということはそれも指定してINIファイルを読み込みにいかないといけないのか
- 109 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:58:28 ]
- どうしてもファイルにしたければ、SetRegistryKey()を呼ばないで
Private の付いたAPIを呼ぶしかないかなあ、、、 でもこれ16bitWinの互換性に残ってるだけだしな。
- 110 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 17:11:02 ]
- MFCのiniのパスはm_pszProfileName
- 111 名前:100 mailto:sage [2007/01/12(金) 17:18:34 ]
- これだとレジストリでやったほうが簡単そうですね
ありがとうございました
- 112 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 17:34:12 ]
- MFCはレジストリもiniもどっちも同じ方法だし
レジストリとiniの切り替えも簡単
- 113 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 17:49:50 ]
- iniの場合フルパスを意識しないとならんけどな
- 114 名前:100 mailto:sage [2007/01/13(土) 14:32:27 ]
- m_pszProfileNameのパス変えて
他のにも書き込んだり読み込んだりできました でもパス名変えるとアプリケーション終了時にOSがエラーだしてきます
- 115 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 14:46:11 ]
- MSDN読め
- 116 名前:100 mailto:sage [2007/01/13(土) 14:57:46 ]
- わかりました
- 117 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 15:44:35 ]
- VC++.NET Standard (VC++7.0)使用です
mciコマンドで音を鳴らしていたのですが、音を鳴らす時に1秒くらい固まるのでマルチスレッドにしようとAfxBeginThreadにそこらへんの処理をぶち込みました。 するとmciSendCommandにて303エラーが発生。 おそらくスレッドから呼び出したから安全性がどうのこうのといった内容だと思うのですが これを回避するにはどのようにすれば良いのでしょうか?
- 118 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 15:56:12 ]
- シングルスレッドだってスレッドから呼び出してることに変わりは無いけどな
303って、MCIERR_ILLEGAL_FOR_AUTO_OPEN? メインスレッドで自動オープンしたデバイスを別スレッドから触ろうとした?
- 119 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 16:38:36 ]
- エラーメッセージは「指定されたコマンドを自動的に開かれたデバイスで実行することはできません」です
メインスレッドで自動オープンしたうんぬんというのが何を指しているのかは分かりませんが 少なくともmciなんたらの命令は作成したマルチスレッド内でしか使っていません どうやらwindowメッセージ(MM_MCINOTIFY)の受け取りを親スレッドでしているのが原因らしいです AfxBeginThreadの中でメッセージ(MM_MCINOTIFY)の受信ってできるのでしょうか? それとも別の方法でスレッドを作るのかな?CWinThreadとか使った事が無いけど可能ですか?
- 120 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 16:56:57 ]
- すみません捕捉しておきます
mop.dwCallback = (DWORD)pDoc->GetSafeHwnd(); mop.lpstrDeviceType=DeviceType[pDoc->BGMNum]; mop.lpstrElementName=midiFile; mciErr = mciSendCommand(NULL,MCI_OPEN, MCI_NOTIFY | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD_PTR)&mop); mpp.dwCallback = (DWORD)pDoc->GetSafeHwnd(); スレッドの中を抜粋するとこんな感じです mci関数で曲を止める時は親ウィンドウでやっていますが、エラーメッセージが表示されるのが、ちょうどここのmciSendCommandの所なので それ以前に親ウィンドウでmci関数の命令を呼び出していないという意味です おそらくコールバックのハンドルはスレッドのハンドル?を渡せば良い気がしないでも無いですが スレッド内でのメッセージ処理をCWinThread(もしくはAfxBeginThreadで呼び出したスレッド関数)で受け取る方法が分かれば解決といった感じになりそうです 以前に何か違う方法でスレッドを作っていた気がしないでもないですが、やり方を完全に喪失しておりますし 何よりもMFCを使って初プログラムしているので、なるべくどちらかで処理したいと思っております これはMFC相談室の方に移動ですか?
- 121 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 17:30:56 ]
- 非同期
- 122 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 13:06:01 ]
- 全角文字を文字化けせずに、tcpで相手に送信する方法がわかりません・・・。
- 123 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 14:56:59 ]
- 送る側と受ける側で文字コードが揃っていればとりあえずできるはず。
- 124 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 10:36:09 ]
- MFCでアプリケーション名を変更する方法を教えてください
- 125 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 11:12:56 ]
- どこで使われる名前のこと言ってるの?
- 126 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 11:15:49 ]
- 起動したときに一番左上に表示されるところです
- 127 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 12:16:28 ]
- >>124
ttp://msdn2.microsoft.com/en-us/library/00ak0bwd(vs.80).aspx
- 128 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 14:58:29 ]
- >>127
free((void*)m_pszAppName); m_pszAppName=_tcsdup(_T("test")); m_pszAppNameの中身は変わりましたが起動しても反映されてませんでした
- 129 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 15:26:19 ]
- それ見て表示する人がいるから
その人が表示する前に変えないとだめだな 見た目の問題ならウィンドウへ直接書いちゃった方が楽かもしれんな
- 130 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 15:40:31 ]
- Doc/Viewなら文字列リソースのIDR_MAINFRAMEだっけか
- 131 名前:124 mailto:sage [2007/01/15(月) 15:47:01 ]
- できました ありがとうございます
- 132 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 15:47:54 ]
- ちょっと興味持ったんで見てみたけど、m_pszAppNameはAfxMessageBox()のタイトルには影響するね。
IDR_MAINFRAMEはDoc/View外しても有効だね。 結局、動的に替えるなら自分でSetWindowText()したほうがいいのか
- 133 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 14:24:45 ]
- すいません、先月はじめたばかりなのですが、デバッガの使い方がさっぱり判りません。
適当に買った本で勉強して、言葉は理解できるのですが内容までは判らないのが現状です。 よろしければ実際にサンプルコードを用いながら解説しているサイト等教えていただけないでしょうか? 特に、スッテプイン、ステップオーバー、スッテプアウトが鬼門です。
- 134 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 14:27:14 ]
- 連続で失礼します。特にforの繰り返し構文を用いたときのデバッガの使い方が知りたいです。
よろしくお願いします。
- 135 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 14:31:23 ]
- >>133
その、「スッテプイン、スッテプアウト」とやらは何物だ? それはさておき、これくらい知っておけばなんとかなるだろ。 StepIn:関数に踏み込む StepOver:関数に踏み込まずに次(の行)を踏む。 StepOut:関数から抜け出す BreakPoint:停止する行を指定
- 136 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 15:12:27 ]
- 最初は適当な変数に目を付けてウォッチしながらステップ実行してるだけで
いろいろわかるとい思う
- 137 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 18:40:28 ]
- >135
はい、日本語としては判るのですが、なんというかこう感覚として身についていないというか どうも雲をつかむような感じがして会得できていないのです。 >136 ありがとうございます。自分で適当にコードを書いていろいろと試してみます。
- 138 名前:sage [2007/01/17(水) 00:15:37 ]
- こんばんは。
↓のファイルをC++としてコンパイルしたいのですが、クラス宣言のところでエラーになってしまいます。 /TPオプションは付けています。 こういう場合、他に設定するところがあるんでしょうか? 以上よろしくお願いします。 //ファイル名:main.c #include <stdio.h> class test{ public: void func1(){ printf("func1\n"); } }; void main(){ test obj1; obj1.func1(); }
- 139 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:31:52 ]
- VC8なら通ったよ
- 140 名前:138 mailto:sage [2007/01/17(水) 00:40:25 ]
- >>139
私はMicrosoft Visual C++ 2005を使って、空のプロジェクトに >>138のmain.cを追加して作りましたが通りませんでした。 変えたオプションとかありますか?
- 141 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:47:57 ]
- /TPだけです。
たぶんプロジェクトのプロパティでは/TPになってて ソースのプロパティでは/TCになってるんじゃないかな。
- 142 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:49:54 ]
- ところで、それなんて嫌がらせ?
- 143 名前:138 mailto:sage [2007/01/17(水) 00:52:07 ]
- >>141
できました! プロパティってソースごとに設定できるんですね... ありがとうございます。
- 144 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 08:08:53 ]
- >>138
C++のコードを書くなら拡張子をcにするなよ。
- 145 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 10:19:01 ]
- リストコントロールを一番下までスクロールさせたくて、
↓こんな処理をやっているのですが、もっとスマートな方法はないでしょうか? CListCtrl m_lstInfo; CSize size; size.cx = 0; size.cy = 100000; //100000以上の高さだったらどうする? BOOL bRet = m_lstInfo.Scroll(size); 開発環境:WinXp、VC++6.0 です。
- 146 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 10:58:02 ]
- >>145
EnsureVisible使ったら?
- 147 名前:145 mailto:sage [2007/01/17(水) 11:22:13 ]
- >>146
できました! ありがとうございます。
|

|