- 1 名前:デフォルトの名無しさん [2008/12/26(金) 00:43:36 ]
- Microsoft Foundation Classライブラリ専用スレです。
前スレ ■MFC相談室 mfc19d.dll■ pc11.2ch.net/test/read.cgi/tech/1207301867/
- 182 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 23:26:05 ]
- 質問させてください。
今MFC VC2005を使いプログラムを組んでいるのですが、あるメソッド内でint型配列array[21]の中身をsetwindowtextでタイトルに表示させたいと思っています。 setwindow(_T(""))で、array[i]をどのように記述すれば表示できるようになるでしょうか。下らないかもしれませんがお願いします。
- 183 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 23:28:17 ]
- CString hoge;
hoge.format(_T("%d"), array[i]); wnd.SetWindowText(hoge); こんな感じかな
- 184 名前:182 mailto:sage [2009/01/15(木) 02:24:13 ]
- >>183さん
そういう書き方をするんですね、、無事上手くいきました。ありがとうございました!
- 185 名前:175 mailto:sage [2009/01/15(木) 02:48:28 ]
- >>181
今使ってるプログラムはもともと1年半くらい前の演習の時に先生から頂いたrawビューアで、 研究に使えそうだってことでその時のプログラムを改造しようとしてるんですが、 OpenGLは全く扱ったことがなくて(演習の時も処理部分しか触ってない)、 時間もないんで、OpenGLを勉強するより1から作り直した方が早いような気がしてきたんですが、 raw画像(320×320の輝度値のみのデータ)をMFCを使って表示させるには ビットマップに変換するしかないのでしょうか。
- 186 名前:名無し募集中。。。 mailto:sage [2009/01/15(木) 03:19:54 ]
- 輝度データをDIBに変換すれば良い
BMPはLoadImageでDIBのハンドルを得られるが 自分で変換する場合はBITMAPINFOにサイズなどをセットしてCreateDIBSectionを使って ハンドルと輝度データを入れる領域を得る(ここまでMFCなし
- 187 名前:175 mailto:sage [2009/01/15(木) 11:33:23 ]
- >>186
アドバイスありがとうございます。 それで作ってみたいと思います。
- 188 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 17:33:57 ]
- MFC6.0の参考書見ながらこつこつやってるんだけど別に支障はない?
1999〜2001年に出版されたものなんだが
- 189 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 19:37:56 ]
- int iLength = m_Edit.LineLength(i)+1;
TCHAR *ptBuf = new TCHAR[iLength]; m_Edit.GetLine(i,ptBuf,iLength); ptBuf[iLength]=0; ar.WriteString(str); delete[] ptBuf; 一行一行ファイルの保存させたいのでCEditの内容を取得して保存させるのに 上記の様なソースを書いたところdelete[]の所でエラーをはくのですがなぜでしょうか?
- 190 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 19:47:37 ]
- >>189
ptBuf[iLength]=0; ↓ ptBuf[iLength-1]=0;
- 191 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 19:57:10 ]
- CWnd::GetWindowTextでCStringに纏めて取って、
CString::Tokenizeで分解したほうが手っ取り早くね?
- 192 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 20:45:37 ]
-
int i, nLineCount; CString strText; CStringArray bufArray; nLineCount=m_Edit.GetLineCount(); for (i=0;i < nLineCount;i++) { int len = m_Edit.LineLength(m_Edit.LineIndex(i)); m_Edit.GetLine(i, strText.GetBuffer(len), len); strText.ReleaseBuffer(len); bufArray.Add(strText); } CStdioFile file; if(file.Open(..略..)) { for (i=0;i <bufArray.GetSize();i++) { file.WriteString(bufArray.GetAt(i)); file.WriteString(_T("\r\n")); } file.Close(); } とかでよくね?
- 193 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 21:25:28 ]
- CEdit::GetLine
戻り値 実際にコピーされたバイト数 戻り値使わないの?
- 194 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 00:00:50 ]
- MFCでデバイスコンテキストで使われているフォントの高さを取得する方法ってありますか?
- 195 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 00:05:43 ]
- GetTextExtent
- 196 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 03:07:01 ]
- >>193
ここの使用例をテキトーに書き直しただけだから、 ttp://msdn.microsoft.com/ja-jp/library/s7zy7cwk(VS.80).aspx 細かい事気にすんな。 ハゲるぞ。(もうハゲてるかもしれんけど)
- 197 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 04:18:10 ]
- GetLineの戻り値、、使わないなあ。 使いどころない。
>>193は、>>192でどう戻り値使うのだろうか?
- 198 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 09:07:51 ]
- >>194
GetTextMetrics
- 199 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 17:51:17 ]
- lineText..GetLine(iLine, strText.GetBuffer(iLength));
っていう風に関数を実行するとstrTextにその行が入る時と入らない時があるんですがなぜなんでしょうか?
- 200 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 17:57:30 ]
- ReleaseBuffer してるか?
- 201 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:01:19 ]
- 行ってますし、デバッガでとめて一個一個通すと何故か全部入っていくんです。
- 202 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:08:02 ]
- >lineText..GetLine(iLine, strText.GetBuffer(iLength));
こんなコード、有り得ないだろ。
- 203 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 19:07:15 ]
- CEdit::GetLine(int nIndex, LPTSTR lpszBuffer)
だろ?EM_GETLINEのベタ実装なんだよな、これ。 昔から思っていたんだが、わざわざメソッドとして用意しておく必要性あるんだろうか。 普通バッファ長を指定できる方しか使わないと思うのだが。 わざわざこっちでバッファの先頭ワードにバッファ長代入とか暇人過ぎだろ。
- 204 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:11:51 ]
- 2つあるうちの一見楽そうに見える方が実は大変ということか
- 205 名前:デフォルトの名無しさん [2009/01/18(日) 15:22:20 ]
- >>199
>>203 が書いているように、引数が2つしかない CEdit::GetLine()を使う 時は、呼び出す前に、第二引数で渡すバッファの先頭に、バッファ長を 書いておく必要があるのに、それをやっていないからだろ? LPTSTR pBuf; pBuf=strText.GetBuffer(iLength); *((LPWORD)pBuf)=iLength; // バッファ長をセット m_wndEditCtrl.GetLine(iLine,pBuf); strText.ReleaseBuffer(iLength); 自分でバッファ先頭にバッファ長をセットするのが面倒なら、引数が3つ あるCEdit::GetLine()を使うことだ。
- 206 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 16:01:41 ]
- 日付や時間を取得したいけどエラーがでてしまうんです・・・
内容は Run-Time Check Failure #3 - The variable 'newtime' is being used without being initialized. afx_msg void CMainWin::OnTime() { char str[80]; CTime Curtime = CTime::GetCurrentTime(); struct tm *newtime; newtime = Curtime.GetLocalTm(newtime); //ここが問題 wsprintf(str,asctime(newtime)); str[strlen(str) - 1] = '\0'; MessageBox(str,"Time and Date"); } msdn.microsoft.com/ja-jp/library/fxy17zta(VS.80).aspx ここ見る限りじゃ間違いないと思うんだけどなあ・・・ 指摘と改善お願いします。。。
- 207 名前:デフォルトの名無しさん [2009/01/18(日) 16:57:35 ]
- >>206
突っ込みどころが大杉。釣りか? C++やMFC以前に、ポインタも理解していないなら、C言語の基礎からやった 方がいいと思う。 MFCのサンプルは間違っているな。 struct tm newtime; Curtime.GetLocalTm(&newtime); でうまくいくだろう。 また、ワイド文字版のwsprintf()を使うなら「char str[80]」ではなく 「wchar_t str[80]」とすべき。MessageBoxもワイド版を使う。 > str[strlen(str) - 1] = '\0'; これもprintf()/wprintf()によって文字列末尾にNUL文字('\0')は付与され ているから意味がないし、ワイド文字なら、strlen()ではなくwcslen()を 使うべき。 str[wcslen(str)-1] = L'\0'; 第一、str[]がNUL文字で終端されていないと、strlen()/wcslen()は 文字列長さを判定できない。
- 208 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:08:05 ]
- >>207
MSのサンプル間違ってるとか悲しいわな これ、一応参考書のサンプルなんですけど捨てたほうがいいでしょうか まあ2001年に出版されたものなんですけどね
- 209 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:14:24 ]
- サンプルは間違っているとは言い切れないよ。
宣言と利用の間に、メモリ確保が隠されているかもしれないw とは言え、2008用のページの方は訂正されているんだからそっちを見ればいい訳で。 ttp://msdn.microsoft.com/ja-jp/library/fxy17zta.aspx
- 210 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:22:43 ]
- CTime Curtime = CTime::GetCurrentTime();
tm newtime; Curtime.GetLocalTm(&newtime); wsprintf(str,asctime(&newtime)); でできました! 参考書って年代で仕様も変わるけど図書館にはこれしかなくて・・・^^; なんか疑いにくいんですよね、参考書って どうもありがとうございました
- 211 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:28:49 ]
- 本に誤字脱字があるのは珍しいことじゃない
- 212 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:33:05 ]
- おかしいと思ったら複数調べるのがいい。
- 213 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:33:41 ]
- >>210
その参考書が何か知らんが、MSDNのサンプルをコピペしただけの悪書なんじゃないか? いみじくも参考書を名乗るのなら、ちゃんと検証されたコードを載せるべきだと思うのだが。
- 214 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:37:35 ]
- >>213
えっと・・・ ハーバート・シルト/フランク・クロケット著 「標準講座 MFC6.0」だそうです 結構分厚いからコピペではないと思います ver間での使用の違いを疑わなかった自分のミスです
- 215 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:40:25 ]
- いやこれ仕様の違いじゃなくてもともと間違ってるよ。
でもその本見る限り、コピペじゃなくて同じソースってことみたいね
- 216 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:44:41 ]
- ってサンプルソースがダウンロードできるから見てみたけど、
struct tm *newtime; newtime = curtime.GetLocalTm(); これなら旧仕様で合法だな。
- 217 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:48:03 ]
- >>216を2008でコンパイルするとGetLocalTm()に引数がないことからエラーがでました
昔はよかった
- 218 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:50:03 ]
- まあそれはMSDNのほうでも、_SECURE_ATLを未定義にすればいいみたいだけどね。
- 219 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:50:40 ]
- >いいみたい
→いいと書いてるみたい
- 220 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:56:33 ]
- 昔は引数にNULL(省略化)を渡すことで、オブジェクト内部のstruct tmの
ポインタを返す仕様だったけど、NULLポインタを渡すのを許可しなくなった ってことでは? オブジェクト内部のstruct tmのポインタを取得できると、直接データを 書き換えて隠蔽化の意味がなくなるから。
- 221 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 18:56:56 ]
- 元のサンプルと全然違ってるし
- 222 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 19:33:49 ]
- サンプルコードなんて使い方の雰囲気を感じ取るだけのもんで
コピペするもんじゃねぇ。 自分のプログラムに組み込むときは、引数・戻り値の意味と動作を理解し 自分の頭でコードを書くべき。
- 223 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:41:17 ]
- サンプルコードをいじくりながら学ぶもんなんじゃねえの?
いじくる前に1回コピペするだろ
- 224 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 21:26:46 ]
- いじくるのは勝手だけど、自分が間違ったのを本のせいにしない。
- 225 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 22:59:29 ]
- >>207
wsprintf()ってワイド文字ではなくTCHARだけど。
- 226 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:02:26 ]
- TCHARは_tsprintfみたいな名前だろ?
wprintfはwcharのはず プリプロセッサで切り替わるだけだし
- 227 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:05:43 ]
- wsprintfはWindowsのAPI
wprintfはprintfのワイド文字版
- 228 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:15:16 ]
- >>210
手元の2004年初版第6刷発行では>>216のコードになってるな >>225-227 wsprintf()は環境によってマルチバイトかUNICODEだよね。 >>206のコードだとマルチバイト環境のコードならばcharは間違えというわけではない。 それと str[strlen(str) - 1] = '\0'; ってのはasctime()が改行文字を付加するからそいつを取っ払うため。 まぁ、あんまりよろしくないコードとは思うけどね。
- 229 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:41:37 ]
- wsprintfとwprintfとswprintfは紛らわしすぎる
- 230 名前:デフォルトの名無しさん [2009/01/19(月) 05:48:07 ]
- 処理をCPU使用率30%を上限に制限して実行させるにはどうすればいいんでしょうか?
そんなことは可能なんですか?
- 231 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 08:47:51 ]
- なんでそんなことする必要があるのか疑問。
他のアプリの邪魔をしたくなければ、スレッドの優先順位を低くしとけばいいだけ。
- 232 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 08:53:15 ]
- >>230
25%上限でよければ、簡単だよw
- 233 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 09:23:00 ]
- >>232
Core2Duoですが簡単ですか?
- 234 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 09:25:08 ]
- 惜しいな、Core2Duo単体なら上限は50%だ。
- 235 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 09:31:19 ]
- Core2Duo限定のソフトか!
- 236 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 10:31:14 ]
- いえ、Qのほうで
- 237 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 12:33:52 ]
- MFCと関係あるか?
- 238 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 14:54:00 ]
- 誰ですか。勝手に話を進めないでくださいw
アプリに重い処理を乗せたくて起動者全員CPU30%とか10%づつシェアするプログラムを組み込みたいんです 制限かけないとずっと自分が使ってなくてもずっと100%で熱暴走が心配なのでCPU10%を提供に制限したいんです。 どうすればいいと思いますか?
- 239 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 15:36:17 ]
- MFCにそういうライブラリが存在しなければスレ違い
- 240 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 17:17:46 ]
- >>238
熱暴走が心配ってどんな環境だよ。 「起動者全員」とか「シェアする」とかサーバーアプリなの? どうしても心配ならユーザー数に応じてSleepでもさせたら?
- 241 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 19:23:57 ]
- CPU使用率を求める処理でCPUを食うから無意味
- 242 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 20:09:19 ]
- >>241
えっ?
- 243 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 20:29:40 ]
- お前ら >>237 も >>239 も見えないフリか。
- 244 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 20:50:46 ]
- 熱暴走については、昔の焼き鳥こさえてたAthlonの時代ならともかく、
今のCPUは温度が上がりすぎると勝手にクロックとか落とすので、特に問題ないな。 CPU利用率については、WindowsServerならプロセスがどれだけフル回転していようと、 一定時間毎に容赦なく他のプロセスに明け渡すから、無難なレスポンスが確保できそうかな、と。
- 245 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 06:57:04 ]
- 優先度でいつでも明け渡せるとしても、気分的に窮屈な感じしませんか?
自分の作ったプログラムはいつも全力で走るんですが、CPU見てると常に20%ぐらいでなんかまわってたりするんですが 、タスクマネージャで確認してるだけなんですが、この%って一定時間内のCPU100%使用率ってことなんですか? そうでないとしたら%制限の方法を教えてください!
- 246 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 07:08:05 ]
- >>240
thx! 今ってCPUというかハードの性能がすごくてほとんどの処理がすぐ終わって待機時間がすごくもったいない気がしたので そういう部分だけの汎用的なCOMとかで自由に独自のソフトに組み込めたらよくないですか? 10%シェアでも100人いればパソコン10台分ですよね。フリーでそういうのあれば教えてください。 Sleepでどうやるかじっくり考えます。 どうもです
- 247 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 07:56:11 ]
- 無駄。つーか、スレ違いだと。
そもそも>234辺りの理屈は判っているのだろうか。
- 248 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 10:08:04 ]
- スレ違いだと何度指摘されても話を続ける奴って何なの?
知的障害者なの?死ぬの?
- 249 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 18:56:45 ]
- ム板は初心者にとってスレチが紛らわしいと思うけどこれはわかるだろ、な?
- 250 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 08:26:16 ]
- どこで聞けばいいんでしょうか?
どうやって実現するかわからないのでターゲットのスレもわからないです。
- 251 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 09:10:06 ]
- >>250
>この板はプログラムを作る人のための板です。 >あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。
- 252 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 09:38:27 ]
- thx
- 253 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 08:41:42 ]
- MDIで一つのDocに複数のViewというのはなんとか判る。今回、
そのViewが一つ1枚とその他10枚が別のViewになる構成ってどうやるのがいいのだろう。 CMultiDocTemplateを11個AddDocTemplateすることになるのだろうか。 その場合、クラスを派生して10個にしておかないと10枚の区別がつかない気がするのだが。 ってことで、これから移動するからレスは夜になるが、誰かヒント頼む。
- 254 名前:デフォルトの名無しさん [2009/01/22(木) 09:50:02 ]
- Viewクラスだけ異なるDocTemplate作ればよいのではないか?
たしか複数のAddDocTemplateをすると新規作成時にテンプレ選択ダイアログが出るようになるな
- 255 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 14:10:59 ]
- ドキュメントテンプレートはアイコン、メニュー、ツールバーみたいなリソース関係で
ドキュメントごとじゃなくてドキュメントタイプごとに違うリソース使えるようにする
- 256 名前:253 mailto:sage [2009/01/23(金) 00:42:41 ]
- 今(帰って)きた。レスTHX。つーか、>253は出掛けとは言え酷いなぁw
結局、一つの必ず必要なViewだけドキュメントテンプレートにして、 他の10枚分は全部そのViewから必要に応じて開くようにしてしまった。 考えてみたら、新規作成ならテンプレート選択ダイアログが開くけど ファイルオープンだとどうせ最初のテンプレートでしか開かないしね。 それとも選択する手段があるのかな? # うーむ、今更真面目にMFCの勉強し直すのも面倒だなぁ……
- 257 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 10:35:20 ]
- 同時に開く1個+10個が、常に同じファイル数でセットなのか、10個は
中身は異なるが同じクラスのオブジェクトなのか、そこらへんで全く 違ってくると思う。 開くファイルとビュー(ウィンドウ)を全てMDIのDoc-View構造に登録して 管理しなければならないかといえば、決してそうではない。 SDIだけど、ペイントブラシのように、開くのは1個の画像ファイルで、 一部を拡大表示するウィンドウを複数同時に表示できるなどというインター フェースだって作れる。 例えばMDIベースでVisual Studio相当のアプリケーションを作成すると して、独立した1個がプロジェクトファイル、残りのN個がプロジェクト を構成するソース/ヘッダファイルだったとして、ソース/ヘッダファイル はプロジェクトの一部としてだけでなく単独でも開ける。 プロジェクトの一部として開いたソース/ヘッダファイルは、プロジェクト に相当するドキュメントクラスで管理することになると思う。ソース/ヘッダ ファイルを単独で開いた場合、インターフェースに統一性を持たせるため、 一時的に無名のプロジェクトを作成し、それに管理させているような形に なるのでは?
- 258 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 11:33:53 ]
- CHtmlViewをMDIで使いたいんですが、
このビューを単独でプロジェクトに追加して開くにはどうすればいいですか? ドキュメントテンプレートでAddにすると、使わないのに.Docも作らなければいけないとおもうんですが。
- 259 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 13:07:32 ]
- >>258
クラスの追加もできない馬鹿は、MFCの参考書でも読んで勉強し直せ
- 260 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 13:28:44 ]
- もとからあるMDIViewにCHtmlViewを張り付けられなくないですか?
ビューを切り替えるだけのときオープンドキュしなきゃいけないので.Docもセットなのが嫌なんですが
- 261 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 13:50:47 ]
- >>260
Viewクラスの使い方ぐらい調べろ、阿呆が
- 262 名前:名無し募集中。。。 mailto:sage [2009/01/23(金) 14:25:44 ]
- 使わないDocがあってもいいじゃない
m_pDocTemplate->OpenDocumentFile(NULL) が楽なんじゃないかなぁ
- 263 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 15:35:09 ]
- そんな書き方ができるんですね!ありがとうございます。
>>261 死ね
- 264 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 10:50:59 ]
- viewじゃないコントロールもあるよ
- 265 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 10:53:01 ]
- CDCクラスからウィンドウハンドル(hWnd)って取得できますかね?
- 266 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 11:33:18 ]
- つ CDC::GetWindow
- 267 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 11:34:22 ]
- AfxGetMainWnd()->GetSafeHwnd();
- 268 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 16:11:14 ]
- Visual Studio 2008 SP1にてMFCアプリケーションを作るんだけど、
ダイアログにも"視覚スタイルと色"を反映させたいのですが、 無理でしょうか? "視覚スタイルと色"を反映させたSDIでも、 ダイアログ(CAboutDlg)だけが浮いたデザインの気がするので、 知ってる方が居られればご教授願いたいです。
- 269 名前:デフォルトの名無しさん [2009/01/31(土) 00:02:52 ]
- MFCって今後衰退して、.NETがデファクトスタンダードになるんですか?
今更、MFCをやれなんて上長から言われたんだけど、MFCでガリガリ かけるようになった頃にはVSから姿を消してたら淋しいな
- 270 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:05:27 ]
- 少なくともMSは、数年前まではそのつもりだったんだろうな
- 271 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 02:02:34 ]
- MFCが消える頃に、やっとガリガリかける程度なら、
消えて当然のプログラマ。
- 272 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 02:49:03 ]
- >>269
触ってみたけど変わんない 俺、ツリーのドラッグアンドドロップが簡単にできるとか リストの更新関連がうまくできるようになってるとかそういうの期待したけど 結局、全然改善されてないところがアフォだと思った 今ならノウハウや情報がそろってるMFCのがいいよ .NETは糞面倒臭い上に情報少ない んでMFCやってから.NET入っても同じところに気を配らないといけないのは まったく同じなので情報が豊富なMFCから入ったほうがいいと思う
- 273 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 05:42:34 ]
- .NETの方が情報は豊富
- 274 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 08:47:27 ]
- MFCでやってたらいざとなったら素APIに逃げるからな
って.NETでもP/Invokeに逃げたりするか
- 275 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:12:58 ]
- 時代はVB
- 276 名前:デフォルトの名無しさん [2009/01/31(土) 16:18:59 ]
- 工エエェェ(´д`)ェェエエ工工
- 277 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 03:21:56 ]
- というかC++/CLIで.NETは書きにくい
凄く汚くなる C++/CLI単体は悪くないと思ってるけど
- 278 名前:デフォルトの名無しさん [2009/02/01(日) 03:27:28 ]
- .NETを使わないならC++/CLIを使う必要があるのか?
- 279 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 16:47:36 ]
- CWinAppをCWinAppExに変えただけで、400KBから1800KBにexeファイルのサイズが大きくなった
MFCでかくなりすぎワロタ
- 280 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 17:11:55 ]
- さらにリソース追加で3Mバ・イ・ト!
- 281 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 21:00:50 ]
- スタティックリンクしてんのか?
ダイナミックリンクに直せよ
- 282 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 21:19:17 ]
- やだよばか
- 283 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 21:21:56 ]
- 別にサイズなんかどうだっていいような気がするけどね
でかいとなんかヤバイの?
- 284 名前:デフォルトの名無しさん [2009/02/01(日) 22:22:36 ]
- >>283
デカくてなにかいいの?
- 285 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:27:35 ]
- >>284
いや、勝手にでかくなるからさ
- 286 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 07:24:22 ]
- >>272
ツリーの(略)とかはWPFではできるよ ただ、C++/CLIじゃWPF使えないからC++のコードはバッサリ捨てなきゃならないけどね…
- 287 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 20:33:41 ]
- はじめまして。
MFCのコレクションクラスにて質問があります。 MFCのコレクションクラスにCListとCByteArrayってのがあります。 これを使って、たとえば通信電文の様に可変長データをリストに置きたい場合 CList<CByteArray, &CByteArray>と書けば良いのでしょうか? error C2955: 'CArray' : クラス テンプレート を使用するには テンプレート 引数リストが必要です ってのが出て、どうしていいかわからないです。 有効な宣言の仕方があれば、教えていただきたいですが・・・・
- 288 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:12:11 ]
- >>287
そもそも&の位置が前後逆だな。 直したところでCByteArrayはoperator=の実装が無いからやっぱり駄目だけど。 MFC的には、CList<CByteArray*>って感じにポインタで持つしかないと思う。 これ以上はSTLの出番か?全然詳しくないから答えられないけど。
- 289 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:56:09 ]
- C++で扱いやすい新しいフレームワークを作って欲しいのが本音だな
.NETと住み分けて
- 290 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:11:43 ]
- WTLはそれなりに使いやすいだろメッセージハンドラもIDE上で追加できるし。
EEでは古いATLになっちゃうのが難だけどMFCじゃ使えないし。 eGUI++は使ったことないから判らないがstd::stringてのが嫌だな。
- 291 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 08:17:48 ]
- >>288
やっぱりSTLで組むしかないのですか・・・ がんばってみたいと思います。 ありがとうございます。
- 292 名前:デフォルトの名無しさん [2009/02/03(火) 10:26:48 ]
- >>291
CByteArrayの派生クラスを定義して、そいつでoperator =を実装した上で、 CList<CMyByteArray, const &CMyByteArray>とすればいけると思う。
- 293 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 10:37:34 ]
- つーか、STL のコンテナではなく
MFC のコレクションを使うメリットって何だろう。
- 294 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 16:56:07 ]
- STLをリンクしなくて済む
- 295 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 17:52:53 ]
- CObject からの派生していること
- 296 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:35:34 ]
- MFCベースならMFCに統一したいっていうのはあるな
- 297 名前:デフォルトの名無しさん [2009/02/03(火) 23:03:50 ]
- CListCtrlのアイコンモードで
ラベルを複数行表示させる方法教えてください
- 298 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:39:33 ]
- エクスプローラと同じだろ
- 299 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:52:35 ]
- >>298
ってことは2行までしか表示できないって事? 省略されずに複数行を表示はだめか・・・
- 300 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 03:09:18 ]
- >>293
デバッグ実行時にアサート出してくれる、とかMFC例外クラスのスローとか ただ統一しないとめっちゃ不便
- 301 名前:デフォルトの名無しさん [2009/02/04(水) 09:21:26 ]
- >>297
ラベルってヘッダコントロールのテキストのこと?
- 302 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 09:26:35 ]
- アイコンモードにヘッダコントロールはない!
- 303 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 13:27:48 ]
- アイコンラベルのワードラップかな?
- 304 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 20:35:39 ]
- 今までEXEで作ってたのを、DLL化しようとしたけど
プロジェクト作り直すのに凄い苦労する。 なんかいい方法あるかね?
- 305 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:38:23 ]
- aaa
- 306 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 22:24:36 ]
- >>304
数個なら手で たくさんあるならPowerShellスクリプトで設定を置換
- 307 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 23:26:08 ]
- >>301
>>303 エクスプローラで言うとファイル名が表示されている部分です そこに複数行の文字を表示したいと思っています char sz[] = "AAAAAAAAAAA\nBBBBBBBBBBB\nCCCCCC\nDDDD\nEEEEE" みたいな感じ、実際表示されるのは AAAAAAAAAAA BBBBBBBBBBBCCCCCC... と表示されてしまっています アイコンを選択するとちゃんと意図した改行位置で表示されるけど 選択していない状態でも全部ちゃんと表示したいです
- 308 名前:名無し募集中。。。 mailto:sage [2009/02/05(木) 00:15:42 ]
- \nじゃなくて\015\012にして試してみて
と思ったけど、エクスプローラーでもファイル名が省略される場合があるから 自分で実装するしかないんじゃないかな
- 309 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 08:16:03 ]
- >>307
アイコン間隔を変える事である程度は回避できるかもしれないが、複数行で 無制限に表示すると、左右両側のアイコンのラベルや、下側のアイコンに テキストがかぶる。 しかも、自動改行せず、1行の文字数(ラベル領域の横幅)や行数(ラベル領域 の高さ)を無制限にすると、ラベル領域が重なるのは隣接するアイコンだけ では済まなくなる。 表示上はそれでも済むけど、常にそういう状態で表示すると、任意のアイ コンやラベルをマウスでクリックできなくなるから、非選択時は省略表示 するというユーザインターフェースになっているんだと思う。 CViewやCScrollViewなりから、仕様を満足する派生クラスを自分で作る しかないね。
- 310 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 18:49:10 ]
- 2008のSP1入れてる人居たら教えてください。
SP1で初めてプログラム始めたのでSP1関係ないかもしれませんが、 テンプレートで作ったドッキングウィンドウの中にあるツールバーのボタンをコンボボックスに変えた後その中のエディット部分の文字列を 取り出すにはどうすればいいんでしょうか? .h CMFCToolBarComboBoxButton* m_ComboButton; .cpp // OnCreate m_ComboButton = new CMFCToolBarComboBoxButton(ID_EDIT, GetCmdMgr()->GetCmdImage(ID_EDIT), CBS_DROPDOWN); m_ToolBar.ReplaceButton(ID_BTN, *m_ComboButton); // OnButtonClick CString a; a = m_ComboButton->GetText(); ヘルプにある手順と、サンプルも見て書きました。ボタンは置き換わるんですが、aが空なんです。GetEditからGetWindowなどもいろいろやりました どうしても文字列を取得できません。お願いします!
- 311 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 19:10:33 ]
- >>310
サンプルのだけど CMFCToolBarComboBoxButton* pSrcCombo = NULL; CObList listButtons; if (CMFCToolBar::GetCommandButtons(ID_DUMMY_SELECT_ACTIVE_CONFIGURATION, listButtons) > 0) { for (POSITION posCombo = listButtons.GetHeadPosition(); pSrcCombo == NULL && posCombo != NULL;) { CMFCToolBarComboBoxButton* pCombo = DYNAMIC_DOWNCAST(CMFCToolBarComboBoxButton, listButtons.GetNext(posCombo)); if (pCombo != NULL && CMFCToolBar::IsLastCommandFromButton(pCombo)) { pSrcCombo = pCombo; } } } if (pSrcCombo != NULL) { ASSERT_VALID(pSrcCombo); LPCTSTR lpszSelItem = pSrcCombo->GetItem(); CString strSelItem = (lpszSelItem == NULL) ? _T("") : lpszSelItem; AfxMessageBox(strSelItem); } else { AfxMessageBox(_T("Show \"Set Active Configuration\" dialog....")); } }
- 312 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 21:14:49 ]
- 調べてくれてありがとう。
一度LPCTSTRで取得してからCStringにしてみましたがだめでした。 コンボボックスのポインタのとり方もサンプルのように取得しましたが、だめでした。 CMFCToolBarComboBoxButtonのヘルプでGetTextは編集用のエディットのテキストを返すとあるのに これで返ってこないのがつらいです。 MFCの常識から考えて何か根本的なところのアドバイスをお願いします! 他にツールバーに並んでるボタンはボタンのメンバで無効とかにできるので、ツールバー上のアイテムの取得は出来てると思うんです。
- 313 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 21:27:43 ]
- >>312
アドバイスでいいのか。 ちゃんとドキュメントを読んで勉強しろ。 理解力があれば解決できるだろ。
- 314 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 22:01:29 ]
- GetWindowTextを使えば?
- 315 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 22:16:45 ]
- それもやったんですが、空でした。
- 316 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 22:20:12 ]
- >>311のやり方でポインタを取得したら
GetEditCtrl()->GetWindowText で取得できる。
- 317 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 22:31:50 ]
- だめです。
pSrcCombo != NULL のelseの方に飛びます。 もうべた貼りしましたがだめでした。 キーでボックスに入力したあとそれを更新してメンバ変数に入れなくてはいけないんでしょうか? GetText()の戻値がプロテクト変数を返すだけになっていたのですが、どこで入るのかがたどれません
- 318 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 22:43:20 ]
- CMFCToolBar::IsLastCommandFromButton(pCombo)
を抜いたらいけるだろ?
- 319 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 22:47:01 ]
- みんなSP1も結構すらすら分かってるんだな
俺は来月から久々にMFCの仕事やりそうだから、VC6レベルでさえかなり不安だ
- 320 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:17:42 ]
- だめでした。
ID_DUMMY_SELECT_ACTIVE_CONFIGURATION をID_EDITにすると TRUEには飛びますが、 lpszSelItemが無効なポインタになります。 置き換えたボタンのポインタを取得するだけならGetButton(index)を使って CMFCToolBarComboboxButton* m_box = (CMFCToolBarComboboxButton*)m_toolbar.GetButton(index); CString str = m_box.GetItem(); これはどこが問題あるんでしょうか? あと頻繁に出るんですが、ブレークポイントで、現在の設定ではヒットしません。このドキュメントのシンボルが読み込まれていません。 と出て、右クリで場所の許可で対応してるんですが、これなんですか?関係ありますか?
- 321 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:24:30 ]
- もしかしてリリースビルドじゃないのか?それだとデバッグの変数モニタは出鱈目になるぞ
- 322 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:29:37 ]
- リリースじゃないです。ncb消しとかクリーンも頻繁にやってるんですが、
なんどもここ挫折して後回しにして2か月ぐらいチャレンジしてるんですが、今だにTextが取得できません 取得できると教えてもらえただけでもありがとうです。なにか設定か、全然違うところが原因な気がしてきました。
- 323 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:30:19 ]
- ちょっと説明が悪かったかもしれないけど、
>>311はドロップダウンリストの場合に、リストを変更した時に取得する方法。 任意のタイミングで取得する場合は、 任意なので「CMFCToolBar::IsLastCommandFromButton(pCombo)」は要らない。 よって、TRUEに飛んだら pSrcCombo->GetEditCtrl()->GetWindowText で取得する。
- 324 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:41:33 ]
- >>308
>>309 ありがとう 時間的に厳しそうなのであきらめます 無制限に全部教示でなくても指定した行数だけは表示してくれるようになってると良かったなぁ 改行位置が結構重要なので省略された行は改行が無視されるのが痛いかった
- 325 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:49:59 ]
- >>323
おーできました!ありがとうございました。感動しました。 調べてもらってすいませんでした。じっくり解析します ありがとうございました!!!
- 326 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 20:12:38 ]
- 同僚に「CMutex, CEvent, CSemaphoreは欠陥がある」と主張してる人がいるんですが、本当でしょうか?
ググっても見付かったのは↓くらいで、裏付けに乏しいように思えるのですが。 ttp://www.flounder.com/avoid_mfc_syncrhonization.htm
- 327 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:50:36 ]
- >>326
確かにそのページの主張には同意しかねるね。 CMutexについてはタイムアウトを特別視する用途以外(所有権が取得できたかどうかだけを知りたい場合)なら問題なさそうだし。 CSingleLockの再帰呼び出しはそもそも想定外の使い方だと思う。 CreateMutexの記述には待機関数を同じスレッドで繰り返し呼び出してもいいけど、 待機条件を満たす毎にReleaseMutexを呼べと書いてある。
- 328 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 23:00:10 ]
- 再帰でデッドロックするのは当たり前だろうと
- 329 名前:326 mailto:sage [2009/02/07(土) 23:58:47 ]
- >327-328
ありがとうございます。 やはり欠陥と言うほどではないようですね。
- 330 名前:デフォルトの名無しさん [2009/02/08(日) 10:00:58 ]
- MDIでファイルを起動時に読み込むとき、pDocTemplate->OpenDocumentFileみたいな
ことをしますが、initInstance意外の場所でするときにpDocTemplate->OpenDocumentFile を使うとき、newとかあたりをどうやってコーディングすればいいか分からないのですが 教えてください。
- 331 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 10:58:25 ]
- 素直に CxxxApp::OpenDocumentFile() を使え
- 332 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:14:22 ]
- DrawTextで文字の背景を塗りつぶすのってどうやるんですか?
DT_NOCLIPだけで出来てるところもあるのでDT_NOCLIPを付けたんですが白で塗りつぶされてしまいます。 色を指定しなくてもいいんですが、文字ボックスが出来ないようにしたいんです
- 333 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:30:44 ]
- CDC::SetBkMode() で OPAQUE 指定かな?
色はCDC::SetTextColor() 文字ボックスってなんだっけ。
- 334 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:31:16 ]
- // CDC::DrawText
// このメンバ関数は、テキストを描画するために、デバイス コンテキストに現在選択されているフォント、テキストの色、背景色を使います。 ちゃんとマニュアル読めよ。 CDC::SetBkColor CDC::SetBkMode
- 335 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:32:33 ]
- ああ、背景の色だったな、すまん
- 336 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:50:07 ]
- そうだったBKだった思い出した
Brushだと思い込んでた thx
- 337 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 18:13:27 ]
- ウィンドウの関係がわかりません。
CStaticのなかにCStaticを作った時 中のCStaticにクリックメッセージを送るには,Zオーダーをどうしようが外から中にメッセージを素通りさせるコードを書かない限り 届かないんでしょうか? 塗りつぶしの順序とか考えてたらわけわからなくなって来たんですが、 どうすれば整理できて自由に子、孫などにメッセージが届くようになりますか?
- 338 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 18:32:58 ]
- SS_NOTIFY
- 339 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 18:37:01 ]
- スタティックは特別だったんですね。なんで他のと出来たりできなかったりとわけわかんなかったんです
ありがとうございました
- 340 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 19:03:40 ]
- 特別というか「スタティック」なんだから、本来はそういう動的な目的では使わない。
スタティック=静的。
- 341 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 19:08:47 ]
- CWndだとパラメータとかが複雑じゃないですか
だからなんか作る時はCStaticを基本にしてるんですが、もっといいのあるんですか?
- 342 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 21:10:47 ]
- 状況がよくわからない。
パラメータが複雑で嫌気がさすほど、メインウィンドウにいくつものウィンドウがあるのか?
- 343 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 21:14:09 ]
- スタティックコントロールもウインドウには変わりないだろ
いらないメッセージが発生しないようにデフォルトで殺してるだけで、 デフォルト以外がアブノーマルな使い方とは思わないな
- 344 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 21:15:02 ]
- カスタムコントロールとかは?
- 345 名前:名無し募集中。。。 mailto:sage [2009/02/08(日) 22:40:54 ]
- スタティックコントロールにIDを振れば良いじゃない
- 346 名前:デフォルトの名無しさん [2009/02/08(日) 22:52:27 ]
- MFCってなんで、.NETみたいにポトペタ環境にしないの?
コントロールも.NETの1/10位しかないし・・・
- 347 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:17:34 ]
- >コントロールも.NETの1/10位しかないし・・・
kwsk
- 348 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 00:35:50 ]
- >>346
.netってツリーのドラッグアンドドロップとか リストコントロールのウィンドウ枠の固定機能とかって楽にできるようになってる? 結構、客から要望くる機能で毎回作らないといけないんだけど・・・
- 349 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 00:52:03 ]
- ウィンドウ枠の固定ってなんだ?
コンテナに貼り付けてDock指定するやつのことかな?
- 350 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 01:03:02 ]
- >>349
エクセルを開くんだ
- 351 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 05:58:17 ]
- SS_NOTIFYでCStaticの子どもにメッセージが届くようになりましたが
今度は子がある部分をクリックしたとき親のクリックが実行されなくなりました。 クリックした場所にある特定の全ウィンドウにクリックを送るにはどうすればいいんでしょうか
- 352 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 07:24:24 ]
- MFCはAPIをラップしたようなコントロールしかないんだよな
- 353 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 10:00:45 ]
- まぁそこから派生クラス作るわけだね 自作コントロール作るにはもってこいだ
- 354 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 10:17:48 ]
- >子がある部分をクリックしたとき親のクリックが実行されなくなりました
親は「クリックされていない」からな。 クリックされた座標を含むウィンドウを列挙して、それらのウィンドウすべてにメッセージを送る関数を 自前で作るしかあるまい。
- 355 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 14:24:33 ]
- CMFCMenuBar を使うと、例えば ファイル(F) とかの F の下にラインが引かれないんだけど、
これはどうすれば直る? TBSTYLE_NOPREFIX はつけていないんだけど・・・。
- 356 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 16:01:07 ]
- >>355
当然、文字列は「ファイル(&F) 」ってやってるんだよな? ところで、プルダウンメニューはCMenuだと思うけど、CMenuBarを使ってる ということは、ツールバーのボタンのキャプションでアンダーバーが表示 されないってこと? そもそもツールバーやダイアログバーに、そんな機能あったっけ?
- 357 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 17:38:09 ]
- >>355
MFC内部で&を消して描画してるから無理。 &&Fとか&&&Fって書けば表示はされるけどAlt+Fに反応しなくなるからやはり無理。 フューチャーパックは問題だらけだから諦めろ。
- 358 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 17:40:08 ]
- >当然、文字列は「ファイル(&F) 」ってやってるんだよな?
もちろん。 たとえば IE7 のメニューバー。あれもツールバーじゃん。そこにはアンダーバーがついてる。 他のアプリケーションでも同じ。 だけどCMFCMenuBar を使うと付かない。 Visual C++ 2008 Feature Pack のサンプル見ても付いてないんで仕様なのかなという気もするんだが、 何か見落としているよーな気もしてしっくりこないんだわ・・・。
- 359 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 17:41:58 ]
- おっと、書いているうちに書き込みが。
>>357 やっぱ仕様ということね。ふむ。
- 360 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 17:45:34 ]
- Feature Packなんてあるの初めて知ったわ まだベータ版なのか
でもおれのVSは2005(´・ω・`)
- 361 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 17:47:25 ]
- と思ったら今はリリースverなのね、スマソ
- 362 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 17:48:00 ]
- いやもうSP1に組み込まれてる。
- 363 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 20:19:08 ]
- C++0x よりも 2008 SP1 のバグフィックスに力を入れて欲しいよな
バグがあるうちは業務で使えない
- 364 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:54:11 ]
- Feature PackでCDialogBarって表示される?
俺だけなんかな?
- 365 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 19:04:27 ]
- CPaneDialogを使えば CMFCxxxBar と連携できるのでは?
- 366 名前:364 mailto:sage [2009/02/10(火) 19:31:47 ]
- >>365
CPaneDialogのCreateメンバで、IDを指定するのね。 おぉぉーできたwww サンクスコ
- 367 名前:デフォルトの名無しさん [2009/02/11(水) 20:44:07 ]
- MDIでexeのアイコンにドラッグ&ドロップをするとファイルが開けるようにしたいのですが、
CString drag_file(m_lpCmdLine); if (drag_file != _T("")) { pDocTemplate->OpenDocumentFile(drag_file); } ではファイルが見つからないというメッセージボックスが出てうまくいきません。 MessageBox(drag_file);として見ても、ちゃんとドラッグしたファイルパスが拾えてるのですが・・・ どうすればイイですか?
- 368 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:47:54 ]
- ちゃんと引数飛んできてるか?
- 369 名前:デフォルトの名無しさん [2009/02/11(水) 21:03:37 ]
- MessageBox(drag_file);で見えるのできてるハズですが・・・。
- 370 名前:デフォルトの名無しさん [2009/02/11(水) 21:21:37 ]
- デバッグのパラメータにパスを入れたら起動してますます理解に苦しんでいるのですが、
Unicodeで開発しているのですが、文字コードのせいとかありますか?
- 371 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:46:47 ]
- MessageBoxじゃなくてデバッガでデバッグしろ
- 372 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:49:21 ]
- >>367
CString drag_file; drag_file.Format( _T("\"%s\""), m_lpCmdLine); // To Do...
- 373 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 21:37:19 ]
- すんません質問です。
VC2005で、CRichEditCtrlをもったダイアログベースのアプリを作っております。 CRichEditCtrlにShift_JISにないような文字(「もげる」を変換したらでる漢字とか)を 入れて、GetWindowTextWでその文字をCStringに取り込むと、その文字が?になって しまいます。これを回避する方法はありませんでしょうか?
- 374 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:20:44 ]
- CStringが実はCStringAでした、ってオチは嫌だなあ。
昔と違って、今は簡単にMBCS/Unicode変換しちゃうからなあ。
- 375 名前:373 mailto:sage [2009/02/16(月) 22:47:35 ]
- soudan1.biglobe.ne.jp/qa4140782.html
↑で解決しました。お騒がせして申し訳ありません。
- 376 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 00:33:49 ]
- リソーススクリプト上だと、常に"RichEdit20A"で固定なのが大元の原因か。
なるほどなあ。
- 377 名前:デフォルトの名無しさん [2009/02/17(火) 21:49:00 ]
- う〜ん、serialize中にファイルが壊れている事に気づき、
子ウィンドウを開くのをやめたい場合ってどうしてます?
- 378 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:26:50 ]
- 気づいたのなら開かなきゃ良い。
子ウィンドウとは何物?
- 379 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 07:47:41 ]
- MDIのことか?
- 380 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 00:55:42 ]
- メインウィンドウから起動するダイアログにラジオボタンを設置しました。
起動時に選択されているラジオボタンを(動的に)変更したいのですが、やり方がわかりません。 ダイアログのコンストラクタ中でSetCheckをしても、 コンパイルは通るのですが、デバック中に「Debug Assertion Failed!」 と落ちます。(まだ実体ができてない?)
- 381 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 01:37:19 ]
- つ oninitdialog()
最近MFCやってないからあやふやだ・・・ 来週からまた使うことになりそうだからリハビリせねば
- 382 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 01:53:11 ]
- >>381
thx!できました。オーバーライドするのね。 ↓参考にしました rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200504/05040016.txt
- 383 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:26:30 ]
- >>382
既に見ていないかもしれないが ... ダイアログ派生クラスに、ラジオボタンに対応するint型のメンバ変数を 割り当てて、DoDataExchange()内でDDX_Radio(pDX,...)でコントロール に関連付けておけば、ダイアログウィンドウが生成されていないタイミ ングでも、クラスのオブジェクトが生成された時点で、メンバ変数には アクセスできるので、メンバ変数の初期値を変更してDoModal()すれば、 ラジオボタンの初期値を変更できるよ。 クラスウィザードでメンバ変数を割り当てると、コンストラクタで「-1」に 初期化されるコードが自動生成されるので、これを0〜の値にすればいい。
- 384 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 19:36:04 ]
- >クラスウィザードでメンバ変数を割り当てると、コンストラクタで「-1」に
>初期化されるコードが自動生成されるので、これを0〜の値にすればいい。 VS2008 だと初期値は 0。修正されたのかな。 ちなみに、変数のカテゴリには Value を選ぶこと。
- 385 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:18:58 ]
- MSDNのScribbleサンプルなんかを見ると、
リスト(m_strokeList)や配列(m_pointArray)などのメンバは堂々とpublicで、 描画時などは外から直接参照したり操作してるけど、 これってやはり手を抜いているだけでしょうか? それとも、この程度のものはいちいちカプセル化しないものなのでしょうか?
- 386 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:44:12 ]
- Scribbleサンプルって15年くらい前からあるよな・・・
- 387 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 11:48:51 ]
- >>385
クラスウィザードでメンバ変数を作ると、意識して設定しない限り public になる。
- 388 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:00:41 ]
- MSのサンプルは「動けばまだマシな方」くらいに思っとかないと。
- 389 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:03:47 ]
- CPaneDialog型って、リサイズをさせたくない場合どうすればいいんでしょ?
知っておられる方、情報をお願いします。
- 390 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:31:33 ]
- CBasePane::CanBeResized をオーバーライドして FALSE を返す
- 391 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:32:21 ]
- 「このメソッドは現在実装されていません。」だった。すまん
- 392 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:34:25 ]
- 実装すればいんだから、それでいい
- 393 名前:389 mailto:sage [2009/03/03(火) 09:10:56 ]
- >>390-392
Visual Studio 2008のIDEでは、 派生元へのオーバーライドができないのね・・・手書きなのか・・・ できました! ありがとうございます!
- 394 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 14:23:17 ]
- むみません。
ダイアログ上でレイアウトされたグループボックスにて、 文字色をで変更しようとSetTextColorを使ったのですが、 反映されませんでした。 何かコツみたいなものがあるのでしょうか? ちなみに環境はVS2008でMFC Feature Packを使っています。
- 395 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 14:56:00 ]
- むみません。
- 396 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 17:47:13 ]
- >>394
CWnd::OnCtlColor
- 397 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:37:02 ]
- VC++ 6 でプログラミングしています。
ポップアップメニューを表示しています。 各行で文字位置を合わせたいので固定ピッチのフォント を利用したいのですが、ポップアップメニューのフォント はどのようにすれば変更できますか? ポップアップメニュー作成は、TrackPopupMenuを使っています。
- 398 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:53:49 ]
- >>397
OwnerDraw Menu にする
- 399 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:48:22 ]
- ちと古いけど>>129の件、おれも悩んでたんで調べた結果を貼っとく。
afxGlobalData.SetMenuFontで設定するといいらしい。 他にもafxGlobalDataをいじるといろいろできるけど、 これ直接いじっていいんかな?
- 400 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:37:04 ]
- それをいじる関数として、CMFCMenuBar::SetMenuFont() が用意されているんだが。
- 401 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:27:13 ]
- あれ、CMFCMenuBarのヘルプを見てもFont関係が見あたらなかったから
MFCのソースを追っかけたのに・・・・ 思いっきり見落としたらしい。
- 402 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:56:41 ]
- ついでに言っておくと、WM_SETTINGCHANGE が飛んでくると
CMFCMenuBar::SetMenuFont() した内容はクリアされるから、再度設定しなおすこと。:-)
- 403 名前: ◆8x8z91r9YM [2009/03/09(月) 21:08:28 ]
- 質問です。
VS2005 MFCでCrystalReport(PUSH型)を扱ってる 参考になりそうなサイトをご存知の方おられましたら 教えていただけませんでしょうか? C#やVBなどは表示したいデータをDataSetでまとめて Crystalreportに渡して表示できますが、 それをMFCでどのように実装すればいいのか悩んでおります。。 よろしくお願い致します。
- 404 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 00:51:10 ]
- VS2008SP1のCMFCToolbarで、初期状態からアイコンの右側にテキストラベルを表示する方法は無いでしょうか。
ToolbarResetを発行してやると、文字は表示されるにはされるんですが、 カスタマイズ設定も消えてしまうので・・・
- 405 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 02:04:50 ]
- 横に表示できたっけ?
CMFCToolBar::EnableTextLabels() だと下に表示だよな。 CMFCToolBar::GetButton( nIndex)->m_bText = TRUE; あたりで試してみ。
- 406 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 06:25:28 ]
- VS2005 WinInet で http Postを使ってファイルアップロードをするプログラムを書いているのですが
うまくいきません。 ソース 80行程度をアップしてアドバイスを頂いてもよろしいでしょうか? 1週間ぐらい頑張りましたが分からなかったもので・・・。
- 407 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 08:02:46 ]
- それのどこがMFC?
- 408 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:28:21 ]
- 質問部分にCInternetSession等のMFCクラスを使ってれば質問は可
ただ「うまくいきません」としか説明できないんじゃ答えるつもりはない。
- 409 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:47:21 ]
- 406です。スレ汚し失礼します。
状態としてはデバッガ出力ではエラーは帰ってきていませんが スニファツールで見ると サーバから501エラーが帰ってきています。 サーバ側のPHPテストプログラムの方は $_FILES["upfile"]["tmp_name"] にも $_FILES['userfile']['error']にも 値が入ってきません。 多分ヘッダの送り方、設定の仕方がおかしいと思うのですが。。。 ソースは以下になります。
- 410 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:49:25 ]
- 80行貼るのかよ
ろだ使っては
- 411 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:49:28 ]
- #define APP_NAME "PostTool"
#define BOUNDARY "hogehoge" #define POST_FILE "C:\\TEST.DAT" #define BUF_SIZE 2048 bool PostData(TCHAR* uri){ bool bRtn = false; try { DWORD dwServiceType = 0, statusCode; CString strServer, strObject, strBuf, strBoundary = TEXT(BOUNDARY); INTERNET_PORT nPort; char szBuf[BUF_SIZE + 1]; if (AfxParseURL(uri, dwServiceType, strServer, strObject, nPort) == false) {OutputDebugString(TEXT("PostData() AfxParseURL失敗\n")); goto pd_End;} CInternetSession session(TEXT(APP_NAME)); CHttpConnection* conn = session.GetHttpConnection(strServer, CHttpConnection::HTTP_VERB_POST, nPort, NULL, NULL); CHttpFile* file = conn->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject, NULL, 1, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE);
- 412 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:59:43 ]
- すいません あっぷろだに置きました。
411の投稿すいませんでした。 ttp://www7.uploader.jp/dl/game/game_uljp00007.txt.html
- 413 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:04:14 ]
- support.microsoft.com/kb/811262/ja
エラー メッセージ : エラー 501/505 - 未実装または未サポート [HTTP 1.1 を使用する] チェック ボックスをクリックしてオフにし、[OK] をクリックします。 テストして問題が解決したかどうかを調べます。 2002 年 12 月現在、HTTP 1.1 は新しい Internet プロトコルです。 一部の Web サイトでは HTTP 1.0 が使用されているため、HTTP 1.1 を使用した場合、 接続の問題が発生することがあります。
- 414 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:44:28 ]
- こういう場合
プログラムに問題がある 設定が間違ってる 使い方が間違ってる ネット上にトラブルがある メールを送った相手に問題がある みたいにありとあらゆる原因が考えられるわけだけど いきなりプログラムのソース見ろと言われても 設定が間違ってる 使い方が間違ってる ネット上にトラブルがある メールを送った相手に問題がある だったら見るだけ無駄だろ
- 415 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:49:36 ]
- サーバ側のhttpdのログ見たらわかると思うよ
- 416 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:01:28 ]
- こういった感じでソース書いている人って多いのか?
・グローバル関数だし、 ・コメントないし、 ・goto ラベル使い放題だし、 ・for(;;)だし・・・ (while() 使えよ)
- 417 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:15:34 ]
- 別に習作なんだし
そういう関係ないところつっこむからソース出したがらない質問者が増える
- 418 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:29:12 ]
- Httpは手順が多くてネストが深くなるしエラー処理も多いからどうやっても汚くなる
手抜きしないできれいに書いてあるサンプルあったら見てみたい
- 419 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:32:03 ]
- >>416
> ・グローバル関数だし、 > ・コメントないし、 コミュニケーション能力重視とか、ヒューマンスキル重視の現場では、 ありがちだ。 業務で引き継ぐと悲惨なパターン。 しかも極端な場合、グローバル変数の名前が「i」なんて場合もある。 > ・for(;;)だし・・・ (while() 使えよ) 個人的には「while(1)」の方が好みだけど、「for(;;)」の方が推奨 されているらしい。 しかし、「for(;;)」を使いながら、forループ内で「if(...) break;」 はやめてほしい。
- 420 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 22:46:05 ]
- >>419
>しかし、「for(;;)」を使いながら、forループ内で「if(...) break;」 そりゃ無茶や。 全く脱出しないループで外部から殺してもらうってことなら兎も角、 ループ内の何かの事象で脱出したくなることくらいあるだろよ。
- 421 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 22:52:57 ]
- >>416
while(1)はMS-C V6がwarning吐いてたから、おれはfor(;;)使うよ。 >>420 そういう場合forに脱出条件を入れろという説がある。 おれは基本的に嫌いだけどね。
- 422 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:05:32 ]
- for (;;) {
...; someStatus = someFunction(); if (someStatus) break; ...; ...; } -- よくありがちなこんなコードを否定するのかな?
- 423 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:25:55 ]
- someStatus が いつか必ず TRUE になるという保証があるなら、かまわんのでは。
無限ループの可能性を残すコードを、おれ個人は書かないけど。
- 424 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:30:58 ]
- for (;;)の正しい使い方が良くわからないからMFCのソースの中探してみたけど
やっぱfor (;;)とbreakはセットで使ってるね 以下VC6のMFC SRC\AFXMEM.CPP(322): for (;;) SRC\AFXMEM.CPP(371): for (;;) SRC\APPUI1.CPP(172): for (;;) SRC\ARCCORE.CPP(816): for (;;)
- 425 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:35:02 ]
- 下らない疑問かもしれませんが質問させてください。
MFCでコントローラに追加した文字列のメモリ管理ってどうなってるんでしょうか? 例えば、以下のような場合、FuncA()関数を抜けたときに strのアドレス先のメモリが解放されて、コンボボックスで strの文字列が参照できなくならないのでしょうか? 試したところ問題ないようですが、不思議です。 void FuncA() { CString str; m_pCmbBox->AddString(str); //メンバ変数であるコンボボックスに文字列追加 }
- 426 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:45:01 ]
- コントロールが別のところでメモリを割り当ててるのさ。メモリの割り当てに失敗したら
CBN_ERRSPACE が通知されてくる。 これはMFCの質問じゃないな。
- 427 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:50:26 ]
- >>426
すみません、もう一歩だけお願いします。 調べるなら、C++のメモリ管理で調べればいいでしょうか?
- 428 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:51:14 ]
- フォントなんかが参照不能になるのは
描画のタイミングが関数抜けた後だから 文字列は渡し終わってるから問題なし
- 429 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:10:04 ]
- >>426, 428
まとめるとこうでしょうか。 ・コントローラに文字列を渡すと、コントローラが新たにメモリを割り当てる。 ・この場合、関数を抜けた後も、描画タイミングで割り当てられたメモリが参照されるので問題なし ただしフォントの場合は、メモリ割り当てが行われない(?)ので、関数を抜けると参照不能 コントローラのメモリ管理について調べてみます。 ありがとうございました。
- 430 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:18:04 ]
- どうでもいいけど「コントローラ」ってなんだよ。
controllerじゃなくてcontrolだぞ。
- 431 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:28:17 ]
- >>430
訂正thx。気をつけますw
- 432 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:44:32 ]
- >ただしフォントの場合は、メモリ割り当てが行われない(?)ので、関数を抜けると参照不能
これは単にスコープの問題
- 433 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 10:43:00 ]
- スコープの問題じゃなくて、寿命の問題。
スコープが外れても寿命が続くのなら大丈夫。 だから例えば、staticでも(一代限りは)使える。
- 434 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:06:01 ]
- フォントって、CFontクラスやCBrushクラス等のGDIオブジェクトをローカル
変数で作成したなら、関数を抜けた時点で変数の寿命が尽き、DeleteObject() を呼んでいなくてもデストラクタから(メンバ変数のm_hObjectを使って)強制 的にDeleteObject()が呼び出され、(GDIオブジェクトとそのハンドルが)破棄 される。 CFont *pFont=new CFont; などとやった場合、ポインタ変数の寿命が尽きても、newしたオブジェクト 自体はdeleteはされないので、プロセス終了まで、紐が切れた凧のように メモリ空間に残る。 95系だとプロセス終了でも解放されず、リソースリークになるんだっけか? static で宣言したオブジェクトでも、 if(s_FontStatic.GetSafeHandle()) s_FontStatic.DeleteObject(); s_FontStatic.CreateFontIndirect(...); と破棄する手順を踏めば、何回でもリサイクルできる。
- 435 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 02:34:29 ]
- CMFCToolbar上にStatic Textを作成できないですかねぇ・・・
- 436 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 10:05:36 ]
- >>435
CMFCToolbar って、CDialogBar よりも美味しいの? スタティックテキスト相当な機能なら、わざわざウィンドウを置かなくても CString型のメンバ変数を追加して、ツールバーの描画処理を自前でやれば いいだけのような肝。
- 437 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 23:37:17 ]
- >>435
つCStatic::Create
- 438 名前:デフォルトの名無しさん [2009/03/22(日) 15:54:16 ]
- ダイアログ上のコントロールのタブオーダーが一つ前のコントロールIDを調べるにはどうしたらいいんですか?
例えばCEditが10個並んでいるとして、5番目のタブオーダーのCEditにフォーカスがある時に、 4番目のタブオーダーのコントロールIDを調べたいんですが。 "タブオーダー MFC"でググってもタブオーダーを変更する方法しか見つからなくて。 タブオーダーがらみのAPIって無いんですかね?
- 439 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:23:08 ]
- CWnd* pWnd = wndEdit.GetWindow( GW_HWNDPREV):
if ( pWnd->GetStyle() & WS_TABSTOP) UINT nID = pWnd->GetDlgCtrlID(); // こいつがそう。 else pWnd = pWnd->GetWindow( GW_HWNDPREV); 以下繰り返しってな感じで取得できないかな。 実際には while ループするほうがお得だろうが。
- 440 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:14:26 ]
- >>439
どうもありがとうございます。 GW_HWNDPREVというのはウインドウのZオーダー順であるだけでなく、 Window上のコントロールのタブオーダー順でもあるんですね。
- 441 名前:デフォルトの名無しさん [2009/03/22(日) 21:59:09 ]
- C初心者スレで相手にされなかったので、質問させてください
MFCでアプリを作っているのですが、 動作確認のため、コンソールも起動しております。 _cprintf_sや_cscanf_s関数を使っているのですが、 _cscanf_s関数でバックスペースのキーを入力すると、 プログラムが無限ループで暴走してしまいます。 普通のscanf()関数のようにバックスペースで一つ前の文字を削除するには どうすればよいでしょうか?
- 442 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:07:52 ]
- 暴走するようなもの使うな
- 443 名前:名無し募集中。。。 mailto:sage [2009/03/23(月) 09:08:39 ]
- MFCも使っているのかもしれないけど_cscanf_s関数ってMFCじゃないし
コンソールならダイアログにEditコントロールを置いて表示・入力するって感じになりそうだけど デバッグ表示だけならTRACEマクロが便利 値の入力は・・・ちょっと試すだけならブレイクポイントで値の代入とか
- 444 名前:デフォルトの名無しさん [2009/03/23(月) 21:24:49 ]
- いまさらながら、mfcおもしろいお。
詳しい説明書ないかお?
- 445 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:07:58 ]
- SP1以降の解説か、まだないかもな。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 17:14:26 ]
- >>444
SP1非対応でよければMicrosoft Pressの「プログラミングVisual C++.NET Vol.1/2」 Vol.2の最後にちょろっと.NETの説明があるけど、それ以外はMFCの説明になってる
- 447 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:59:37 ]
- 後はmfcのソース読んどけ、ってところだな。
ドキュメント化されていない情報が山ほどあるし。 別に全部目を通さなくても、疑問に思った箇所だけで十分。
|

|