- 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。
- 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
できました! ありがとうございます。
- 148 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 14:20:32 ]
- 仮想リストビューにチェックボックスつけたいのですが
表示されるところまではなんとか行ったのですが SetCheckまでも自分で実装しなければなりません。 初心者である自分には異常に難しいのですが 他にいい方法は無いでしょうか?
- 149 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 16:36:20 ]
- 仮想モードで表示まで完成してるならSetCheckは不要。
もしユーザーのマウス/キーボード入力に反応しないってこと言ってるなら それはSetCheckとは無関係。両イベントから内部状態変更&アイテム再描画 をかけるだけ。
- 150 名前:質問1 [2007/01/17(水) 19:26:42 ]
- ↓のようなエラーが出ます。
d:\abstract2bad\abstract2bad\abstract2bad.cpp(40) : error C2248: 'basepair::getkey' : protected メンバ (クラス 'basepair' で宣言されている) にアクセスできません。 d:\abstract2bad\abstract2bad\abstract2bad.cpp(20) : 'basepair::getkey' の宣言を確認してください。 d:\abstract2bad\abstract2bad\abstract2bad.cpp(7) : 'basepair' の宣言を確認してください。 d:\abstract2bad\abstract2bad\abstract2bad.cpp(45) : error C2248: 'basepair::getvalue' : protected メンバ (クラス 'basepair' で宣言されている) にアクセスできません。 d:\abstract2bad\abstract2bad\abstract2bad.cpp(18) : 'basepair::getvalue' の宣言を確認してください。 d:\abstract2bad\abstract2bad\abstract2bad.cpp(7) : 'basepair' の宣言を確認してください。
- 151 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:27:42 ]
- 自己解決しました
- 152 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:28:22 ]
- そのまんまの意味じゃん
- 153 名前:質問1(続き) [2007/01/17(水) 19:29:04 ]
- ソースを次に書きます。
/* 派生クラスで純粋仮想関数をオーバーライドするプログラム */ #include <iostream> #include <string> using namespace std; // basepair抽象クラスの定義 class basepair { // デフォルトコンストラクタの使用を禁止する basepair() {} protected://@ A //public://@ B // データメンバ string key, value; // 引数をとるコンストラクタ basepair(const char *pstrkey, const char *pstrval) : key(pstrkey), value(pstrval) {} // getvalue()メンバ関数を定義する const char *getvalue() { return value.c_str(); } // getkey()メンバ関数を定義する const char *getkey() { return key.c_str(); } // keycomp()純粋仮想関数を宣言する virtual int keycomp(basepair &rp) = 0; // valcomp()純粋仮想関数を宣言する virtual int valcomp(basepair &rp) = 0; // getpairvalue()純粋仮想関数を宣言する virtual const char *getpairvalue(const char *pstrkey) const = 0; // getpairkey()純粋仮想関数を宣言する virtual const char *getpairkey(const char *pstrval) const = 0; }; //(以下に続く)
- 154 名前:質問1(続き) [2007/01/17(水) 19:29:40 ]
- // mypair派生クラスの定義
class mypair : public basepair { public: // 引数をとるコンストラクタ mypair(const char *pstrkey, const char *pstrval) : basepair(pstrkey, pstrval) {} // keycomp()純粋仮想関数に独自の実装を行う virtual int keycomp(basepair &rp) { return strcmp(key.c_str(), (rp).getkey());// A A エラー箇所40行目 // return strcmp(key.c_str(), static_cast<mypair &>(rp).getkey());// A B } // valcomp()純粋仮想関数に独自の実装を行う virtual int valcomp(basepair &rp) { return strcmp(value.c_str(), (rp).getvalue());// B A エラー箇所45行目 // return strcmp(value.c_str(), static_cast<mypair &>(rp).getvalue());// B B } // getpairvalue()純粋仮想関数に独自の実装を行う virtual const char *getpairvalue(const char *pstrkey) const { if (key == pstrkey) return value.c_str(); else return NULL; } // getpairkey()純粋仮想関数に独自の実装を行う virtual const char *getpairkey(const char *pstrval) const { if (value == pstrval) return key.c_str(); else return NULL; } }; //(以下に続く)
- 155 名前:質問1(続き) [2007/01/17(水) 19:30:31 ]
- int main() {
// mypairクラス型の配列を作成する mypair mp[] = { mypair("358-0015", "さいたまけんいるましにほんぎ"), mypair("500-8165", "ぎふけんぎふしおいまつちょう"), mypair("272-0034", "ちばけんいちかわしいちかわ"), mypair("060-0000", "ほっかいどうさっぽろしちゅうおうく"), mypair("670-0974", "ひょうごけんひめじしいいだ"), mypair("770-0874", "とくしまけんとくしましみなみおきのす") }; if ( mp[5].keycomp(mp[1]) ) { cout << "mp[5]とmp[1]のKeyは異なる\n"; } else { cout << "mp[5]とmp[1]のKeyは同じ\n"; } if ( mp[5].keycomp(mp[5]) ) { cout << "mp[5]とmp[5]のKeyは異なる\n"; } else { cout << "mp[5]とmp[5]のKeyは同じ\n"; } getchar(); return 0; }
- 156 名前:質問1(続き) [2007/01/17(水) 19:35:54 ]
- コンパイルを通すにはA、Bで、rpはキャストすればいい(それぞれ、A→B)ようですが、
これって、static_castがベストでしょうか?
- 157 名前:質問1(続き) [2007/01/17(水) 19:38:46 ]
- dynamicだと問題があるでしょうか?
以上です。
- 158 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 20:33:15 ]
- basepair の、公開メンバっぽいものを全て protected にしてる所に問題があると思うよ。
あと、スレ違い臭
- 159 名前:デフォルトの名無しさん [2007/01/17(水) 21:16:54 ]
- >>158
>basepair の、公開メンバっぽいものを全て protected にしてる所に問題があると思うよ。 ご回答ありがとうございます。 >あと、スレ違い臭 今まで気づきませんでした。すみません。 これにて私の質問は終えたいと思います。
- 160 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:01:37 ]
- 垂直スクロールバーを矢印キーで動かして値を変化させることはできますか?
たとえばバーが2つあって「↑↓」で1つ目を増減させ、「←→」で2つ目を増減させるとか。 今はSB_LINELEFT等を使ってマウスで動かしてます。
- 161 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:16:03 ]
- 楽勝できる
- 162 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:54:01 ]
- >>161
片方しか動かせないんですよ。お兄ちゃんおせーてください。
- 163 名前:デフォルトの名無しさん [2007/01/18(木) 21:28:45 ]
- ヘッダファイルってどこに保存すればいいのですか?
- 164 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 22:28:07 ]
- どこでも好きなところにどうぞ
- 165 名前:デフォルトの名無しさん [2007/01/18(木) 23:00:27 ]
- >>164
学校の宿題で、ヘッダファイルをDLして、プログラムを書くらしいのですが、 どのフォルダに追加していいのか分かりません。 左のヘッダーファイルのフォルダに追加したのですが、 「include ファイルを開けません」 「'gucc.h': No such file or directory」と出てしまいます。 gucc.hはヘッダーファイルの名前です。 visual C++ 2005を使っています。
- 166 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 23:10:43 ]
- ではもう一度
どこでも好きなところにどうぞ その代わり、インクルードパスの指定はしっかりしてください それすらわからんなら全部まとめて同じ場所に保存しとけ それでもダメなら先生に教わっておいで
- 167 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 00:27:32 ]
- それでもダメなら俺とディープキスしろ
- 168 名前:デフォルトの名無しさん [2007/01/19(金) 00:38:58 ]
-
_,,..,,,,_ _,,..,,,,_ ./ ヽ / ヽ l ・ωl lω・ l `'ー--┳━┳---‐´ _,,..,,,,_ _,,..,,,,_ ./ ヽ / ヽ l ,,・3,,-ω-,, l 〜♪ `'ー--┳━┳---‐´
- 169 名前:デフォルトの名無しさん [2007/01/19(金) 16:52:13 ]
- 開発環境:WinXp、VC++6.0
リストコントロールの水平スクロールバーが表示されているかどうか判定する方法ってありますか?
- 170 名前:169 mailto:sage [2007/01/19(金) 17:43:34 ]
- 自己解決しました。
if(GetScrollLimit(SB_HORZ) > 0)
- 171 名前:169 [2007/01/19(金) 17:53:34 ]
- 開発環境:WinXp、VC++6.0
また行き詰ってしまったので、再度質問です。 リストコントロールの選択アイテムが、可視部の何番目が選択されているかというのは分かりますでしょうか? 下図の例で言うと、垂直スクロールバーが表示されているリストコントロールで、 矢印の行が選択されていた場合、インデックス値は2ですが可視部だけなら1ということで、 その1という値を求めたいということです。 <例図>(『あ』はインデックス0番目のアイテムだが、スクロールによって見えてない。) (あ) ――――― |い ‖ →|う■■■■‖ |え ‖ |お ‖ |―――――
- 172 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:04:05 ]
- リストコントロールはそんな使い方を想定してはいない。
- 173 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:08:50 ]
- >>171
m_list.GetCurSel() - m_list.GetTopIndex()
- 174 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:29:01 ]
- >>173
GetCurSelはリストコントロールにはなかったですけど、出来ました! ありがとうございます。 m_list.GetSelectionMark() - m_list.GetTopIndex()
- 175 名前:デフォルトの名無しさん [2007/01/19(金) 21:05:11 ]
- VC++.net「Windowsフォームアプリケーション」において、MFCにおけるBitBlt関数のように
画像をpictureboxから別のpictureboxに部分コピーする方法がわからないのですが 何か良い方法はないでしょうか。
|

|