■MFC相談室 mfc17d.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/21(火) 10:38:31前スレ
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
0656デフォルトの名無しさん
2007/05/02(水) 18:58:47解決の重要な手がかりなんだから。
0657デフォルトの名無しさん
2007/05/02(水) 19:14:54モーダルならそういう風にローカル変数でもいいけど
モードレスだと関数抜けた後のことが気になる。
0658デフォルトの名無しさん
2007/05/02(水) 19:17:27PostNcDestroy で delete this が入ってるか、メッセージで何とかしてるのかと
0659654
2007/05/02(水) 21:03:30すいません、説明不足でした。
わかっている限りだと2パターンの変な挙動をしていて
1つはダイアログのウィンドウ自体は生成されているようでウィンドウの移動などはできるのですが
再描画のコードが動作していない時のような感じになる事があるのと(必ずというわけでも無いようです)
生成した孫ウィンドウがアクティブな間は何の問題も無く動作しているように見えるのですが
一度、子のウィンドウをアクティブにしてしまうとアプリケーション自体がフリーズしたような
状態になってしまうといった感じです。
念のためSDIの新規プロジェクトを作り直して見ても結果は同じでした。
>>657,658
一応 PostNcDestroy で delete this をしていました。
こういう場合でもスタティックかグローバル変数にしておいた方が安全なのでしょうか?
0660デフォルトの名無しさん
2007/05/02(水) 21:44:10思いつきで書いただけだから
「関係ないけど」と断ってる
0661デフォルトの名無しさん
2007/05/02(水) 21:45:08ttp://msdn2.microsoft.com/en-us/library/ms633541.aspx
>if hWndNewParent is not NULL and the window was previously a child of the desktop,
> you should clear the WS_POPUP style and set the WS_CHILD style before calling SetParent.
>Windows 2000/XP: When you change the parent of a window, you should synchronize the UISTATE of both windows.
なんでSetParent使ってるの?
ダイアログリソースに子スタイル設定して、Createで親指定すればいいのに。
0662デフォルトの名無しさん
2007/05/03(木) 00:14:49質問させてください
MFCでコンソールアプリって作成出来ないですよね、バージョンは問いません。
0663デフォルトの名無しさん
2007/05/03(木) 00:24:430664デフォルトの名無しさん
2007/05/03(木) 00:52:33え〜まじっすか?
新規作成→プロジェクトからはMFC ActiveX ContorolWizard or MFC AppWizard(dll) or MFC AppWizard(exe)しかないのだけど?
これじゃあコンソールアプリは作成できないよね?
0665デフォルトの名無しさん
2007/05/03(木) 00:57:51Win32コンソールプロジェクトを選択して、詳細でMFCサポート追加しろ。
0666デフォルトの名無しさん
2007/05/03(木) 01:16:56そういう裏技があったのね、サンクス
0667デフォルトの名無しさん
2007/05/05(土) 09:51:020668デフォルトの名無しさん
2007/05/05(土) 10:28:540669デフォルトの名無しさん
2007/05/06(日) 00:16:24一見便利そうに見えるけどインスタンスがハッキリしないから
すげー扱いづらい
こういう仕様デフォにする奴ってアフォだろ
なげー文字列をCStringで扱うとアフォかってほど遅くなる
結局、使えない
0670デフォルトの名無しさん
2007/05/06(日) 00:49:03○(・ω・)○ ソンナコトイワレテモ
○○○ ウチ、ボン・デ・ライオンヤシ
.c(,_uuノ
0671デフォルトの名無しさん
2007/05/07(月) 11:46:34>インスタンスがハッキリしないから
君が何を言っているのか判らないよ…
理解できてないだけじゃ?
0672デフォルトの名無しさん
2007/05/07(月) 11:54:13せめて他の文字列を取り扱う手段と比較してから結論を出してくれ。
0673デフォルトの名無しさん
2007/05/07(月) 17:21:390674デフォルトの名無しさん
2007/05/07(月) 18:55:30CDialogを継承した派生クラスを作りました。
コントロールは、追加したメンバ変数を操作して
扱えましたが、ダイアログ自身はどうやれば操作
できるのでしょうか。
タイトルバーの文字列を変更する方法を模索中です。
this->SetWindowText("タイトル文字列");
を試すと異常終了だし。
0675デフォルトの名無しさん
2007/05/07(月) 19:29:26我が左手に封じられし鬼よ
今こそその力を、示せえーー!!
うおおおおおおーーー!!!
俺の生徒に、手を出すなあーーー!!!!
0676デフォルトの名無しさん
2007/05/07(月) 20:10:38異常終了の詳細キボンヌ
0677デフォルトの名無しさん
2007/05/07(月) 20:22:51「Visual C++ Runtime Error [中止][無視][キャンセル]」
のような感じ文面のダイアログが出て終了。
本来ならそれで正解のはずということでしょうか。
何らかのプログラム上のミスが原因で異常終了が出てるのではないか
という意味でしょうか。
0678デフォルトの名無しさん
2007/05/07(月) 20:30:27コンストラクタの中とかじゃダメだよ。
ちゃんとウィンドウが作成されてCDialogオブジェクトに
アタッチされてからじゃないと。
0679デフォルトの名無しさん
2007/05/07(月) 20:40:02じゃ、mallocで確保した領域に突っ込んだ文字列でいいよ
これで想像付く?
後付けであれがないこれがないごちゃごちゃいうなよぶっ殺すぞ
0680デフォルトの名無しさん
2007/05/07(月) 20:43:58エディットコントロールやスタティックテキストの値を変更している直後
で呼び出してます。
SetWindowTextで正解で、やはり何かプログラム上のミスでしたか。
わかりました、ありがとうございます。
0681デフォルトの名無しさん
2007/05/07(月) 20:50:22そもそもエラーで止まったところで何エラーなのか調べなさいよ
0682デフォルトの名無しさん
2007/05/07(月) 20:58:270683デフォルトの名無しさん
2007/05/07(月) 22:29:57想像も何も、あんたが比較して実際に遅いかどうか判断しなさいよ。
0684デフォルトの名無しさん
2007/05/07(月) 22:39:03CStringは糞だろ
文字列に1文字ずつ足していくとどんどん遅くなってく類だろw
0685デフォルトの名無しさん
2007/05/07(月) 22:42:11まさかとは思うが、CString foo = ""; for (;;) {foo = foo + '-'; std::cout << foo << std::endl;} とかしちゃってるんだろうかw
0686デフォルトの名無しさん
2007/05/07(月) 23:04:49CString hoge, hoge2;
strcpy(hoge.GetBuffer(20), "this is a test.");
hoge=""; //クリアしたつもりだけど何故かクリアされていない
int length=hoge.GetLength(); //この値は確かにゼロ
hoge2=hoge; //でもhogeもhoge2も"this is..."が入る
hoge="AAA"; //これなら上書きされる
int length2=hoge.GetLength(); //この値は3
hoge=""; //今度はきちんとクリアされる
0687デフォルトの名無しさん
2007/05/07(月) 23:06:47mStr += strbuff;
mStrはCString型のメンバ変数、strbuffは引数からうけとったchar*
メソッド実行するたびに鬱になるw
後、CStringの変数を引数に突っ込んで中身を変更したいときとかウザイ
transUnko(char* unko,char* chinko)
ってときにいちいち移し変えなきゃいけねぇじゃん
それか
transUnko(CString *unko,char *chinko)
作らなきゃいけねぇじゃん(俺の知識だと)
後、
strXXX系の関数でいい感じにすでにこさえてあるC言語自分ライブラリ使いたいときも面倒
つーか、気軽に文字列型として扱えないところがウンコだね
うにこーど?いらねぇってw対応予定ねーよ。マジでw
って書いてみたけどさ、
もし簡単にできるにしてもできることがわかりにきぃ
ねっとりべっとりしてやがんだこのクラス
つかいにくーい!
0688デフォルトの名無しさん
2007/05/07(月) 23:18:12MFCの中では評判いいクラスだと思う。
慣れないと使いにくいのは確か
0689デフォルトの名無しさん
2007/05/07(月) 23:24:37CString::GetBuffer
解説
GetBuffer 関数から返されるポインタを使って文字列の内容を変更するときは、
次に他の CString メンバ関数を使う前に、ReleaseBuffer 関数を呼び出す必要があります。
0690デフォルトの名無しさん
2007/05/07(月) 23:38:10というのも、delayimp.libの中ではAfxLoadLibrary()ではなく、
LoadLibrary()を使っているから、どうなんだろう??
0691デフォルトの名無しさん
2007/05/08(火) 01:12:30MFCが自動的にやってくれるようになっただけで。
0692デフォルトの名無しさん
2007/05/08(火) 03:18:26次に他の CString メンバ関数を使う前に、ReleaseBuffer 関数を呼び出す必要があります。
CString hoge, hoge2;
strcpy(hoge.GetBuffer(20), "this is a test.");
hoge=""; //クリアしたつもりだけど何故かクリアされていない
int length=hoge.GetLength(); //この値は確かにゼロ
hoge2=hoge; //でもhogeもhoge2も"this is..."が入る
↑↑↑ここでコンパイル時にエラー出してくれりゃいいのに
hoge="AAA"; //これなら上書きされる
int length2=hoge.GetLength(); //この値は3
hoge=""; //今度はきちんとクリアされる
0693デフォルトの名無しさん
2007/05/08(火) 05:58:01逆だな。ReleaseBuffer()する前にそうやってバッファを変更できないようにするためにGetBuffer()があるんだ。
つまり、fclose()しないでfopen()し直して、ファイルが更新されていないって文句言うようなもんだ。
>>687
少なくとも、レガシーな文字列とCStringを混在させて使うのが間違い。
型が違うのだから、相互にそのまま使えないのは当然だと思うが。
例えばprintf()に渡すように文字列を変更しないならキャストオペレータのお蔭で手間要らずなんだし。
Ex.
void printSample(const char * foo) {printf("%s\n", foo);}
CString bar = "Bar";
printSample(bar);
文字列を変更する関数は参照でも渡せばいいし。
Ex.
void buildString(CString & foo) {foo += foo;}
CString bar = "Bar";
buildString(bar);
0694デフォルトの名無しさん
2007/05/08(火) 11:21:24C++の事を何か勘違いしてるんじゃないだろうか。
0695デフォルトの名無しさん
2007/05/08(火) 11:25:020696デフォルトの名無しさん
2007/05/08(火) 22:15:500697デフォルトの名無しさん
2007/05/08(火) 22:56:290698デフォルトの名無しさん
2007/05/08(火) 23:29:510699デフォルトの名無しさん
2007/05/08(火) 23:45:24いまはループで回してsetItemでセル一個ずつにセットしてます。
もっと効率がいい方法があればいいのですが。
よろしくお願いします。
0700デフォルトの名無しさん
2007/05/09(水) 00:47:08つLVS_OWNERDATA
0701デフォルトの名無しさん
2007/05/09(水) 01:13:12Win32 GUI Generics
http://www.torjo.com/win32gui/
http://sourceforge.net/projects/win32gui/
0702デフォルトの名無しさん
2007/05/09(水) 14:03:56>C++の事を何か勘違いしてるんじゃないだろうか。
いやいや、
>↑↑↑ここでコンパイル時にエラー出してくれりゃいいのに
なんて書くくらいだから
勘違いとかそういうレベルじゃない。
0703デフォルトの名無しさん
2007/05/09(水) 15:19:500704デフォルトの名無しさん
2007/05/09(水) 21:51:00SetTextしても文字が表示されません。
ttp://athomejp.com/goldfish/mfc/dialog/statusbar.asp
MSDN等調べてみたのですが、実装方法がいろいろありすぎて、
どれが最適で何をしたらいいのかわかりませんでした。
すみませんが、よろしくお願い致します。
0705デフォルトの名無しさん
2007/05/09(水) 21:58:18ちょっと期待してたんだけど、全然更新されてないね…
0706デフォルトの名無しさん
2007/05/13(日) 01:32:28http://wiki.livedoor.jp/vipshogi/d/FrontPage
ここで、将棋の駒を擬人化するプロジェクトをやってるんだけど、プログラマにソースをもって逃げられてしまいました。
ついては、オープンソースで、新しくプログラムを作ろうと思っています。
MFCを使って作られたプログラムを弄れて、ギャルゲっぽいものに興味があって、協力出来る人がいたら、来てくれませんか。
現行スレは、↓です。
http://wwwww.2ch.net/test/read.cgi/news4vip/1178980360/
宜しくお願い致します。
0707デフォルトの名無しさん
2007/05/13(日) 01:41:34追記です。
現行スレが落ちていたら、↓に書き込みを下さい。
http://ex14.vip2ch.com/test/read.cgi/part4vip/1178465966/
0708デフォルトの名無しさん
2007/05/13(日) 02:10:27少しはまともな奴がいるっぽいけど
雑魚ばっかで話にならない
所詮妄想ばっかり先行してる烏合の衆か。
将棋部分に興味ないとかまったくわかんないとかレスが出るだけで俺は参加したくない。
馬鹿じゃねぇの
突破口だけいうと
フリーで将棋プログラム公開してる人に頼み込んで
画像表示部分だけちょいっと弄らせてもらって好きな絵表示できるようにしてもらったほうが
ナンボか可能性ある。
0709デフォルトの名無しさん
2007/05/13(日) 02:39:52どこを見たのか分からんが結構な物言いだな、特に前半
ちらっと覗いてみたが、そんなレスはなかったと思うが
0710デフォルトの名無しさん
2007/05/13(日) 03:27:34だいたいこの状況じゃ
一番苦しいのってまちがいなくメインプログラマーでしょ?
絶対やんねぇよ
ゲーム製作をなめてる
絵のことしか興味ないならビューワーでも作ってろっての
好き勝手要望出すだけの立場の奴等なんかプログラマーは殺意しか湧かない
ゲーム製作現場だって金もらえるからしょうがなく仕事してるのがプログラマーだ
この状況でソフト作ったらまちがいなくすべて俺の手柄だと俺だったら思うね。ていうか間違いねーよ。
それなのにオープンソースにします?はぁ?ふざけろ
だからさ、こういうのやるつもりなら企画をする人間が間違いなくメインプログラマーを張れる人間でなければ絶対に頓挫する
ゲーム製作で一番大変なのはまちがいなくプログラマーだ
実際身動きとれないでしょ?
どういうシステムにしてどういう形のデータが必要になるのか?
プログラマーがいなくてもここまではできますっていう部分あるか?
欠片も浮かばねーだろ?一歩も身動きがとれないでしょ?
0711デフォルトの名無しさん
2007/05/13(日) 04:12:48偉そうにリーダー気取ってる奴の懐にいくらか入ってんじゃねーの?
ブログとも繋がってるしな
0712デフォルトの名無しさん
2007/05/13(日) 06:21:48> A、バグ報告は多ければ多いほど、プログラム修正の参考になります。
なりません。
0713デフォルトの名無しさん
2007/05/13(日) 08:30:02大人気ないぜ
0714デフォルトの名無しさん
2007/05/13(日) 08:31:06え、どこに繋がってる?
0715デフォルトの名無しさん
2007/05/13(日) 12:30:42興味が先行してうっかりこれのメインプログラマーになっちゃった奴が可哀想だなと
0716デフォルトの名無しさん
2007/05/13(日) 14:10:01CListCtrlで「大きいアイコン」表示をした時、スクロールの方向はどうしても、横スクロールになってしまいますが、
これを縦スクロールに変更したいと思っています。
どうやれば、縦スクロールに変わるのでしょうか。
よろしくお願いします。
0717デフォルトの名無しさん
2007/05/13(日) 14:43:03http://pc11.2ch.net/test/read.cgi/tech/1164787254/946-951
から引っ越してきました。よろしくお願いします。
VS2005のMFCです。
CMainFramのID_FILE_NEWからOnFileNew関数を追加しました。
この関数で必要な処理の後、追加前の本来の処理を呼びだすか、
同等の処理を行いたいのですが方法がわかりません。その方法を教えてください。
0718デフォルトの名無しさん
2007/05/13(日) 14:44:14馬鹿には使えないからあきらめましょう
0719デフォルトの名無しさん
2007/05/13(日) 14:47:100720デフォルトの名無しさん
2007/05/13(日) 15:33:57http://pc11.2ch.net/test/read.cgi/tech/1059196520/
0721デフォルトの名無しさん
2007/05/13(日) 16:12:08OnFileNewを呼ぶ
0722デフォルトの名無しさん
2007/05/13(日) 16:12:30どちらかというと、CDocument::OnNewDocumentでどうにかすべきじゃね?
0723717
2007/05/13(日) 16:19:03CMainFrameにメッセージを割りあてたのが間違いでした。
CWinAppにプロテクトのOnFileNewがあってこれがデフォルトの処理のようです。
CxxAppに割り当てて、もとからあった
ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)を削除したら目的の動作になりました。
OnFileNewがプロテクトメンバだったので無いとか呼べないとか思ってしまったようです。
0724デフォルトの名無しさん
2007/05/13(日) 16:29:45なるほど、このスレの住人に対する優越感だったってわけか
0725デフォルトの名無しさん
2007/05/13(日) 16:43:450726デフォルトの名無しさん
2007/05/13(日) 16:50:27アフィってこと?
そんな感じに見えないんだけど……。
0727デフォルトの名無しさん
2007/05/13(日) 17:07:400728デフォルトの名無しさん
2007/05/13(日) 17:49:34じゃあ、稼がせてやったらいいよw
0729デフォルトの名無しさん
2007/05/13(日) 18:18:01質問に答えないで笑うだけとは、お前、アフォにしか見えんな
そんなに貶めたいなら、向こうで文句言ってくればいいだろうに
こっちに問題を持ち込むなよ
0730デフォルトの名無しさん
2007/05/13(日) 18:22:59そのレスを>>706に付けずに俺に言う辺り、お前も相当頭おかしいだろw
0731デフォルトの名無しさん
2007/05/13(日) 18:27:15反応するよりましだと思うが
まあいいや、お前がいなくなったらまたこよう
0732デフォルトの名無しさん
2007/05/13(日) 18:32:43俺はただ単に、アフィしてるような場所ならいかないけど、そうじゃないなら手伝っても良いかなって思っただけなんだけど
0733デフォルトの名無しさん
2007/05/13(日) 18:50:050734デフォルトの名無しさん
2007/05/13(日) 20:27:540735デフォルトの名無しさん
2007/05/13(日) 23:10:24LVS_ALIGNTOP。
プロパティウィンドウなら、表示-Alignment-Topを選択。
0736デフォルトの名無しさん
2007/05/14(月) 00:31:26ありがとうございます、一発で解決しました。
0737デフォルトの名無しさん
2007/05/17(木) 01:56:51これに対して外部からの通信などによって破棄処理がキックされたとします
すると TrackPopupMenu の後の処理が終わっていないためなのかエラーとなって不正終了してしまいます
これを防ぐにはどうしたら良いでしょうか?
(≒ OnDestroy でポップアップを正常に終了させるにはどうしたら良いでしょうか?)
( つまり TrackPopupMenu の後の処理を実行させるということです)
VK_ESCAPE をポップアップの親ウィンドウに SendMessage することなどを考え付いたのですが、
それでもうまくいかずにほとほと困っております
何かご存知でしたら教えてくださいm(_ _)m
にならないようにする=時間のかかる処理の合間にメッセージループを回すようにする
0739デフォルトの名無しさん
2007/05/17(木) 18:39:02TrackPopupMenu の動作を知らんのか
0740デフォルトの名無しさん
2007/05/20(日) 00:15:39>TrackPopupMenu の動作云々の前にお前が何をしたいのかが解らんなw
0741デフォルトの名無しさん
2007/05/20(日) 10:29:32EndMenu
0742デフォルトの名無しさん
2007/05/20(日) 12:17:310743デフォルトの名無しさん
2007/05/20(日) 12:43:180744デフォルトの名無しさん
2007/05/22(火) 00:53:15情報ありがとうございます
ところで、その関数はどのように使用すればよろしいですか?
インターネットで検索してみたのですが、適切な情報が見つからなかったのですが……
0745デフォルトの名無しさん
2007/05/22(火) 01:55:02ttp://msdn2.microsoft.com/en-us/library/ms647637.aspx
0746デフォルトの名無しさん
2007/05/22(火) 22:37:22ありがとうございます
英語ですか……
中学の時英語は常に1or2だった自分には辛いですねorz
0747デフォルトの名無しさん
2007/05/23(水) 05:34:15マニュアル英文だから変な構文も使われていないし、まともに日本語訳する必要も無い。
0748デフォルトの名無しさん
2007/05/25(金) 14:33:09メニューのポップアップ内を動的に作ろうとしてるんですけど、
このポップアップ項目の種類(たとえば「お気に入り」とか)は
どうやって調べればよいのでしょうか。
ポップアップ項目自身にはIDは付けられませんよね。
メニューの複数箇所やコンテキストメニューにも
同じ「お気に入り」ポップアップを置きたいので、
OnInitMenuPopup()の中で「お気に入りかどうか」を判断したいのですが。
0749デフォルトの名無しさん
2007/05/25(金) 18:33:49通信受信プログラムで受信データをエディットコントロール(複数行表示)に表示しているのですが、
以下のコードでは、エディットコントロールに文字列を追加する際に必ずスクロールされてしまいます。
スクロールされない方法を教えてください。
LineScrollで戻すと、1行書くごとに「下へスクロール→上へスクロール」となり、上下にスクロールが発生してしまい
とても見づらくなってしまいます。
「スクロールなし」でエディットコントロールに文字列を追加できないものでしょうか?
int iLen = edit->GetWindowTextLength();
edit->SetSel(iLen, iLen);
edit->ReplaceSel("Hello\n");
WinXP & Visual Studio 2003 & mfc7です。
0750デフォルトの名無しさん
2007/05/25(金) 18:36:41http://pc11.2ch.net/test/read.cgi/tech/1178432985/594の名前欄は調べた?
0751デフォルトの名無しさん
2007/05/25(金) 19:09:59そ、そんなところに... (^^;)
やってみます。
0752印刷が遅いのですが
2007/05/26(土) 12:43:26ネットで見つけたサンプルコードで、印刷はできたのですが、
ものすごく遅いのです。
3000*3000の画像をプリントするのに、1時間かかります!
WindowsXPですが、他のアプリから印刷する場合は数分で印刷できるので、
プリンタやOSやドライバの問題ではなく、プログラムの仕方の問題だと思うのですが、
単純にプリンタ用のpDCに画像を送るだけでは速くはならないのでしょうか?
0753印刷が遅いのですが
2007/05/26(土) 12:51:16〜View::OnFilePrint(){
CPrintDialog myPtDlg(FALSE); HDC myPtDC; CDC myDC; DOCINFO myDocInfo;
if(myPtDlg.DoModal() == IDOK){
myPtDC = myPtDlg.GetPrinterDC(); myDC.Attach(myPtDC);
myDocInfo.cbSize = sizeof(myDocInfo); myDocInfo.lpszDocName = NULL; myDocInfo.lpszOutput = NULL;
myDocInfo.lpszDatatype = NULL; myDocInfo.fwType = 0;
myDC.StartDoc(&myDocInfo); CDC* pDC=GetDC();
myDC.StartPage();
for(y=0;y<3000;y++){ for(x=0;x<3000;x1++){
myDC.FillSolidRect(x,y,1,1,RGB(x,y,+y));
} }
myDC.EndPage();
myDC.EndDoc(); ReleaseDC(pDC); ::DeleteDC(myPtDC);
} }
0754印刷が遅いのですが
2007/05/26(土) 13:06:10>>753のコードをいじれば画像も印刷できるのですが、遅いです。
たとえば、下のように記述すると速いのですが、
for(y=0;y<30;y++){ for(x=0;x<30;x1++){
myDC.FillSolidRect(x,y,100,100,RGB(x,y,x+y));
} }
大きい画像の場合は、1ドットずつ描くしかないですよね?
0755デフォルトの名無しさん
2007/05/26(土) 14:11:230756デフォルトの名無しさん
2007/05/26(土) 15:04:14なんで大きい画像だと1どっとずつやるしかないの?
■ このスレッドは過去ログ倉庫に格納されています