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