トップページ⇒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 の辺り。
0175デフォルトの名無しさんNGNG
MFCでコマンドライン引数を渡したいです。

m_lpCmdLineを使うのはわかったのですが、サンプル欲しいです。

渡したいコマンドライン引数は
「xxx.exe -a:c:\hoge.txt -b:c:\poko.txt」
MFCのダイアログベースで制作しているアプリです。
引数を他のcppファイルで受け取って、変数に入れて使用したいです。

宜しくお願い致します。

0176デフォルトの名無しさんNGNG
>>174
回答ありがとうございます
つまり、CDialogBarを派生させないといけないと言うことですね

問題のおきているソースは、かなりでかいプロジェクトでCDialogBarのほとんどの
コマンドハンドラーはCMainFrameに記述されています。
そのためCDialogBarの派生クラスに持っていくのは結構手間がかかってしまいます。

ためしに新規にダイアログバーを持つSDIアプリを作ってみたところスピンコントロールは
問題なくEnableになっていました。
MFCのソースを解析してみたところ、通常ボタンコントロール以外はGet(DLGC_BUTTON以外)
Enableになるように見受けられるのでもう一度どういう原因でDisableになるか調べてみようと思っています
0177デフォルトの名無しさんNGNG
途中で送信してしましました

・・・・
問題なくEnableになっていました。
MFCのソースを解析してみたところ、ジェネリックボタンコントロール以外は
(WM_GETDLGCODEの戻り値がDLGC_BUTTON以外)
Enableになるように見受けられるのでもう一度どういう原因でDisableになるか
調べてみようと思っています

0178デフォルトの名無しさんNGNG
ついでだから回答w
>>175
MFCの場合引数はCCommandLineInfoを継承したクラスを生成して
ParseParam関数をオーバーライドして引数を解析するというのが一般的です。
(といいつつあまり一般に利用されていないけど)
今回の引数は形式がウインドウズの標準と違うため、独自に文字列の
切り離しなどを入れるしかありません-をオプションの識別子としているのであれば
-を取ってコロンを境に前後に文字列を分ける等の処理を入れれば良いでしょう

さてそれを他のcpp(多分他のクラスということでしょうか)に渡すのであれば
ab切り出したそれぞれの文字列変数(CStringなど)を別のクラスに渡せばいいと思います
0179デフォルトの名無しさんNGNG
>>175
>>32
0180デフォルトの名無しさんNGNG
すいません。
ちょっと質問です。

今、巷の普通の本屋さんで売っているWindowsプログラムの本は大体Visual C++の
本です。
それでそういう本には、「ウイザードで勝手に作られるんで、カスタマイズしたいときは
ここをいじってください」としか書いてなくて、なぜそこをいじればいいのか、プログラムが
どういう流れになっているのか全く分かりません。

結局、SDKの方が分かりやすいと思い、まずはそっちをやることにしました。
みなさんはどうやってMFCを勉強されたのでしょうか?
もっと良い入門書があるのでしょうか?
0181デフォルトの名無しさんNGNG
>>180
どの関数がどのクラスのメンバか意識するようにしたら理解できた。
関数名しか書いてなくても、クラス名::関数名 っていうようにして憶える。
0182デフォルトの名無しさんNGNG
>>180
> それでそういう本には、「ウイザードで勝手に作られるんで、カスタマイズしたいときは
> ここをいじってください」としか書いてなくて、

まずはそこから始めて、具体的な成果物を作らないことにはモチベーションが
持続しないと思うが。体系なんてものは大きすぎてなかなか理解できるもので
ないし、とにかく何か動くものを作れるようになることが先。手段は後で良いんだ
よ。まず「何を作りたいか」、「どういう動きをさせたいか」が大切。それに沿って
どうすれば良いかを調べていく。経験を重ねれば、下層にあるものがだんだん
見えてくるし、それからシステムの学習に入ればいい。

もちろん、CやC++の基礎がないようなレベルだったら話は別。そういった
言語レベルの基礎知識は身に付いてないとVCプログラミングは難しい。
0183デフォルトの名無しさんNGNG
>>180
そんなあなたに
翔泳社の標準講座MFC ハーバートシルト著
0184デフォルトの名無しさんNGNG
>>180
MFC→ウィザードが生成したものをいじる
SDK→猫からソースパクっていじる

結局同じ
0185デフォルトの名無しさんNGNG
>>180
食わず嫌いせずとりあえず一番高いものに食いついて、消化できなくて吐き出して、
高い金払って食って吐いて、高い金払って食って吐いて、
食って吐いて、食って吐いて、食って吐いて……と繰り返しあがき続けていたら、
いつの間にかMFCでもSDKでも問題なく使えるようになり、物も食えるようになっていた。

しかし、そこに行き着くまでに消費した書籍代は…… _| ̄|○
0186デフォルトの名無しさんNGNG
本来、クラスライブラリはその中の構造に関する知識を必要としな
いものだ。したがって
>なぜそこをいじればいいのか
>プログラムがどういう流れになっているのか
なんて気にするな。
と考える俺は少数派だと自覚しております。
0187デフォルトの名無しさんNGNG
>>185
途中で降りたらベット丸損だぞ
本と同じ重さの札束を狙う大博打ってとこを忘れんな
0188デフォルトの名無しさんNGNG
void hoge(void)
{
  CPen myPen;


  myPen.DeleteObject(); ←これいるんですか?
  Delete myPen;      ←これもいるんですか?
}

CPenってスコープ外れる時に、この辺やってくれないの?
0189デフォルトの名無しさんNGNG
>  Delete myPen;      ←これもいるんですか?

こんなのいれたらコンパイルとおらねぇよ。
0190デフォルトの名無しさんNGNG
>>189
myPen.DeleteObject();
これ、必須ですか?
0191デフォルトの名無しさんNGNG
msdnより、

1.スタック フレーム上にグラフィック オブジェクトを定義します。CreatePen など、それぞれの型固有の作成関数を使って、オブジェクトを初期化します。コンストラクタでオブジェクトを初期化することもできます。
 1 段階で作成する方法と、2 段階で作成する方法については以下に説明します。
2.オブジェクトを現在のデバイス コンテキストに選択し、前に選択した古いグラフィック オブジェクトを保存します。
3.現在のグラフィック オブジェクトを使い終わったら、古いグラフィック オブジェクトをデバイス コンテキストに選択し直して、状態を復元します。
4.フレームに割り当てられたグラフィック オブジェクトは、スコープからはずれたときに自動的に削除されます。

これ見て意味わからんかったら再度質問しろ。
0192デフォルトの名無しさんNGNG
>>188
その変数がスコープ内で使い切りになっていて、デストラクタによる削除で
間に合う場合は、DeleteObject()が不要。ただしDeleteObject()を書いても
悪くはない。

デストラクタに任せるか、明示するかの違い。あるいはそれぞれその必要が
あるかどうか場合によって選択する。

>Delete myPen;
は?
0193デフォルトの名無しさんNGNG
>>191
>>192
ありがとう、謎が解けました。
これで熱帯夜も眠れそうです。

Delete myPenは立ち読みした時に載っていて、
「え?そんなんまで書くんだ・・・」
と記憶していたもんで・・・
0194本田NGNG
>復刊リクエスト投票
>MFCインターナル
>著者名 G. シェパード/S. ウィンゴ=著、玉井 浩=訳
>出版社 アジソン・ウェスレイ・パブリッシャーズ・ジャパン
ttp://www.fukkan.com/vote.php3?no=24811

興味のある方は投票お願いします。
0195デフォルトの名無しさんNGNG
>>188
MFCってよりC++の根本的な理解が足りないだけじゃないんですか?
0196デフォルトの名無しさんNGNG
>>193
deleteはnewしたときだけ
0197デフォルトの名無しさんNGNG
>>195
CDCとCClientDCのデストラクタの違いについて
C++の根本的な理解で説明してくれ
0198デフォルトの名無しさんNGNG
CDC::~CDC()
{
    if (m_hDC != NULL)
        ::DeleteDC(Detach());
}

CClientDC::~CClientDC()
{
    ASSERT(m_hDC != NULL);
    ::ReleaseDC(m_hWnd, Detach());
}
0199デフォルトの名無しさんNGNG
CPenから話が飛んでますよ
0200デフォルトの名無しさんNGNG
>>198
それがMFCのお話だ
0201デフォルトの名無しさんNGNG
っていうか、C++理解していれば、
わざわざここに質問するようなことではないのだが。
単なる仕様だろ。
0202デフォルトの名無しさんNGNG
そのMFCの仕様が分からないから、ここに質問したのだと思われ・・・
0203デフォルトの名無しさんNGNG
仕様ならヘルプに書いてあるよ。
>構築時に Windows の GetDC 関数を呼び出し、
>破棄時に ReleaseDC 関数を呼び出します。
0204デフォルトの名無しさんNGNG
>>202
ヘルプも見ないで質問する人、どう思います?
0205デフォルトの名無しさんNGNG
>>204
ヘルプを見れない環境ですが、何か?
0206デフォルトの名無しさんNGNG
>>205
これか
http://www.itmedia.co.jp/news/articles/0407/07/news061.html?nc30
0207デフォルトの名無しさんNGNG
これから先は、

ヘルプに書いてある事質問禁止

でお送りします
0208デフォルトの名無しさんNGNG
ム板ってヘルプみたいなもんだろ。違うか?
0209デフォルトの名無しさんNGNG
>>208
C++の根本的な理解が足りない人
0210デフォルトの名無しさんNGNG
>>209
C++ と何の関係が?
0211デフォルトの名無しさんNGNG
>>210
>>195に聞いてくれ
0212デフォルトの名無しさんNGNG
もうさ、BCBにしとけって
マジおすすめ
0213デフォルトの名無しさんNGNG
BCBの何がいいのかマジわからんぞ
つか、WindowsアプリではVC最強!
0214デフォルトの名無しさんNGNG
そんな恥ずかしい事、ageて言わないでくれ・・・
0215デフォルトの名無しさんNGNG
>>214
>>213は事実ですが・・・
0216デフォルトの名無しさんNGNG
MASMは?
0217デフォルトの名無しさんNGNG
名刀のような名前ですね。
0218デフォルトの名無しさんNGNG
>>213
はげ同
BCBは使えるが、VC++は使えないなんて香具師は
まず、仕事回してもらえないだろうね
0219デフォルトの名無しさんNGNG
仕事は回ってこないが、意固地な友達が増えるという利点がある。
0220デフォルトの名無しさんNGNG
スレ違いな話はそろそろやめれくれや
0221デフォルトの名無しさんNGNG
ヘルプが見れない環境って、
その時点で仕事放棄してるのと同じだ...orz
0222デフォルトの名無しさんNGNG
>>221
少なくても、本人の仕事環境に対する意識はゼロといえるだろう。
ヘルプが見れない環境のくせに、ここで得意になって質問されてもね。
車でガス欠しちゃうくらい恥と思わなきゃ。
0223デフォルトの名無しさんNGNG
え?VC++ってヘルプ無いの?!!!
最弱〜 orz
0224デフォルトの名無しさんNGNG
>>222
まともに答えられないくせに上級者気取りか。
おめでてーな。
0225デフォルトの名無しさんNGNG
2chできる環境ならオンライン版の
MSDNライブラリが見られるはず。
0226デフォルトの名無しさんNGNG
レスればレスるほどに恥ずかしさが増してくるよ。
VC++ぐらい1人でインストールしなさいって。
そうすりゃヘルプぐらい見れるから。
0227デフォルトの名無しさんNGNG
釣られまくりだな
0228デフォルトの名無しさんNGNG
趣味でやっていますが…
0229デフォルトの名無しさんNGNG
全部自演ですよ?
0230デフォルトの名無しさんNGNG
ところで226みたいな奴はこのスレに何を期待してるんだ?
0231レスるNGNG
レスる
0232デフォルトの名無しさんNGNG
ヘルプは読み方が分からないってのもあるからねぇ。
日本語かどうかじゃなくて、書いてある言葉そのものが読みきれないっていうか。

その辺をうまく要約してくれる神を求めて、ここに書いてることもあるでしょ。
0233デフォルトの名無しさんNGNG
MFCを使ったOOPのやり方について解説している本あるいはサイトがあったら教えてくれませんか?
0234デフォルトの名無しさんNGNG
>>233
こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1085915001/
0235233NGNG
すいません、まとはずれな質問しましたか??各クラスの役割がいまいち
よく分からないんですが・・・。
0236デフォルトの名無しさんNGNG
>>235
まとははずして無いと思います、
まともな回答者を待ちましょう
0237デフォルトの名無しさんNGNG
>>235
ところでヘルプは読んだか?ヘルプは?
0238233NGNG
>>237
一応読みました。OOPの勉強はしたのですが、いざMFCで実現しようとすると、どのように
したらよいか、ってのが分かりません。例えば、CWinAppっていうのはコントローラなのか、
とか、ドキュメントクラスはなんなのかってことです。ほかには、画面を次々と切り替えて
行くとき、それぞれの画面のクラスを作成するのか?とかよく分かりません。作成すると
したら、それを切り替えるたり、生成したりするのはどのクラスでするべきなのか、とかです。
0239デフォルトの名無しさんNGNG
つまり、まだC++使う時期じゃないと思うのですよ。
自分で試行錯誤、いろいろやりながら覚えていく手間を惜しむのなら、
はじめからやめたほうがいいと思います。
0240デフォルトの名無しさんNGNG
でたな。上級者気取りのオッサン
0241デフォルトの名無しさんNGNG
>>240
さぞ悔しかったんだろう
ほっといてやれ
0242デフォルトの名無しさんNGNG
お前ら、まだやってんの?寝たら?
0243233NGNG
>>239
いや、ある程度実践的なプログラムの作成はこなしたんですが。いまだにどうすべきか、
ってのが分からずだましだましプログラミングしてる状況です。

あと240ではないです。
0244デフォルトの名無しさんNGNG
>>243
>>239みたいな変な奴に気を使う必要はないよ。
0245デフォルトの名無しさんNGNG
>>233
実践的なプログラムの作成をこなせてるのなら
今のままでも問題ないのでは?
0246デフォルトの名無しさんNGNG
なんだ。趣味のプログラムか。
0247デフォルトの名無しさんNGNG
まさか仕事中に、「ドキュメントクラスってどうやって使うのですか?」
なんて聞いてまわったりしてないよね... orz
0248デフォルトの名無しさんNGNG
>>246
また上級者気取りのレス。いい加減にしろ。
0249本田NGNG
>これから先は、
>ヘルプに書いてある事質問禁止
>でお送りします

BCBはMFCが付いていてもヘルプがない、冷たいこと、言わんといて。


0250デフォルトの名無しさんNGNG
225 :デフォルトの名無しさん :04/07/09 04:06
2chできる環境ならオンライン版の
MSDNライブラリが見られるはず。
0251中級者気取りNGNG
ドキュメントクラスなんて、あれよ。ただのクラス。
ちょっと規模がでかくなりそうなんで、
描画用(ビュークラス)とデータ処理用(ドキュメントクラス)
に分けてみっか!てな感じ
0252デフォルトの名無しさんNGNG
>>251
そういうことじゃないんですが・・・、なんていったらいいんでしょうか?それ、
曖昧なんですよね・・・。その説明じゃ役に立たなかったというか・・・。
0253デフォルトの名無しさんNGNG
>>252
どうわからないのか説明できないのなら教えようが無いな。
0254デフォルトの名無しさんNGNG
>>253
例えば、商品注文システムを考えると、商品注文クラス(商品の1回での注文を表すクラス)というのが
ありますよね?それをドキュメントクラスの子クラスとするのか、それとも、そのクラスのオブジェクトを
保持するのがドキュメントクラスなのか、とかです。
0255デフォルトの名無しさんNGNG
>>254
分離独立です。
関連性もたせちゃダメ
0256デフォルトの名無しさんNGNG
>>255
ということは、そのクラスのオブジェクトを保持するのがドキュメントクラスってことですか??
0257デフォルトの名無しさんNGNG
>>238
OOPなんて言葉に縛られず、ひとつひとつのクラスの使い方を確実にマスターしてくことでしょうな。
100個も覚えられれば、そのうちピーンと何かがひらめいてくるだろう。
一度ひらめいてしまえば、クラスなんて覚えなくてもヘルプ片手にプログラムできるようになる。

その辺の話は、知るより感じなければならない部分なので、他人に聞いても解決しないよ。

0258デフォルトの名無しさんNGNG
仮想リストコントロール内でのアイテム選択変更に
SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED | LVIS_FOCUSED);
とやっても選択が変わってくれないんですけど、これは使えませんか?
仮想LCだと選択についてもやり方が別になってますか?
0259デフォルトの名無しさんNGNG
>>254も>>256も全部不正解
0260デフォルトの名無しさんNGNG
>>250
ケータイから2chにアクセスしていますが、何か?
0261デフォルトの名無しさんNGNG
ドキュメントクラスってのはMVCでいうModel部分。
データ管理部分のクラス。

で、データをドキュメントクラスに持たせるか、派生クラスに持たせるかなんてのは
自分の好きにすればいい。
0262デフォルトの名無しさんNGNG
>>260
何か?
じゃねーよ。ばか。
0263デフォルトの名無しさんNGNG
>>262
ケータイから2chにアクセスしています。
ケータイで使えるヘルプのURLを教えて下さい。
0264デフォルトの名無しさんNGNG
ここで釣られまくってる香具師はプロとして失格だね。
0265デフォルトの名無しさんNGNG
どいつもこいつもC++の根本的な理解が足りないだけだな
0266デフォルトの名無しさんNGNG
よく釣れるな・・・この釣堀は
0267デフォルトの名無しさんNGNG
>>264
プロって、2chのプロか?
それなら失格で大いに結構!!
0268デフォルトの名無しさんNGNG
>>267
おまえはプログラマとして失格だな
ただのグラマ
0269デフォルトの名無しさんNGNG
プロのグラマーって、ゲームセンターあらしであったネタだな。
0270デフォルトの名無しさんNGNG
釣られてる香具師ってコンプレックスのかたまりなんだと思う。
もっと冷静になって、自分をもっと知るべきなんだろうね。
まあ、オチケツ、と言っておこう。
0271デフォルトの名無しさんNGNG
厨房の行動

  ・負けそうになると「釣れた!」という

--某所より転載
0272デフォルトの名無しさんNGNG
>>263
http://www.microsoft.com/japan/msdn/library/
0273デフォルトの名無しさんNGNG
>>272
FOMAで見てみましたが、どうやらケータイには対応していないようです。
0274デフォルトの名無しさんNGNG
見れない人はMSDNサブスクリプションの年間契約をしてください。
■ このスレッドは過去ログ倉庫に格納されています