トップページ⇒tech
1001コメント335KB

■MFC相談室 mfc17d.dll■

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/21(火) 10:38:31
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
0797デフォルトの名無しさん2007/06/02(土) 18:32:58
デバッグしてて出力知らないなんてありえない・・・
0798デフォルトの名無しさん2007/06/02(土) 18:38:32
>>796
VS2005なら、メニューの 表示-出力 で表示されるウィンドウの事。
デバッグ時に読み込んだDLLとか、TRACEの出力とか表示されているだろ。
0799デフォルトの名無しさん2007/06/02(土) 18:53:30
悪い デバッグしないから知らない
0800デフォルトの名無しさん2007/06/02(土) 19:53:43
デッバグしないのにデバッグの時の動作が気に入らないとw
DLL読み込むのに時間がかかったんだよ多分(笑)
でもデバッグしないなら問題ないじゃん、原因や理由を考えるレベルじゃないんだからさ
好きなだけ再インストールでもなんでもしてればぁ
0801デフォルトの名無しさん2007/06/02(土) 23:55:56
>>799は違う人なんだが、、デバッグしてるって
出力ってこの下のウインドウの事か。何かって言われても
まあ確かにDLLを沢山ロードしましたって出てる
それくらいで後は
スレッド 0xEE4 終了、終了コード 0 (0x0)。
こんなの。
0802デフォルトの名無しさん2007/06/03(日) 00:53:24
すっげぇデジャビュw
気になったんで動かしてみたら
俺のPCの場合はVC6でこさえてなんもいじってないMFCのプログラム動かしてたらOSごと落ちたw

なんだっけ?これ
なんかアクロバット絡みのファイルオープンダイアログのバグってなかったっけ?
なんか初期化関数おいてやらないと落ちる奴
違うかなぁ・・・なんかあった気がするのは覚えてるんだけど・・・うーん
0803デフォルトの名無しさん2007/06/03(日) 00:55:25
まあ、とりあえず俺の環境でもVC6でこさえたMFCのプログラムはなんかおかしい
違う症状なので同じ原因かはわからんけど
他のもんもちょっとみてみようかな
いつからこんなんなったんだろう・・・
0804デフォルトの名無しさん2007/06/03(日) 12:53:50
>>802
OSごと落ちたんすか、キてますね・・・
アクロバットってあのreaderの事?
確かにあのダイアログ開く時に最初の一回だけだから
コンストラクタのどこかかなとは思ったけど
0805デフォルトの名無しさん2007/06/03(日) 14:52:26
cidaemon.exe
動いてない?
0806デフォルトの名無しさん2007/06/03(日) 15:30:55
MFCもwin32も使ってるダイアログは同じだけどな

コモンダイアログがハングアップします。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200611/06110018.txt
0807デフォルトの名無しさん2007/06/03(日) 19:29:42
>>806
そこに載ってるリンク先
http://www.bea.hi-ho.ne.jp/cgi-bin/user/byoko/bnews?f=b&p=32610
がすげー気になるんですけど。
結局何が問題なの…
0808デフォルトの名無しさん2007/06/03(日) 19:51:56
>>805
あ、俺(>>802)のはこれだった
なんでハングアップするんだw
0809デフォルトの名無しさん2007/06/03(日) 21:02:07
呼び出し側でポインタ壊してるんじゃないの
0810デフォルトの名無しさん2007/06/04(月) 07:49:56
質問です。

アプリのGUIスレッドで例外が発生したら、プログラム全体を出来るだけ
安全に終了させたいと考えております。

いくつかスレッドが動いていて、今現在何個のスレッドを動作させているか
直接は変数等に控えていない状態で、MFC・Win32APIを用いて、全スレッドを
列挙後、強制終了させたいのですが、この列挙する関数が見つかりません。

このような用途に使えそうな関数はあるのでしょうか?

WinXP SP2
VS2005
C++
0811デフォルトの名無しさん2007/06/04(月) 07:54:33
あります
0812デフォルトの名無しさん2007/06/04(月) 08:11:55
MFCにはないと思う。
自分でグローバルな変数にでも保存しておくのがいいんでない?
0813デフォルトの名無しさん2007/06/04(月) 10:31:16
>>810
列挙して強制終了がTerminateThreadの事だったら
何もせずシステムに殺してもらうのと大して変わらんと思うぞ
0814デフォルトの名無しさん2007/06/10(日) 20:25:44
ファイルハンドルをつかんでいるときに、
そのファイルが削除されるタイミングを検知できれば、
ファイルハンドルを解放しようと思います。
その方法を知っている方いますか?
0815デフォルトの名無しさん2007/06/10(日) 21:16:18
MFCの話か?
0816sage2007/06/10(日) 22:05:05
デバイスのチェックはCWnd::OnDeviceChange()があるので、
MFCでないかなぁと思って。
08178142007/06/10(日) 23:05:25
やっぱりWin32板逝って来ます。
0818デフォルトの名無しさん2007/06/13(水) 17:31:16
誰か教えてください

UNICODEビルドのdllからMBCSビルドのdllの関数を呼び出す時の
CString型の変換なんですが、MBCSビルド側のDLLに
・名前を設定する関数
・名前を参照する関数
があるとして

名前を設定する場合は
USES_CONVERSION;
CString strName = _T("名前");
mbcsdll->SetName(W2A(strName));
としてNameをANSIに変換して設定できています。

Nameを参照する際にはCString*を渡す必要があるんですが
CString Name;
mbcsdll->GetName(&Name);
この時のNameへのポインタはどのように型変換して渡すんでしょうか?
このままだと参照できませんでした。
変換をどうやったらいいのか解らず弱っています。
0819デフォルトの名無しさん2007/06/13(水) 17:43:31
CString Name;
CStringA NameA;
mbcsdll->GetName(&NameA);
Name = NameA;
でどう?
0820デフォルトの名無しさん2007/06/13(水) 17:57:22
回答ありがとです
ただCStringAはVC7からのATLではないですか?
自分VC6なんです(=TェT=)
VC6での型変換方法をご存知ないでしょうか
0821デフォルトの名無しさん2007/06/13(水) 19:11:45
中がcharなCStringオブジェクトへをポインタを渡せばいいと思うのよ。
7だと
typedef ATL::CStringT< wchar_t, StrTraitMFC< wchar_t > > CStringW;
typedef ATL::CStringT< char, StrTraitMFC< char > > CStringA;
typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;
だからCStringAと書いたんだけど、6のCStringはどういう定義なんだろう。
それのTCHARをcharに置き換えて変数作ればいいと思う。


>818の後、A2W(Name.GetBuffer())はよくないよね。
0822デフォルトの名無しさん2007/06/13(水) 19:26:17
DLL間でMFCオブジェクト渡すのはいろいろ注意が必要だけど
そこんとこ分かってるのかな?
0823デフォルトの名無しさん2007/06/13(水) 20:30:12
>>822
う、「MFCオブジェクト」の意識ありませんでした。すいません。
そういえば自分がやるならインターフェースはプリミティブなものにしちゃうなぁ。
0824デフォルトの名無しさん2007/06/14(木) 23:10:56
すみません。
FindWindowなどで取得した特定の種類のコントロールのウィンドウハンドルを、
それに対応するMFCの「C〜」クラスに割り当てて、
「C〜」クラスの機能関数を使うことはできるのでしょうか?
もしできるようでしたらやり方を教えて欲しいです。
よろしくお願い致します。
0825デフォルトの名無しさん2007/06/14(木) 23:19:26
可能
ウインドウを扱うクラスといったらあれしかないだろ
0826デフォルトの名無しさん2007/06/15(金) 00:25:25
>824
attachとか見てみて
0827デフォルトの名無しさん2007/06/17(日) 17:46:25
質問です。
ツリーコントロールにイメージリストを設定。
あるタイミングでツリーのフォントサイズを変更するとき
イメージのサイズも変更したい考え、
一度イメージリストをDeleteImageList()で削除し、
再度Createする際にサイズを変更し設定したんですけど
イメージが消えてしまいました。
なにかいい方法はありましたらご教授をお願いします。
0828デフォルトの名無しさん2007/06/17(日) 18:36:37
そんなことMFCスレで質問されても
0829デフォルトの名無しさん2007/06/20(水) 09:13:52
>>827
最初にサイズ別にCImageList を2つ作って切り替えたいときにCTreeCtrlにSetImageListする。
0830デフォルトの名無しさん2007/06/20(水) 12:31:24
モーダルダイアログの親って、コンストラクタでしか指定できないものなんですか?
ダイアログ終了後も値を内部で持っておくために、
ダイアログオブジェクトをグローバルで一つだけ持ち続けて、
いろんな箇所からモーダル表示させたいんですけど、
DoModal()の前に親を再指定できる箇所が見当たらないんです。
0831デフォルトの名無しさん2007/06/20(水) 12:37:28
ウインドウ作った後で親は変えられるよ
0832デフォルトの名無しさん2007/06/20(水) 17:46:37
>>830
CWndから派生してるから親はどうとでもなるが

親を変える必然性が解らん

デフォで出来るAboutAppのダイアログにEditBoxとその値用変数を一個追加
ダイアログをグローバル変数にしてMainFrameとAppから呼ぶようにしてみたが普通に動いたし
変数の変は常に保持されていた。デフォなので親はNULL

メッセージを送るなら送りたい相手のハンドルが入手できれば良いわけだし
モーダルだからWindowが残ることもないし
0833デフォルトの名無しさん2007/06/20(水) 18:55:57
>>832
メーラのように子のフレームウィンドウを何個も表示するアプリなので、
ダイアログの親をNULLにしたままだと、メインウィンドウの上に出てきてしまうんです。
ダイアログ側からもGetParentFrame()を使って
DoModal()をコールしたフレームウィンドウにアクセスしたいので、
できればダイアログの親をDoModal()時に変更できればと思ってます。
0834デフォルトの名無しさん2007/06/20(水) 20:07:44
モーダルなのにずっと使いまわす感覚がわからん
0835デフォルトの名無しさん2007/06/20(水) 20:33:28
ダイアログオブジェクトをグローバルにして
別々のウインドウからDoModalしたらぶつかるんじゃないか?
0836デフォルトの名無しさん2007/06/20(水) 21:07:40
>>834
前回指定された情報をそのまま次回も再表示したいので、
ダイアログオブジェクトをグローバルにしておけば
ダイアログ内のメンバをそのまま使い回せると思ったのですが、
おとなしく毎回ダイアログから値を取って別の場所に残しておき、
次の表示時に一つずつ入れ直してしまうべきなのですかね。

>>835
もちろん、モーダル表示中は他のウィンドウも操作不可にしています。
0837デフォルトの名無しさん2007/06/20(水) 21:27:09
WinXP、VC6MFCです
マウスを右クリックしたタイミングで特定のプログラム(実装)を
右クリックメニューに追加したいのですがどうしたらできますか?
0838デフォルトの名無しさん2007/06/20(水) 22:47:33
何をしたいのかさっぱりわからん
もっと具体的に
0839デフォルトの名無しさん2007/06/21(木) 11:57:34
>>837
>マウスを右クリック
どこでだよ。
シェル拡張の話か?
0840デフォルトの名無しさん2007/06/21(木) 13:48:05
多分、右クリメニューに自分のプログラムのコマンドを追加したいんだろう
0841デフォルトの名無しさん2007/06/21(木) 13:56:05
その右クリメニューはどういう状況で出すのか聞いてるのでは
0842デフォルトの名無しさん2007/06/21(木) 15:39:16
ひょっとしてホームのSendToで充分な話なのか…。
0843デフォルトの名無しさん2007/06/24(日) 09:10:40
>>837
AppendMenu, InsertMenu

0844デフォルトの名無しさん2007/06/27(水) 02:10:10
MDIアプリケーションで、
CToolbarを2つ作成し、CFrameWndの右と下に
ドッキングさせると、

┌───────────┬┐
│           ││
│           ││
│           ││
│           ││
│           ││
├───────────┴┤
└────────────┘

のように、下のツールバーが右のツールバーに
かぶさるようにドッキングされますが、


┌───────────┬┐
│           ││
│           ││
│           ││
│           ││
│           ││
├───────────┤│
└───────────┴┘

のように、右のツールバーが下のツールバーの上に
かぶさるようにドッキングすることって可能でしょうか?
0845デフォルトの名無しさん2007/06/27(水) 05:52:41
できたよ
08468442007/06/28(木) 01:31:16
>>845
どうやって??
0847デフォルトの名無しさん2007/06/28(木) 02:01:19
>>846
↓\→+P
0848デフォルトの名無しさん2007/06/28(木) 11:53:30
どうやって見つけたんだよ
0849デフォルトの名無しさん2007/06/28(木) 12:33:13
常に波動拳を出してる人なんだろう
0850デフォルトの名無しさん2007/07/01(日) 05:04:01
ちょっと質問

自分、初級PG(MFC使ったこと無い)ですが
最近入ってきた中途の人が
「MFCは楽、簡単」
って言ってる人が居るんだけどそうなんですか?

MFCって要するに巨大な関数群、ライブラリな訳ですよね?
使い易い関数や便利な関数は沢山あれど
結局はそれをどう使うかですよね?

それは結局標準的なC言語の関数をどう使っていかに組むか
っていうのと変わらないと思うんですけど・・・

それとも自分の知らないMFCの機能が有って
楽で簡単になるんですか?それってC言語の仕様が変わったりするって事ですか?

誰か分かり易く教えてください。
0851デフォルトの名無しさん2007/07/01(日) 05:31:05
>>850
いいえ
0852デフォルトの名無しさん2007/07/01(日) 05:35:59
OLEサポートが組み込まれたフレームワーク。
関数群でもクラスライブラリでもない。
何か勘違いしてると思うのでMSDN調べるといい。
0853デフォルトの名無しさん2007/07/01(日) 06:19:09
めんどくさいことを楽して簡単にするためのクラスライブラリなのは確か
楽するためにウィザードがついている
VCからMFCを取ったらほとんど何の価値もないから
無償版として提供されている。
0854デフォルトの名無しさん2007/07/01(日) 08:26:09
>>850
C言語の標準関数で、文字列の末尾から5文字を取得する関数を書いてみろ
MFCなら簡単にできるぞ
0855デフォルトの名無しさん2007/07/01(日) 08:39:22
// 余り難しくないが
sprintf(buf, "%.5s", strlen(str) < 5 ? str : str + strlen(str) - 5);
// MFCはC++なんだから較べるならstd::stringじゃね?
0856デフォルトの名無しさん2007/07/01(日) 10:06:03
MFCを使っている時にMFCの文字列クラスを使うと便利だけど
文字列を扱う目的だけでMFC使うやつはあんまりいないと思う
0857デフォルトの名無しさん2007/07/01(日) 10:10:02
文字列クラス欲しいだけならstd::basic_string<>でいいだろ
0858デフォルトの名無しさん2007/07/01(日) 11:05:24
ブラウザを作る際に、
MFCの他にWTLやATLを使う方法があるというのを
聞いているのですが、

VC++6.0 MFCを使って作る場合の
メリット、デメリットについてご存知でしたら
教えて頂けませんでしょうか。
(早く作れる、移植性が悪い など)

0859デフォルトの名無しさん2007/07/01(日) 11:18:37
SleipnirはMFCを使って作られている。
0860デフォルトの名無しさん2007/07/01(日) 11:38:49
OLEが組み込みサポートされている。
ドキュメントビュー構造が利点にも欠点にも。
古臭い。
0861デフォルトの名無しさん2007/07/01(日) 13:17:30
>>859
ありがとうございます。初めて知りました。
SleipnirがMFCとは知りませんでした。
MFCは業務で使ったことがあり、私は
変えたいところは
上書きして対応できるし工数が減るので
使えると思っていたのですが、

なぜだかMFCアレルギーというか
異様に嫌っている人がいて、
使わないほうがいいみたいな風潮が
を出しているために、戸惑っていました。

DonutはWTLを使っているみたいですね。

>>860
ありがとうございます。
ドキュメントビュー構造というのは、SDI/MDIで
出てくるControl/View/Modelの
ことでしょうか。


0862デフォルトの名無しさん2007/07/01(日) 13:50:33
>>861
ブラウザを作る話か。
勘違いしてた。
なら話は簡単。
MFCはブラウザをサポートしてる。
これがメリット。
デメリットはMFCだってこと。
0863デフォルトの名無しさん2007/07/01(日) 13:55:43
漏れもMFCアレルギー者だったが業務でVC6を使うようになり
すっかり気に入ってしまった、C言語の拡張、高機能版という認識でいる、MFCの関数をあまり知らなくても
Cでゴリゴリ書けばいいし、後で等価のMFCの関数に気付いたら修正すればよろし
0864デフォルトの名無しさん2007/07/01(日) 14:07:35
>>863
置き換えた関数の一例を挙げてくれ。
漏れは逆に、MFCはリソースエディタとDDXくらいしか使ってないんだよね。
基本的に、GUIべったりじゃないところはCStringさえ使わないようにしていたし。
0865デフォルトの名無しさん2007/07/01(日) 14:32:26
>>864
そうだね例えばSDKでFindFirstFile使ってフォルダ検索処理してたのをMFCの
CFileFindを使ったりとかだね、ラッパ関数なんで速度的にも満足してるな
0866デフォルトの名無しさん2007/07/01(日) 15:01:06
ファイルダイアログで選択したファイルをたくさん処理するのってどうしたらいいの?
ファイルダイアログから文字列で貰うのって限界なかったっけ?
VBとかだと何個読みこんでも大丈夫みたいなんだけど
0867デフォルトの名無しさん2007/07/01(日) 16:00:22
>>866
VBは使ったことないからどうなってるのかしらんが
OPENFILENAMEのlpstrFileにOFN_ALLOWMULTISELECTの場合はExtra NULL characterで区切られとると書いてあるだろ
0868デフォルトの名無しさん2007/07/01(日) 16:08:24
>>867
いや、問題は最大長の話なんだけど0xFFFFが限界じゃなかったっけ?
それで読むとさ、パスが長いとショボイファイル数しか読み込めないんだけど
一体みんなどうやっているのかと疑問だったんだ
0869デフォルトの名無しさん2007/07/01(日) 16:10:52
CFileFind自体は関数ではないけど、つっこむべきか悩む。
0870デフォルトの名無しさん2007/07/01(日) 17:34:39
>>869
いや、たぶん素で書いてるんだと思うよ。
  >C言語の拡張、高機能版という認識でいる
ということらしいから、言語とライブラリの違いがわかってなさそう。
このスレ自体釣りなんじゃないかと疑ってしまうけどね。
MFCって言うと、ドラッグアンドドロップのようなOLE関連の操作を
フレームワークに閉じ込めた部分が一番大きいと思うんだけど、
そういう話が一切出てこないところを見ると、ほんとに使ってるやついるのかと
疑問がわいてくるよ。
0871デフォルトの名無しさん2007/07/01(日) 17:53:45
MFCにあってWin32APIにない機能ってある?
0872デフォルトの名無しさん2007/07/01(日) 17:57:50
GDI+をWin32APIとみなしていいかどうか・・・
0873デフォルトの名無しさん2007/07/01(日) 17:59:43
>>871
・ファイルオープンダイアログのファイル無限読み込み
・トラッカークラス
・メモリデバイスコンテキストの管理
がわかんない(MFC使わないと)
0874デフォルトの名無しさん2007/07/01(日) 18:03:45
>>870
「ドキュメント編集」という骨格を使うならそうだろうけど、
漏れみたいにダイアログしか使わない用途ならOLEなんかもどうでもいいね。
>864にも書いたけど、ダイアログに部品をペタペタ貼るだけだからなぁ。
#んで、某社のActiveXの糞仕様に悩まされたりして。
0875デフォルトの名無しさん2007/07/01(日) 19:32:54
クラスを基本とするアーキテクチャでは
単体のグローバル関数で構成されるほうが不自然なのに
両方関数単体であることを比較条件にするのも
よくわからないけどな

0876デフォルトの名無しさん2007/07/01(日) 20:13:53
MFCが嫌われた原因の1つとして
まず最初に随所に出てくるAfxの意味を
先に説明しないから
気持ち悪い状態で進まらざるを得ない
せいもあったかもねぇ。
0877デフォルトの名無しさん2007/07/01(日) 21:01:19
「Anal Fucking seX」というのは冗談として、おそらく「Application
Framework eXtention」とかじゃないのかな。けど、名前に意味はないよ。

マクロにしろ、関数にしろ、定数にしろ、ソースが公開されているの
だから、どこでどう定義されているか調べればよいだけ。選択して右
クリックすれば、定義位置へジャンプする便利なメニューがあるでそ。
0878デフォルトの名無しさん2007/07/01(日) 21:04:22
俺はAplication Framwork(s)→afxって聞いたけど。
0879デフォルトの名無しさん2007/07/01(日) 22:26:40
>>868
OpenFileDialogなんか使っているくせに0xFFFFで不足とかショボイとか笑わせんなよ
0880デフォルトの名無しさん2007/07/01(日) 22:59:51
>>879
いや、マジでわかんない
煽り抜きで
0881デフォルトの名無しさん2007/07/01(日) 23:33:00
>>880
>>879 ではないが、出来合いのモン(コモンダイアログ)に文句を言うなら、
自前で作れば良かろうと言っているんでは?
0882デフォルトの名無しさん2007/07/01(日) 23:40:41
>>881
いや、それだとエクスプローラ上で選択されたもんをもってくる手段がわからん
みんなここから自作してんの?もしかして?
0883デフォルトの名無しさん2007/07/02(月) 13:57:13
>>874
ダイアログはMFCの機能じゃないだろ。
0884デフォルトの名無しさん2007/07/02(月) 14:07:30
MFCは便利だよ。
printfとかあるし。
08858742007/07/02(月) 14:17:36
>>883
CDialogを使っていると言うだけの話と思ってくれていいよ。
0886デフォルトの名無しさん2007/07/02(月) 14:43:48
>>885
え?CDialogしか使ってないのに>>874みたいなこと書いてるの?
そりゃ失礼。





ママー変なおじさんが来たよ〜〜〜
08878742007/07/02(月) 14:57:01
あーやっぱり……
0888デフォルトの名無しさん2007/07/02(月) 15:23:35
>>887
馬鹿にされるのは仕方ないかもな。
0889デフォルトの名無しさん2007/07/02(月) 20:07:22
隊長、噂でVS2005のMFCってグリッドコントロールが準備されてるってのは本当デツカ?
VC6で簡単にエクセルのようなグリッドコントロールが使いたいのですが・・・
0890デフォルトの名無しさん2007/07/03(火) 10:36:47
>>889
VC6には、FlexGridのMSバンドル版である、MS-FlexGridがバンドルされていたと思いますが。
Excel(つーかMSOfficeSuite)をインストール済みなら、Excel由来のコントロールも使えると思うし。
0891デフォルトの名無しさん2007/07/03(火) 12:45:41
俺も >>874 同様、CDialog (とコントロールの派生クラス) だけの為に
MFC 使ってるんだが、そんなオカシイこと言ってるか?
0892デフォルトの名無しさん2007/07/03(火) 12:49:25
いいんじゃね?
0893デフォルトの名無しさん2007/07/03(火) 16:05:18
ウィンドウがダイアログでも
CDialogだけってことはあまりないだろ
配置するコントロールもMFCクラスだし
文字列操作とかファイル操作とか
見えない処理でもMFCクラスを使う
機会はある。
0894デフォルトの名無しさん2007/07/04(水) 01:17:10
>>882
お前マジでそんなものも作れないの?
0895デフォルトの名無しさん2007/07/04(水) 01:41:46
>>894
ここ数日煽りばっかりやってるけど
何か嫌なことでもあったの?
0896デフォルトの名無しさん2007/07/04(水) 03:14:33
自前のライブラリでWin32APIのみでMFCカバー完了したんだけど
使ってみたいひといる?
■ このスレッドは過去ログ倉庫に格納されています