- 1 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 18:37:47 ]
- Microsoft Foundation Classライブラリ専用スレです。
前スレ ■MFC相談室 mfc18d.dll■ pc11.2ch.net/test/read.cgi/tech/1185917008/
- 487 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 17:54:12 ]
- CListCtrlレポート形式で
たくさん表示させると重いです 何か回避方法はありますか?
- 488 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 17:57:51 ]
- 仮想リストビューとか
- 489 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 17:59:14 ]
- こういうやつね
仮想リストコントロール ttp://msdn.microsoft.com/ja-jp/library/ye4z8x58(VS.80).aspx
- 490 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:34:18 ]
- >>488-489
ありがとうございます。 心持ち軽くなったような気がするけどやっぱり重いです これって LVS_OWNERDATA で作成して 描画する文字列の部分を自分で割り当てるってことでいいんですよね。 仮想リストビュー www.hokuriku.ne.jp/ymyamada/mfc/VirtualList.htm ここも参考にしました。 やりかたまちがえてるのかな^^;
- 491 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:39:04 ]
- >>490
更新すべき場所だけ更新すればOK 普通のリストだと表示部分全てに更新がかかるから重いだけ。
- 492 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 23:49:31 ]
- ダイアログAに
ラジオボタン1 ラジオボタン2 が設置されていて、この二つのラジオボタンがグループで、 2を押したら1のチェックが外れるとします(逆もあり)。 今、2を押して、1のチェックが外れました。 ダイアログAのWindowProcにはラジオボタン1のコントロールIDで何かしらのメッセージが 飛んでくるのでしょうか? ちなみに自分で試してみたところだとどうも飛んでこないようなのです。 ではラジオボタン1のチェックが外れた!というイベントをダイアログA上でキャッチすることはできないのでしょうか?
- 493 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 10:21:36 ]
- (コントロール変数).GetCheck(); で調べればよろし。
チェックのON/OFFを手動にすれば、チェックをつけなおす前に以前の状態を調べればチェックが外れたかどうか調べれる。
- 494 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 10:22:25 ]
- >>492
「ラジオボタン2が押された」→「ラジオボタン1のチェックが外れた」 でいいじゃん。
- 495 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 11:24:17 ]
- メッセージは飛んでるよ
WindowProc使った方法は知らん
- 496 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:10:47 ]
- >>493
>>494 説明が足りませんでしたが事情によりチェックが外れた瞬間のイベント駆動の処理が必要なんです まだチェックオンの瞬間は、オンクリックで拾うことはできますが、 ラジオボタンの場合、他のボタンを押したときに勝手に外れるので、オンクリックでは拾えず また、SetCheck関数などで変更されたときもオンクリックでは拾えませんし悩んでます。 クリックから、関数から、などの入力方法に関わらず、とにかく「チェックが切り替わったとき」の イベントが欲しいのです… 例えばエディットボックスなら内容を変更されたときのイベントを取れるとおもうんですが、 考えてるのは「今変わった!」というのがわかる、そんなイメージです… >>495 どういったメッセージか、もしわかればヒントだけでも教えてください>< できるだけ自分で調べるつもりですので
- 497 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:16:17 ]
- オンクリック→正確にはBN_CLICKEDです
- 498 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 17:36:14 ]
- >>496
ttp://msdn.microsoft.com/en-us/library/cc678956.aspx
- 499 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 18:11:09 ]
- >>496
>ラジオボタンの場合、他のボタンを押したときに勝手に外れるので ラジオボタンのプロパティでそういう風に設定しているからだろ。 リソースでラジオボタンをダブルクリックしたときに作られる関数で、 SetCheckする前にチェックの状態が変わったかどうか自分で調べれば解決。
- 500 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 20:45:55 ]
- >>494と似た考え方だが
とりあえずそのグループのラジオボタンのイベントを一箇所で捕まえて 今回選択されたラジオボタンと前回で選択されたラジオボタンが異なっていたら、 「前回選択されたラジオボタンのチェックが外れた」 と考えればいいと思う。 なんとなく>>496はWindowProcとか言ってるからMFCじゃない気もするが、 MFCならON_COMMAND_RANGE使って10行も必要ないから とりあえずダメ元で試してみたら?
- 501 名前:名無し募集中。。。 mailto:sage [2008/10/18(土) 23:14:23 ]
- 話それるけどON_COMMAND_RANGEで扱うために
リソースIDを連続させるためにresource.hを編集しちゃう俺はヘタレですか?
- 502 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:21:49 ]
- いいんじゃない?
ID指定するとき、=つけて数値指定できるけど、面倒だもんね。
- 503 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:43:58 ]
- ON_COMMAND_EXを使えば、IDを引数にとるハンドラを作れるから、
リソースIDが飛び飛びでも一つのハンドラにまとめられるけど、 こっちはあまり使われないのかな。
- 504 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 11:17:02 ]
- MFCを使う標準DLLを作成すると
CWinAppを派生したアプリケーションクラスが用意されますが、 これはDLL内の単独のスレッドというわけではないのでしょうか? OnIdle()をオーバーライドしてもコールされないのですが。
- 505 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:20:07 ]
- んー、そのままだと自分のメッセージループは使わないからな。
- 506 名前:デフォルトの名無しさん [2008/10/21(火) 19:20:58 ]
- すみません。他で聞いても返事が無いのでここできかせてください。
VC6で本の通りにブラウザとかつくりました。VC6の生成するブラウザだから いまどきのWebページは開けないだろうと思っていたんですが、普通にうまくひらけました。Flushとかもです。 これは、VC6とはいえ、ブラウザエンジン?はいまどきのPCの最新のを(要するにIE7のを) 作成してくれるのでしょうか? よろしく教えてください。
- 507 名前:506 mailto:sage [2008/10/21(火) 19:34:59 ]
- 元のスレを今見たら、今日の夕方に返答がきてました。
解決したので、>>506はスルーしてください。
- 508 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 02:18:54 ]
- SDIでグラフ描画するソフトを作ろうとしてるんですが
ViewのOnDrawで縦軸横軸を引いて その上にグラフを描画する方法がわかりません。 どなたか、わかる人教えてください。
- 509 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 06:44:33 ]
- どこまでわかっててどこからわからないの?
- 510 名前:デフォルトの名無しさん [2008/10/23(木) 15:16:36 ]
- VC6で、_MBCSを使い、日本語と英語のプログラムを作っています。
一つのEXEで問題なく、 日本語Win上では、日本語のダイアログ、 英語Win上では、追加した英語のダイアログが表示されたのですが、 現在選択しているリソースが日本語か英語か知りたいのですが、 プログラム実行時、 英語日本語のリソース切り替え選択はどの値を見て読み替えてるのでしょうか? GetSystemDefaultLangID() 辺りは、コントロールパネルによって変化しているのは確認したのですが、 リソース読み替えとは関係ない様でした。 GetACP() , GetVersionEx()でも取得はできませんでした。 ご存知の方、ヒントだけでも御教授下さい。 よろしくお願いします。
- 511 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:32:35 ]
- GetSystemDefaultUILanguageとかGetUserDefaultUILanguageあたりかね?
でも自分でFindResourceExする必要はある気がする。
- 512 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:44:51 ]
- って動的に切り替えるのが目的じゃないのか
- 513 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 16:21:45 ]
- ありがとうございます。
GetSystemDefaultUILanguage も調べていたのですが、これはVC7以降のAPIの様です。 多分ですが、 GetSystemDefaultLangIDと同様、コントロールパネルのロケールIDを返すのではないかと思います。 コントロールパネルからロケールIDは変更できるのですが、 実行時に使用されるリソースは変化ありませんでした。 現在の状態が知りたいだけですので、動的に読み替える必要は今のところありません。 どうしても・・・となれば、リソースに番号振って、プログラム中から判定するという方法もあるのですが、 Kernel32あたりで、どう判断しているのかが知れればと思った次第です。
- 514 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 16:26:19 ]
- winnls.h インクルードして使えないか?
- 515 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 16:29:43 ]
- そもそもAPIなのにVC7以降、とか関係ないでしょ。
インポートライブラリにもヘッダーにもないのなら作ればいいし。
- 516 名前:513 mailto:sage [2008/10/23(木) 18:13:02 ]
- >>515
karnel32.libに無いので、呼べないのかと思ってました。 karnel32.dll をLoadLibraryして呼び出すことができました。 結果、 ・日本語Win GetSystemDefaultUILanguage() = 1041 GetUserDefaultUILanguage() = 1041 ・英語Win (XP-Pro SPなし) GetSystemDefaultUILanguage() = 2011628553 GetUserDefaultUILanguage() = 1033 と、 コントロールパネルに影響されないGetSystemDefaultLangID()と同じ値が取得できました。 ただ、リソース読み替えに使われているのかは不明なのと、 英語Winで、GetSystemDefaultUILanguageが不思議な値を返してくるのですが、 とりあえずは目的を果たせそうです。 助かりました。ありがとうございました。
- 517 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 18:18:39 ]
- その不思議な値、16進で0x77E70409だね。
下16ビット、0x0409は10進で1033だから上と下で別々に意味もってるのかも。
- 518 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:16:01 ]
- GDI系のAPIの基本の話か?w
- 519 名前:513 mailto:sage [2008/10/23(木) 19:27:20 ]
- >>517
LANGIDFROMLCIDマクロを使ったところ、下位だけ抜けました。 言われるとおりのHEXで見るべきでした。 WINNT.H には、上位16bitは、Reserved、SortIDとコメントがありましたから、 Reservedは不明ですが、何か意味はありそうですね。
- 520 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 00:46:43 ]
-
CMyDialog mydlg; if ( dlg.doModal() ){
- 521 名前:名無し募集中。。。 mailto:sage [2008/10/24(金) 13:39:41 ]
- DoModal()じゃねぇのか?
返り値はIDOKじゃないのか? そもそもmydlgじゃないdlgって何者?
- 522 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:49:40 ]
- CheckBoxの表示手法について教えて下さい。
通常はプロパティのCaptionで設定されている文字を表示させておいて 途中で文字の代わりにアイコンを表示させたいと思ってます。 最初からCheckBoxにアイコンを表示させる事はできてるのですが、途中で テキストからアイコンへの変更ができません。 途中から変える事は無理なのでしょうか? HINSTANCE hInst = AfxGetInstanceHandle(); HICON h_Icon1 = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_ICON1),IMAGE_ICON,128,128,LR_DEFAULTCOLOR); m_Check1.SetButtonStyle(m_Check1.GetButtonStyle() | BS_ICON); m_Check1.SetIcon(h_Icon1);
- 523 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:48:42 ]
- ボタンスタイルは | でつなげても意味ないぞ。
m_Check1.SetButtonStyle(BS_ICON); でもウィンドウサイズも変えないとアイコンの大きさにはならないかもな。
- 524 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:53:27 ]
- つーか、チェックボックスでかつアイコンというのが無いのか
- 525 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 19:36:32 ]
- ボタンみたいに動くものじゃないんだから
絵や文字と一体化してる必要ないし、 隣に自分で絵や文字書いても何の問題もない。
- 526 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 19:42:59 ]
- そんなにチェックボックスにアイコン使いたいなら擬似的に実現したクラス作ればいいじゃん
- 527 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 18:07:01 ]
- 子ウィンドウとしてダイアログを利用しているのですが、
起動時、非表示にしたいのです。 CDialog dlg; dlg.Create( IDD , this ); dlg.ShowWindow( SW_HIDE ); とやっているのですが、 一瞬表示されるのです。 OnInitdialogで ShowWindow( SW_HIDE ); と記入しても。 回避できませんでした。 他に方法はありますか?
- 528 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 18:26:03 ]
- 子ウィンドウってメインじゃないってこと?
ダイアログエディタでVisibleの初期値をfalseにしてもだめかな?
- 529 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 18:35:43 ]
- >>528
いけました ありがとうございます><
- 530 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:08:11 ]
- MFC 9.0って、どこでダウンロードできますか?
- 531 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:48:43 ]
- できません。
standard以上を買ってください。
- 532 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 20:08:26 ]
- >>531
ありがとうございました。 しつこい質問で申し訳ないですが、今少し困っていることがあります。 当方 Visual C++ Express 2008 OS XP SP2 を使用していて、C++によってSQL Serverへの接続を試みています。 しかし、CDatabase db; のところで躓いてしまっています。 よく調べたところ、#include "afxdb.h" を使用する必要など があるようで、更に調べたところ、MFCが関係していると知りました。 そこで、このスレの本質に従う質問をしたいと思います。 MFC9.0が使用できないことは分かりました。 MFCのシリーズで無料で(違法ではなく、公式な方法で)使用が可能な 方法はありませんか? また、MFCがない場合 #include "afxdb.h" や CDatabase db; などは、自分で1から記述しなければならないのでしょうか? (初心者のため、バカなことかもしれませんが、ライブラリ にはないため、自分で定義しなくてはならないのでしょうか?) 長文の上、稚拙な文になってしまいましたが、躓いてしまっている ので、ご助力を加えて下されば幸いです。 よろしくお願いします。
- 533 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 20:25:42 ]
- CDatabaseを使用しないでDBにアクセスしなきゃなんないよ。
CDatabaseは C++ からODBCを介してSQL-Serverにアクセスするもので、 CDatabaseはMFCのクラスで、あなたは利用できないから、 ほかの手段を探すことになる。 ODBCの代わりにOLE-DBを使うこともできるし、 今からDBの勉強はじめるならこちらをお勧めする人が多いと思う。 "C++ OLE-DB SQL-SERVER アクセス"あたりのキーワードでぐぐればいいんじゃないかな。 というわけで、さようなら。
- 534 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 20:36:51 ]
- >>533
ご教授ありがとうございました。 貴重なお時間を割いていただき、申し訳ございませんでした。
- 535 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 02:30:04 ]
- 質問しつれいします。
vc 2005 MFCを使ってGETやPOSTでデータを送信するプログラムを作成しようと思います。 勉強になるサイトなどありませんか? 検索のヒントでもいいので宜しくお願いしまっす
- 536 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 05:29:15 ]
- つWinInet
- 537 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:18:14 ]
- >>535
WebProg板
- 538 名前:535 mailto:sage [2008/11/02(日) 18:19:43 ]
- >>536
ありがとうございます そのキーワードを頼りに自分なりに調べてやってみます >>537 すいません板違いでしたかー
- 539 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:22:36 ]
- 検索のヒントを提示しただけ。鼬害かどうかは白根。
- 540 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:04:18 ]
- MFCのクラスを使うんなら、使えそうなクラスぐらいすぐ見つかると思うが
MFCのクラスを使わずにやるんならスレ違い
- 541 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:16:10 ]
- >>540
いやぁMFCのクラスを使いたいのですが・・・ んー検討つかないんです 検索ワードだけでもヒントをぉぉぉぉぉ・・・orz
- 542 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:31:30 ]
- msdn.microsoft.com/ja-jp/library/173ckzza.aspx
MFC ライブラリ リファレンス インターネット クライアント アプリケーションの作成用の MFC クラス 更新 : 2007 年 11 月 MFC には、インターネット クライアント アプリケーションを作成するための以下のクラスとグローバル関数があります。
- 543 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:44:46 ]
- >>542
ありがとうございます!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 544 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:44:58 ]
- とりあえず、この辺一通り眺めといた方がいいかもね。
MFC > 階層図 msdn.microsoft.com/ja-jp/library/ws8s10w4.aspx
- 545 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:18:47 ]
- >>544
本当にありがとうございます・・・ 階層図・・・目から鱗です・・・
- 546 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 10:30:14 ]
- xp sp2 VS2005
CString GetString(void) { CString strTemp; strTemp = "1234"; return strTemp; } void Main(void) { CString strHoge; CString strValue; strValue = GetString(); strHoge.Format("%08s", (LPCTSTR)strValue); strValue = GetString(); strHoge.Format("%s%08s", (LPCTSTR)strHoge, (LPCTSTR)strValue); // 以下略 } という感じの処理をするとFormatで落ちてしまうのですが、 何故なのでしょうか? あと CString でイメージ検索するとエr
- 547 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 10:51:26 ]
- >>546
CStringT::Format -------- 文字列オブジェクト自体をパラメータとして Format に渡すと、呼び出しは失敗します。たとえば、次のコードの結果は保証されません。 CAtlString str = "Some Data"; str.Format("%s%d", str, 123); --------
- 548 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:08:54 ]
- >>547
その下に ---------- オプションの引数として文字列を渡すときは、LPCTSTR に明示的にキャストしてください。 書式は、printf 関数の書式引数と同じ機能を持っています。(書式や引数の説明は、 『ランタイム ライブラリ リファレンス』の「printf」を参照してください)。 書き込まれる文字列の終わりには NULL 文字が追加されます。 ---------- とあったのですが、これはそもそも>>546の中でいう strValue のことであって、 自身を引数に指定するのはキャストしようが何しようがダメってことなんですよね?
- 549 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:36:26 ]
- >>548
ttp://msdn.microsoft.com/ja-jp/library/18he3sk6(VS.80).aspx のほうには書いてないけど、 その説明は「キャストすれば自分自身を渡せるよ」ということでは無いと思う。 CStringTに書いてないということは昔はそういう制限でもあったのか、 それとも「CString::operator intなどを追加するかもしれないから、 LPCTSTRも明示的にキャストして渡しておけ」という意味じゃないだろうか。
- 550 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:52:46 ]
- const char*へのキャストは、operatorで内部のバッファ返してるだけ。
Format中に元のバッファが変わったら長さがかわるからバッファ足りなくなる。
- 551 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 14:19:28 ]
- >>547>>549>>550
なるほど、ありがとうございました。 ちなみに>>548の文は ttp://msdn.microsoft.com/ja-jp/library/18he3sk6(VS.80).aspx では無くなっちゃってるみたいですが、 VC6付属のMSDNに書かれていた文章です。
- 552 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:41:35 ]
- C#やった後にこれやると、
GUI画面作成、メッセージ処理、メモリ管理、例外処理とか泣けてくるな… まあでも刺激はあるからいいか…
- 553 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:07:49 ]
- 質問いいかな?
以下のようなプログラムでスレッド起動してスレッド終了を見ようとしているんだが、 WaitForSingleObject関数で毎回タイムアウト発生…理由分かる人いる? void CMainClass::Start() { g_pThread = AfxBeginThread(Test, GetSafeHwnd(), THREAD_PRIORITY_NORMAL); g_pThread->m_bAutoDelete = FALSE; } UINT Test(LPVOID pParam) { while(!g_Flg){ // ここで処理 // } return 0; } void CMainClass::Stop() { g_Flg = TRUE; ULONG ret = WaitForSingleObject(g_pThread[0]->m_hThread, 10000); delete g_pThread; }
- 554 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:09:15 ]
- ULONG ret = WaitForSingleObject(g_pThread->m_hThread, 10000);
の間違い。配列はなしね。 なお「g_」をつけているのはグローバル変数
- 555 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:12:14 ]
- Test関数でちゃんと動いてる?
サスペンド中だったりしない?
- 556 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:38:07 ]
- >>555
いま調べているんだけど、タイムアウトの10000ms以内には 絶対に終わるはずなんだけどなー。 でもそれが疑わしいか… 回答してくれてありがとん。
- 557 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:46:42 ]
- とりあえず>>553のまんま動かしてみたけど、WAIT_OBJECT_0でした。
原因はそこ以外にある?
- 558 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:57:53 ]
- >>557
自分でもやってみたら確かに動いたんだよね。 Test()の処理部分に原因がありそうなのは間違いない。 (ここで10秒かかるってのは考えにくかったからここで質問させてもらったけど) お騒がせさせてすまんかった。 >>557もありがとん
- 559 名前:名無し募集中。。。 mailto:sage [2008/11/13(木) 15:24:33 ]
- threadのreturn 0にブレイクポイントを置いてみるとか
- 560 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:11:23 ]
- >>553-554だが、新たな発見。
Test()の処理部分に処理回数をカウントアップして、 Editボックスに毎回その値を表示する処理として SetWindowTextを使っているんだけど、 Stop関数をコールした後、どうもそこで固まるらしい。 (SetWindowTextをコメント化したら問題がでなくなった) …意味分からん。なんで最後の1回のSetWindowTextで固まる!?
- 561 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:17:20 ]
- 具体的には
ULONG num; //処理回数 CString str; str.Format("%d", num); EditBox->SetWindowText(str); とこんな感じ。 もちろん、メインウィンドウのハンドルはもらってきて、 使っている(その部分は省略しているけど)
- 562 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:50:11 ]
- そりゃあそのSetWindowTextで呼んでるスレッドはもうWaitForしてるからだろ。
- 563 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:53:40 ]
- SetWindowTextはSendMessageを呼んでる。
メインスレッドのメッセージループでそれを受け取らない以上、SetWindowTextからは返ってこないよ。
- 564 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:00:11 ]
- あ、そういうことか!言われてみれば激しく納得w
>>562-563ありがとん
- 565 名前:デフォルトの名無しさん [2008/11/14(金) 06:39:27 ]
- SDKを使わないでMFCアプリケーション作る方法を解説してるサイトはないでしょうか?
- 566 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 06:41:17 ]
- SDKじゃんくてIDEでした
- 567 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:09:46 ]
- リソースエディタとコマンドラインからコンパイラを動かすってことかな?
- 568 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:39:36 ]
- >>567
そうです。 ウィザードの吐き出すコードの解説と、リソースエディタの使い方が解説してあるサイトや本なんかが あればいいなあ、と。
- 569 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:56:25 ]
- というかMFC詳しい人ってAFX*.Hに宣言されてるクラスを全部覚えてるのか・・・
ウィザードの吐き出すコードの前に、ここを熟読して出直してきます
- 570 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 23:08:06 ]
- >>569
覚えてないよ。ただ、よく使うクラスは限られるし、自分で使い勝手の よいMFC派生クラスのライブラリを用意してあるので、それをプロジェ クトに読み込んで使うことの方が多いな。 慣れてくると、ウィザードがどんなコードを吐き出すか判るので、既存の テキトーなクラスの.cpp/.hをコピー&リネーム&文字列置換して、新しい クラスの雛型にして、あとは全部手で書いている。 VC++ 6.0は、クラスウィザードがコード挿入位置を知るために使う特別な 書式のコメントがあるけど、これもクラスウィザードがコード生成したのと 同じように書いている。 その後、一度.clwファイルを消してからクラス ウィザードを起動して.clwを再構築させれば、手で書いたクラスもちゃんと クラスウィザードで認識させられる。
- 571 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 12:42:17 ]
- >>561
こういうの見るとSetDlgItemInt使えといいたくなる。
- 572 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:36:25 ]
- VS2008SP1のFeature Packで機能増えたけど、
新機能使うとレジストリでなくてiniファイルに保存・読み込みできないのだが(´ω`)・・トホー
- 573 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 15:56:10 ]
- >>571
素人さんですかw
- 574 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:45:43 ]
- >>573
玄人がSetDlgItemInt使わない理由とかあるの?
- 575 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:25:39 ]
- ダイアログを操作したいわけじゃないのに
ダイアログに委託しているところ
- 576 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 23:01:11 ]
- 素人・玄人の話ではなくて、
今回の場合、ワーカースレッド側からだとSetDlgItemIntを使いようが無いってだけだな。 コントロール変数とかで持っていても、値をテキストとして設定したい時は、 地味に便利なメソッドだったりする。
- 577 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:34:50 ]
- また変なのがわいてきたな
ひっこんでろタコ
- 578 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:59:29 ]
- >>576
素人さんですかw
- 579 名前:576 mailto:sage [2008/11/16(日) 14:52:37 ]
- >>577 タコでさ〜せんwwww
>>578 素人さんですかの人、こんにちはだお
- 580 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 02:50:44 ]
- CWnd::SetWindowText()も、CWnd::SetDlgItemText()も、CWnd::SetDlg
ItemInt()も、単純にAPIのラッパだし、ワーカスレッドからでもなんら 問題なく呼べるだろ。 ダイアログのポインタが嫌なら、ハンドルとAPI直接呼び出し使え。 ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,...); ::SetDlgItemInt(this->m_hWnd,IDC_EDIT1,...);
- 581 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 22:09:37 ]
- MFCスレでAPI直接呼び出し薦める奴って何なの?
- 582 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 22:22:44 ]
- と言われても、割と普通の事だしなあ。
というか、おまいら今回の話はUIスレッドがスレッド終了待機に入った所為で、 UIスレッドへのSendMessageがデッドロックした、っていう事完全に忘れてるだろ。
- 583 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:00:19 ]
- というより、スレッドとか、ハンドルがクラスで継承されていかないところでは、
Win32APIを直接叩く以外無いよな。 脱線すまん
- 584 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:09:04 ]
- 隠ぺいしている部分は出来るだけ利用するな
でもGDIだけはベタ書きしてしまう俺 それ自体をクラス化するんだけどな
- 585 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:59:29 ]
- >>583
MSDNにはHANDLE渡して該当するFromHandleを呼び出す、とあるから オブジェクトは渡せないけどMFCで行けるんじゃない? 個人的にはしないけどね。
- 586 名前:名無し募集中。。。 mailto:sage [2008/11/18(火) 22:07:02 ]
- 都合のいい時だけMFCを使うってスタンスなのでWin32APiは普通に呼ぶ
- 587 名前:デフォルトの名無しさん [2008/11/19(水) 13:37:26 ]
- モーダレスダイアログでボタンを押すと
m_cdlg = new CDlg(this); m_cdlg->ShowWindow(SW_SHOW); みたいな感じで表示するとボタンを押せばいくつでもダイアログが出てしまいます。 1つしか出さないにはどうしたらいいでしょうか? あと、親クラスの関数でモーダレスダイアログを扱うことはできますか? XP+VC.netです。
|

|