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

■MFC相談室 mfc11.dll■

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/

関連リンクは >>2-10 の辺り。
0596579NGNG
>>594
いろいろ系統の似たサンプルはあるんですが、
User-Agentを制御するサンプルはありませんね
0597デフォルトの名無しさんNGNG
>>596
UrlMkSetSessionOption()
URLMON_OPTION_USERAGENT
0598デフォルトの名無しさんNGNG
今までありがとう、MFC
0599デフォルトの名無しさんNGNG
これからもよろしく、MFC
0600デフォルトの名無しさんNGNG
ATLのことも忘れないでください。
0601デフォルトの名無しさんNGNG
海栗って何?
0602デフォルトの名無しさんNGNG
海栗=うに=unix
0603デフォルトの名無しさんNGNG
MFCのサンプルなどでCodeGuru等が有名ですが、
CodeGuruのソースのライセンスはどのようになっていますでしょうか?
サイトの方をみたのですが、それらしき文章がないように思い受けます。

スレ違いかもしれませんが、ご教授いただければとおもっております。
0604デフォルトの名無しさんNGNG
>>603
あれは作者がそれぞれいるだろ
0605デフォルトの名無しさんNGNG
雲丹
0606デフォルトの名無しさんNGNG
>>601
海栗=うに=海栗コード
0607デフォルトの名無しさんNGNG
タスクバーに常駐するタイプのプログラム作ってます。
で質問なんですけど、xpのタスクバーは非アクティブのとき非表示に出来ますが
どうやって制御すればいいんでしょう?教えてください
0608デフォルトの名無しさんNGNG
少なくともMFCにはそんな機能は無いな
0609デフォルトの名無しさんNGNG
>>607
タスクバーに常駐させるだけで良いのでは?

タスクバーが非アクティブのとき非表示になっても何も困らないのでは?
0610デフォルトの名無しさんNGNG
「アクティブでないインジケータを隠す」機能に対応できず、常に表示されてしまっている状態で困っています
0611デフォルトの名無しさんNGNG
>>610
つまり「アクティブのまま」なんじゃないの?
0612271NGNG
MFC最高。MFCあったらC++なんかイラネ
0613デフォルトの名無しさんNGNG
>>612
保守乙
0614デフォルトの名無しさんNGNG
KFC最高。KFCあったらMacなんかイラネ
0615デフォルトの名無しさんNGNG
>>614
スレ違い乙
0616デフォルトの名無しさんNGNG
sage乙!
0617デフォルトの名無しさんNGNG
MFC乙!
0618デフォルトの名無しさんNGNG
lps乙CmdLine
0619デフォルトの名無しさんNGNG
X1-turbo乙
0620デフォルトの名無しさんNGNG
or乙
0621デフォルトの名無しさんNGNG
初心者なんですが、今MFCからC言語始めてるんですが、
APIを直接使わずにMFCだけでAPIでできることのすべてを代用することができますか?
0622デフォルトの名無しさんNGNG
>>621
寡聞にして「すべて」を代用できるかどうかは知らんが、
少なくともAPIの知識が必要になるメンバ関数は少なくない。
MFCを使いつつ、その先にはAPIがあることを念頭に入れておくのがいいと思う。
0623デフォルトの名無しさんNGNG
>>621
> 初心者なんですが、今MFCからC言語始めてるんですが、

「初心者」って言っても色々あるだろうが、そんなことできるんだろうか?
と素朴な疑問。

Cの基礎的な書式とC++のクラス概念くらい学んでからWindowsプログラミング
に移行した方が良いっていうか、そうじゃないと普通無理だろっていうか・・・。
0624デフォルトの名無しさんNGNG
とりあえず普通に質問に答えるなら、出来るか出来ないか。だろ?
なんで君たちはそこには言及しないんだい?

という訳でAPIでMFCの代わりは出来ますが、MFCでAPIの代わりは出来ません。
0625621NGNG
>>622
全部自分でやるAPIのほうがわかりやすくて魅力的に見えてきました・・・。
この関数できたらAPIやってみようと思います。

>>623
プログラムの勉強を始めて今2週間くらいです。
C言語の文法はなんとなくわかったのですが、コードでCaptionを変える方法で躓きました。
MFCはAPIをラップしたものだから同じ機能があると思ってMFCメインにしようと思ったのですがVCが自動的にやってくれすぎて一向に構造がクリアにみえてきません・・・。
MessageBox関数と同じ機能をもつ関数を自分で作るにはどうすればいいんでしょうか。
と思っていたらなにやらできたようです。
MSDNわかりにくっ(;´Д`)

>>624
なるほど。
APIのほうが優れもののようなのでキリがついたらそっち勉強しようと思います。
0626デフォルトの名無しさんNGNG
つうか、「C言語」じゃねえよ。
0627デフォルトの名無しさんNGNG
APIの方が優れてるってのはどうかと思う。MFCはどっちかというとプログラマの手間を
省くための便利ライブラリなんだし、技術がないならむしろMFCを積極的に利用した方
が楽ができるし良い物を作れる。大抵のことはMFCでできてしまうんだし。
0628デフォルトの名無しさんNGNG
C -> API -> C++ > MFC でいいよ。
0629デフォルトの名無しさんNGNG
そしてMFCに嫌気が差して、APIに戻るか他のライブラリを探すようになる。
0630デフォルトの名無しさんNGNG
>>629
たしかにかなりの人がMFCに挫折するね
0631デフォルトの名無しさんNGNG
なんで、MFCで挫折するんだろうね?
0632デフォルトの名無しさんNGNG
へんなマクロが嫌だ。
0633デフォルトの名無しさんNGNG
なんで、そんな動きするのか、わけがわからん。
ソースおっても、膨大すぎて意味分からん。
ウィザードでつくったものを、どう変更すりゃいいのか、意味不明。
C++とAPI知ってんのに、意味分からんマクロとか大杉。
すでにJavaに移行しました。Java分かりやすくてサイコー!!
0634デフォルトの名無しさんNGNG
MFCがいやで、C++ Builderに逝った人は多そうだな。
漏れは、WTLにいったよ。
2005ではMFCはどうなるんだろう〜?
0635デフォルトの名無しさんNGNG
それなりに枯れてて出来たソフトの質はいいんだけどね
覚えるのにWin32API以上に労力が必要なのは痛いね
0636デフォルトの名無しさんNGNG
俺MFCに依存しまくり・・・・・・・orz
0637デフォルトの名無しさんNGNG
全然 Foundation じゃないよね。
0638デフォルトの名無しさんNGNG
MFCに挫折して、Delphiに逝った趣味グラマです。Delphiだと、VCLのソースを見る事は少ないです。MFCのフレームワークは、いくつものクラスを連動して使う事を強いられます。VCLだと、あるコンポーネントだけ使うということが容易なのがいいです。
0639デフォルトの名無しさんNGNG
MFC の限界っていうより、C++ の限界にかなり制約を受けてると思う。
0640デフォルトの名無しさんNGNG
C++がもっとまともな仕様なら
MFCも使いやすいライブラリになっていただろうに。
0641デフォルトの名無しさんNGNG
最近Java厨がいろんなスレを荒らしてるね
0642デフォルトの名無しさんNGNG
MFCが肌に合わないならWTLでも試しては伺か?
ってか、厨房の言語の宣伝とかいらねぇ。

Del厨もJava厨も巣に帰れと(ry
0643デフォルトの名無しさんNGNG
そもそもMFCが肌に合わないとかいう話がスレ違いなんだが。
愚痴はマ板へ。
言語厨は厨用スレへ。
ここはどんな理由にせよMFCを使う人のためのスレ。
0644デフォルトの名無しさんNGNG
亀ですがクラスレベルでスレッドセーフとは何を意味してますか?
オブジェクトレベルでスレッドセーフでないということは分ります。
同一インスタンスのものを複数のスレッドから触るときは排他がいるということですね。

クラスレベルでもスレッドセーフでないと言ったらどうなるのでしょう?
たとえばそれはあるクラスがstaticなメンバなどを使ってそのクラスの共有の
情報をもっていてそれが複数のスレッドから触られるとおかしくなるような設計である。
といったことですか?
0645デフォルトの名無しさんNGNG
dejavu?
0646デフォルトの名無しさんNGNG
>>644
そういうことだと思う
0647デフォルトの名無しさんNGNG
>>646
ありがとう!
0648デフォルトの名無しさんNGNG
.NETにはあるようですが、MFCにてurlencodeをする方法がみつかりません。
良き方法があればご教授いただきたい。
やはり、コーディングするしかないのでしょうか?
0649デフォルトの名無しさんNGNG
>>640
時間軸として逆じゃね?
ARM以前のC++の貧弱な表現力で作ったらあーなったのがMFCで、
ある意味、今のC++に至る過程でMFCは反面教師として機能していた。
0650デフォルトの名無しさんNGNG
今MFC作ったらCStringもstd::stringの派生だったかもしれないね。
CObArrayなんかもなかっただろうし。
0651デフォルトの名無しさんNGNG
>>650
無知登場
文句は受け付けません
ググレ
0652650NGNG
>>651
文句は言わんが、あんたの言いたいことが判らん。
#だからこそ無知と言われているのだろうが。
0653デフォルトの名無しさんNGNG
>>651
ない爪を隠そうとしなくてもw
0654デフォルトの名無しさんNGNG
ほんとに無知なのに勘違い自信家だと調べもしないで偉そうにするのな(しかも自作自演)
0655デフォルトの名無しさんNGNG
質問です。
MFCでアクセスのDBから検索するプログラムつくりました。
一緒にアクセス(のフォーマット)のDBを配布したいんですけど
ライセンスは大丈夫ですかね?
0656デフォルトの名無しさんNGNG
ダイアログバーの追加がうまくいきません

テンプレートを作って
CMainFrameでCDialogBarのオブジェクトを用意
コンストラクタでCreateを呼ぶ

でコンパイルは通りますが実行しようとすると
"0x77f5284"の命令が"0x00000000"のメモリを参照しました。
メモリが"written"になることはできませんでした。
と出て実効できません。

とりあえずダイアログバーを表示するだけの場合でも他に何かやらなければならないことがありますか?
0657デフォルトの名無しさんNGNG
>>656
CMainFrameのコンストラクタで、CMainFrameを親としてCDialogBarをCreateしてる
というオチだろうか?
0658デフォルトの名無しさんNGNG
>>656
コンストラクタ内の auto 変数として CDialogBar オブジェクトを定義している
というオチだろうか?
0659デフォルトの名無しさんNGNG
>>656
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_DlgBar.html
0660656NGNG
なんか勘違いしていました
コンストラクタではなくMainFrameのOnCreateでCreateを呼んでいます
CDialogBar オブジェクトはちゃんとCMainFrameクラスのメンバとして宣言していますし

>>659のサイトの通りにやっても同じエラーが出て実効できません
0661デフォルトの名無しさんNGNG
>>660
まず落ちている個所を特定しる。
0662デフォルトの名無しさんNGNG
>>650
UNICODEビルドの場合、std::stringの派生じゃ困ると思う。
0663デフォルトの名無しさんNGNG
>>662
std::basic_string<TCHAR>
0664デフォルトの名無しさんNGNG
>>663
そんなことみんな知ってるよ
0665デフォルトの名無しさんNGNG
>>664
ちゃんと話がかみ合ってると俺は見ているが・・・
この後の展開次第かもな
0666デフォルトの名無しさんNGNG
いまのCStringってテンプレートだよね
VC++6.0はちがったとおもったけど
0667デフォルトの名無しさんNGNG
>>666
そそ、C6とC7で互換性がなくて怪しげなソースが引っ掛かり捲くり。
C6は兎も角、C4の頃はまともにテンプレートが使えない状態だったし。
0668デフォルトの名無しさんNGNG
VC++.NETつかえねー
0669デフォルトの名無しさんNGNG
>>668 ( ´,_ゝ`)プッ・・
0670デフォルトの名無しさんNGNG
>>667
爆弾? 新型でてるのか??
0671デフォルトの名無しさんNGNG
C6とかC7って首都高みたいだな。
0672デフォルトの名無しさんNGNG
タイトルバーの文字列ってどう変更するんでしょうか?
実行途中で変えるとか起動時に変える
というのではなく、デフォルトを変えたいと言うか…
0673デフォルトの名無しさんNGNG
>>672
リソースストリングテーブルのIDR_MAINFRAMEに
・SDIなら先頭から\nまでの文字列
・MDIなら文字列そのもの
がタイトルバーに表示されるような気がした。
0674672NGNG
>>673
変更できました
ソースを必死で検索してました…

ありがとうございました
0675デフォルトの名無しさんNGNG
>>674
大サービスついでに言っとく。
ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/caption.html
0676デフォルトの名無しさんNGNG
>>675
リンク先のページで、動的に変える場合は SetWindowText とか使えとなっているけど、
CFrameWnd::SetTitle で変えるか、GetTitle をオーバーライドして変えておかないと
不意に元に戻されて「MFCは陰で何やってるかわかんない・・・APIだけの方がラクぽ」
ってことになるので注意。
0677デフォルトの名無しさんNGNG
TCHARと_TCHARのちがいってなんですか?
0678デフォルトの名無しさんNGNG
>>677
_TCHAR
 tchar.hが_UNICODE/_MBCSが定義されているかで切り替える。
TCHAR
 windows.h(の中のwinnt.h)がUNICODEが定義されているかで切り替える。LPCTSTRなどの仲間がいる。
0679デフォルトの名無しさんNGNG
質問させてください。

MFCでSDIのプログラムを作っています。
ビューの基本クラスをCTreeViewにしています。

フレームのメンバ関数から、ビューのメンバ関数を使えずにいます。

ビューの基本クラスがCViewの場合、ポインタをGetActiveViewで取得でき、
そこからメンバ関数を使えると思うのですが、
自分のプログラムの場合、CTreeViewなので、GetActiveViewの戻り値を
CTreeViewにキャストして関数を使ったところ、コンパイルは通るのですが、
アドレスがおかしいなどのエラーがでました。

どなたか知恵をかしてください。

0680デフォルトの名無しさんNGNG
>>679
まずはデバッガで GetAvtiveView が返してきたものを見てみたら?
0681デフォルトの名無しさんNGNG
>>679
そりゃCTreeViewにキャストしたらCTreeViewまでのメンバしか使えないでしょ。
0682679NGNG
>>680
ぬるっす。
わかりました。OnCreateでやってたからだめなんですね。
Activeじゃないですものね。

ありがとうございました。
0683デフォルトの名無しさんNGNG
質問です。
エクスプローラの超簡易版みたいなものを作っています。
ツリービューでの表示と展開はできるようになったのですが、
たとえば展開しているフォルダに別アプリなどで新しいフォルダ
を作成した時、すぐにエクスプローラの表示に反映させるには
どうすれば良いでしょうか?

MFC6.0です、よろしくお願いします。
0684デフォルトの名無しさんNGNG
>>683
FindFirstChangeNotification
0685デフォルトの名無しさんNGNG
>>684
ありがとうございます!
0686デフォルトの名無しさんNGNG
>>678
回答ありがとうございます。MFCだと_TCHARがよさそうなので_TCHAR使います。
0687デフォルトの名無しさんNGNG
MFCアプリのGUIスレッドでメッセージだけでなくCEvent等の
監視も行いたいと考えています。とりあえず考え付くのは
CWinThread::PumpMessage内のGetMessageの前、又は
OnIdleにてMsgWaitForMultipleObjectsを呼ぶ方法です。
CWinThread::RunのoverrideにしてもOnIdleのブロックに
しても余り一般的とは思えず躊躇してます。

似たような事をやったことある人がいれば意見をお願いします。
0688デフォルトの名無しさんNGNG
>>687
AfxBeginThread()でスレッドを作り、その中でシグナルイベント待ち。
ユーザーインターフェーススレッドに対して通知をしたい場合は、
WM_USER以上のユーザー定義メッセージを送信する。
受け取る側でもメッセージをユーザー定義メッセージ受信できるようにしておく。
0689デフォルトの名無しさんNGNG
MFCベースアプリで実装されている機能についてプラグインにすることになったのですが
プラグインとはどうやって作ればいいのでしょうか?
0690デフォルトの名無しさんNGNG
>>689
susieプラグインで練習してみれば?
0691デフォルトの名無しさんNGNG
>>688
WM_USERじゃ拙いって。WM_APPを越える値がお勧め。

>>687
私のアプリでは、タイマーでイベント監視をした。
イベントの場合は落とし穴がいろいろあるから気をつけてや〜
0692687NGNG
>>688
別スレッドだとスレッドスイッチが多くなるのが少し
気になります。

>>691
タイマーだと処理周期が頭打ちとなってしまいそうです。

基本的には688の方法でもパフォーマンス的にはOK
だと思いますが、MsgWaitForMultipleObjectsを使えば
監視するだけのスレッドを立ち上げずにすむかなぁと思い
質問しました。
0693デフォルトの名無しさんNGNG
ActiveXをDllに組み込み、プラグインにしたいです。
メニューのプロジェクトへ追加、コンポーネントとコントロール・・を使って追加すると
ラッパクラスが出来ると思うのですがこれを使うことは出来るのでしょうか?

このクラスのインスタンスをDll側のグローバルに用意してもいざメソッドを呼ぶと
void AFX_CDECL CWnd::SetProperty(DISPID dwDispID, VARTYPE vtProp, ...)
{
  ASSERT(m_pCtrlSite != NULL); // not an OLE control (not yet, at least)

で引っかかってしまいます。
このクラスは使わずに自分でCreateInstanceするのですか?
0694デフォルトの名無しさんNGNG
>>692
処理速度が問題になるなら、イベントでの同期は検討しなおした方がよくない?
イベントはそれ自体早くないと思うし、発行側は処理側が処理したことを知りえないから
何らかの方法で返信しないといけなくなるしね。
0695デフォルトの名無しさんNGNG
>>687,692
質問者の分際で、評論家・審査員を気取ってんじゃねーよ、クソが
0696デフォルトの名無しさんNGNG
MFC使っときながらスレッド生成のコストを気にする人には困ったものだ。
単にスキル不足なだけちゃうんかと。
■ このスレッドは過去ログ倉庫に格納されています