トップページ⇒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/
0413デフォルトの名無しさん2007/01/31(水) 00:51:06
>>412
ありがとうございます!
やってみます!
0414デフォルトの名無しさん2007/01/31(水) 00:52:14
>>411
だったらOnDestroyは関係ないんじゃない?
つか、親のOnDestroy後にCListCtrlにアクセスされたら(するのか?)死ぬじゃない。
親のデストラクタでdeleteしとけばいいんじゃね?やってみ、やってみ。やってみたら結果報告ヨロ
0415デフォルトの名無しさん2007/01/31(水) 00:53:07
CMainFrame::OnDestroy()の前後どっちか2択と言われたら後に1票。

個人的には、Documentで扱っているデータなら
CHogeDocument::OnCloseDocument() or OnSaveDocument()
ViewのみでやってるならCHogeView::PostNcDestroy()でやると思う。
CMainFrameにCListCtrlのデータ持たせるとViewからデータへの
アクセスが面倒じゃない?
0416デフォルトの名無しさん2007/01/31(水) 01:08:09
>>414-415
ありがとうございます!
いろいろと試してみます!
0417デフォルトの名無しさん2007/01/31(水) 08:40:38
親ウインドウと関係あるのはopenからcloseまで
closeしたらウインドウ関係ないから心配いらん

>綺麗な(オブジェクト指向的な)ソースコード

普通はデストラクタで解放
0418デフォルトの名無しさん2007/02/01(木) 00:21:49
CListCtrl コントロールのイベント処理ですが
クリック時とダブルクリック時とで処理を分けたいと思っています
しかし、ダブルクリック時には先に必ずクリックイベントが
発生してしまってうまくいきません
NM_DBLCLK の直前に NM_CLICK が発生するのを
防ぐことはできませんか?
0419デフォルトの名無しさん2007/02/01(木) 00:53:14
仮にNM_CLICKが発生しないようにしたらシングルクリック時の処理が出来ない。
コントロールの身になって考えれば、ユーザーのクリックがシングルなのかダブルの1発目
なのかの判断はできない。

シングルクリック時の処理開始をしばらく待ってみる以外手はないと思う。
0420デフォルトの名無しさん2007/02/01(木) 01:11:47
>>419
レスありがとうございます
つまり、NM_DBLCLK 前には NM_CLICK が
絶対に発生してしまうということですね
何か良い手はないですかね・・・
0421デフォルトの名無しさん2007/02/01(木) 01:20:02
だからシングルクリックのイベント後、しばらく待ってみてダブルクリックが来ないようなら
シングルの処理。来たらダブルの処理するだけ。

VBのサンプルではタイマー使ってるみたい。
http://support.microsoft.com/kb/109865/ja
0422デフォルトの名無しさん2007/02/01(木) 09:45:30
本来はダブルクリックってーのは、シングルクリック→メニュー等選択
のショートカットだから、シングルクリックのあとにダブルクリックがきても
何も困らないんだけどな。
ダブルクリックを変なことに使おうとするからこうなる
0423デフォルトの名無しさん2007/02/03(土) 19:33:32
これからMFCの勉強を始めたいのですが
書籍の「標準講座MFC」って今でも役に立つでしょうか?

MFC6.0ってちょっと古いみたいですが、最新のバージョン(MFC8.0?)と
大きく違うところってあるのでしょうか
0424デフォルトの名無しさん2007/02/03(土) 20:20:00
仕事でどうしても必要なのか?
でなければ止めとけ。
0425デフォルトの名無しさん2007/02/03(土) 20:42:57
>>423
新しいUI関連のクラスがいくつか無いだけで、基本はそんなに変わってないと思うけど。
0426デフォルトの名無しさん2007/02/03(土) 21:18:50
http://www.shoeisha.com/book/hp/pc/book/MFCMaster/
ソースは公開されてる
0427デフォルトの名無しさん2007/02/03(土) 21:57:59
お前ら教えてください。
ツールバーのボタンに文字列のみ表示したいのですが、
TBBUTTON::iBitmapにNULLを指定しただけでは
イメージ(アイコン?)のスペースの分のスペースが空き、
そこから先から文字列が描画されてしまいます。
どうすればいんでしょうか?
0428デフォルトの名無しさん2007/02/03(土) 22:40:06
CToolBarでできそうな気がするけど
04294272007/02/03(土) 22:47:49
>>428
なるほど!
CToolBar::SetSizes()の中にやり方が書いてありました。
助かったよ!ありがとう!
0430デフォルトの名無しさん2007/02/04(日) 09:09:06
今、Visual C++ 6.0 を使ってるのだが、開発環境をバージョンアップしようとしたら
どれを導入すればいいのだろう?

無料で配布されている Visual C++ 2005 Express は MFC は入ってないんですよね?

それとも、あと少し待って次のバージョンが出たときのほうがいいんでしょうかね。
0431デフォルトの名無しさん2007/02/04(日) 09:26:03
>>430
そりゃおめ、vista上で動くモン買えや。
いま、XPでなにやら揃えるのは無駄でしょ?
0432デフォルトの名無しさん2007/02/04(日) 11:30:15
IEのメニューの用に画面に収まりきらないメニューがある場合は
「>>」を表示し、「>>」を押せば残りのメニューが表示されるようにしたいのですが、
そういったコントロールがあるのでしょうか?
どなたかヒントだけでもわかる方おられましたら教えてやって下さい。
0433デフォルトの名無しさん2007/02/04(日) 11:39:00
軍人や警官の袖に付いている山形の袖章のことをいうのだそうです(多分)。
0434デフォルトの名無しさん2007/02/04(日) 12:05:06
USECHEVRONあたりで探せば?
04354322007/02/04(日) 12:31:54
>>434
「>>」はChevronって言うんですか用語自体知りませんでした。
Chevronでぐぐればすぐにでてきました。
教えていただかなければ数日ははまるとこでした、
ありがとうございます。
0436デフォルトの名無しさん2007/02/04(日) 14:14:26
フランス車に詳しければ直ぐに判るんだがな。
0437デフォルトの名無しさん2007/02/04(日) 22:58:24
CFont::CreateFontとかCFont::CreateFontIndirectって
CFont オブジェクトを使い終わったら、最初にデバイス コンテキストからフォントを選択して、それから、CFont オブジェクトを削除します。
ってあるけどデストラクタで解放してくれないの?

解放しないままアプリ終了したらリソースリークするのかな?
0438デフォルトの名無しさん2007/02/04(日) 23:01:29
CClientDC::SelectObject
よばなきゃ問題ないのか???
よくわからん
0439デフォルトの名無しさん2007/02/04(日) 23:06:49
エディットボックス内のフォントを変更すのみで
DCで直接使用しない場合は問題ないのか???

MSさんさっぱりわかりませんorz
0440デフォルトの名無しさん2007/02/04(日) 23:19:29
SetFontで
0441デフォルトの名無しさん2007/02/05(月) 00:11:26
>>437
デバイスコンテキストに選択されたままだと解放されないと思った。
0442デフォルトの名無しさん2007/02/05(月) 17:27:27
CHtmlViewについてお聞きしたいのですが
http://www.microsoft.com/japan/msdn/columns/webteam/webteam02052001.aspx
ここを参考にしてタブではないブラウザを作成したのですがこの通りに記述しても
JAVAスクリプトで行っているブラウザのリサイズが正常に動きません。

テスト用に適当に選んだサイトですが
http://www3.ocn.ne.jp/~motiya/java/sample-4/window_choice1.htm
ここのsmall windowを押してもフレームのサイズが変更されません。
RecalcLayout等してもダメでした。メインフレームが正しくリサイズされる
方法をどなかた教えて頂けないでしょうか。

環境
VC6.0 WindowsXp SP2
0443デフォルトの名無しさん2007/02/05(月) 20:47:25
|あいう |^|
|えおか| | |
| | |
| | |
5| | |
| | |
| リッチエディット   | |
| | |
| | |
10| | |
| | |
| | |
| | |
| | |
15|--------------------------|↓|

スクロールバー

こんな感じの画面を作ることになったのですが
右のスクロールバーと左の行数のコントロール?(何でもいい)で
同期をとりたいのですがどのようにしたらよいのでしょうか?
なにかヒントでもありましたらご教授をお願いいたします。
環境:VC++2005 MFC
0444デフォルトの名無しさん2007/02/06(火) 01:38:15
すみません。CFileFind について、みなさんのお知恵を貸してください。
エディットボックスに入力したパスを CFileDialog で開く、という処理を作ってまして、
入力したパスの存在チェックを CFileFind で行っています。

ですが、C:\ や、\\hoge\ 等、ドライブのルートを指定した場合に存在を検出できず、
前回開いたフォルダがFileDialog で開かれてしまい、困っています。

どなたか良い方法をご存知でしたら、ご教授ください。
よろしくお願い致します。
0445デフォルトの名無しさん2007/02/06(火) 02:55:00
単独で現れる\記号の数をカウントすればいいんじゃないかい
"\\"はReplaceで別の記号に置き換えるとかして、
その後で"\"が1個だけならルート
0446デフォルトの名無しさん2007/02/06(火) 04:19:44
つか、そのまえになんでCFileFindってそんな厨仕様なの?
なんか意味あんじゃね?
0447デフォルトの名無しさん2007/02/06(火) 06:07:07
試してないけどCFileDialogで存在しないパスは指定できないような気がするけど
0448デフォルトの名無しさん2007/02/06(火) 06:14:37
ああそうか指定したパスをCFileDialogで開きたいのか
0449デフォルトの名無しさん2007/02/06(火) 06:39:44
>>444
ルートディレクトリが検出されないのは、内部で呼び出しているAPI側(FindFirstFile)の仕様。
CFileFindの仕様としては書かれてないかも。

FindFirstFileの説明にはルートディレクトリの属性を取得するにはGetFileAttributesを使えと書いてある。
0450デフォルトの名無しさん2007/02/06(火) 06:42:23
ところでみんなフルコントロールの拒否とかってどうやって判断してる?
0451デフォルトの名無しさん2007/02/08(木) 17:40:42
メニューをoffice風にするため調べたら
”ツールボックスからメニューをペタペタ”をすればいいらしい
しかし、MFCを使わなければならないことが判明

win32アプリにツールボックスからメニューをペタペタはできない
Wwindowsフォームで作るとできる
しかしForm.h、Form.resxとか変なファイルが中身見ると分けわかんなくなってるしWinmainがないぞ
C++とMFCは別物なのか!!


2005express
0452デフォルトの名無しさん2007/02/08(木) 18:10:06
>>451
それは.NET frameworkじゃね
0453デフォルトの名無しさん2007/02/08(木) 18:12:30
知らないうちにC++/CLIを使っている。いかんこれはゲイツの罠だ。
0454デフォルトの名無しさん2007/02/12(月) 00:31:01
初めて任されたツールが遂に完成シマスタ^^
予定では後一週間あるので連休明けはブラックボックステストと
ロゴの作成にかかりたいのですが、VC6 MFCのリソースエディータって
しょぼいですね(^^;フリーでお勧めのリソース編集ソフト知ってたら
教えてくださいオナガイシマス
0455デフォルトの名無しさん2007/02/12(月) 03:21:06
>>454
ロゴの作成にリソースエディタってお前馬鹿じゃないのか?
0456デフォルトの名無しさん2007/02/12(月) 08:22:50
いるんだよ、ソースコードもロゴ画像もIDEで編集しないと気がすまない馬鹿って奴が。
0457松井康明2007/02/12(月) 10:05:18
>>456
バカバカ言ってないで教えてやれよ
0458デフォルトの名無しさん2007/02/12(月) 10:22:31
ロゴの作成をMFCスレで質問するのは脳に異常があるんだろうな
進行が進まないうちに早めに治療を受けたほうがいいよ
0459デフォルトの名無しさん2007/02/12(月) 11:40:34
>>457
教えるも何も、「画像を作る」って聞いたら藻前様は何を使うと仰るのですか?
#ふつー、画像編集ソフトを使うと思うのだが。
0460デフォルトの名無しさん2007/02/12(月) 21:25:22
別にいいんじゃね、リソースエディタでも。センスがあれば。
0461デフォルトの名無しさん2007/02/13(火) 05:43:02
>リソースエディタでロゴ作成業務 8H
やべぇw脳勃起してきたw
0462デフォルトの名無しさん2007/02/15(木) 10:25:44
印刷プレビューをダイアログベースのプログラム(VC6.0)で実現するにはどうすればよいのでしょうか?
検索するとSDI/MDIのプログラムばかりで途方に暮れています。
0463デフォルトの名無しさん2007/02/15(木) 11:57:02
MFCのソース見れ
0464デフォルトの名無しさん2007/02/15(木) 12:47:54
印刷プレビューのアーキテクチャ
http://msdn2.microsoft.com/ja-jp/library/edak6tf8(VS.80).aspx
0465デフォルトの名無しさん2007/02/19(月) 13:44:30
りえ子、結婚してくれ
04664652007/02/19(月) 14:17:23
自己解決しました
0467デフォルトの名無しさん2007/02/19(月) 14:54:28
おめでとう
0468デフォルトの名無しさん2007/02/19(月) 20:27:55
いや、うまくいったら、自己解決とは言わない気が…。
0469デフォルトの名無しさん2007/02/19(月) 22:17:09
自己解決 = 脳内解決
だな
0470デフォルトの名無しさん2007/02/22(木) 14:48:31
誰か、知っている方、教えてもらえませんか。
リストの表示で、拡張スタイルにLVS_EX_HEADERDRAGDROPを指定し
仮想リストビューでアイテムの表示を行っております。
そして、カラムのドラッグ&ドロップで順番を入れ替える事が出来るのですが、
順番を入れ替えると、カラムのアイテム表示が、新しい表示と古い表示の両方が
出てしまいます。なぜでしょう?
------------------------
Colum1 | Colum2 | Colum3
------------------------
1 | 2 | 3
1 | 2 | 3

カラムの順番を入れ替えて、幅を広げると
古い表示が出てくる。
------------------------
Colum1 | Colum3 | Colum2
------------------------
1 | 3 2 | 2
1 | 3 2 | 2


VS.2005でMFCをスタティックでリンクに設定しております。

0471デフォルトの名無しさん2007/02/22(木) 15:02:59
123→132は判った。
123→312ではどうなる?
04724702007/02/22(木) 15:20:09
>>471
312ではColum3の表示が"3 1 2"となりました。
04734702007/02/22(木) 15:21:42
>>471
あ、言葉が足りませんでした。
Colum3のアイテム表示が"3 1 2"です。
0474デフォルトの名無しさん2007/02/22(木) 15:53:06
なんとなく、メモリ管理が失敗している悪寒。
04754702007/02/22(木) 16:19:39
原因が判りました。
スタイルにLVS_OWNERDRAWFIXEDが指定されていました。
MFCのROWLIST サンプルを元に、変更を加えていったのですが、
CListViewExで、LVS_OWNERDRAWFIXEDが指定されておりました。
レスをしてくれた方がには、お礼申し上げます。
0476デフォルトの名無しさん2007/02/22(木) 20:26:53
MFCを使って、できるだけ簡単にHTMLメールを
ダイアログベースで表示したいのですが、
どんな方法があるでしょうか?

0477デフォルトの名無しさん2007/02/22(木) 21:13:27
もうちょっと仕様検討してから来てください
0478デフォルトの名無しさん2007/02/22(木) 22:17:26
>>477
できるだけ簡単にできる方法に合わせて仕様を決めようかと思って。
0479デフォルトの名無しさん2007/02/22(木) 22:51:31
メールを表示するソフトなんて聞いたことがない
0480デフォルトの名無しさん2007/02/23(金) 10:17:31
HTMLを表示(レンダリング)するコントロールを探せ
0481デフォルトの名無しさん2007/02/23(金) 10:19:12
よくあるペイントソフトのような複数の画像表示ウィンドウに
共通のパレットダイアログを持つようなプログラムを作ろうと考えています。
MDIで生成すると、例えばファイル→開くを選択すると
ドキュメント以外にビューも生成されて、ビューが持っているパレットダイアログ(モードレス)
までが複数生成されてしまいますが、これを阻止するにはどのようにすればよいのでしょうか?
0482デフォルトの名無しさん2007/02/23(金) 10:26:24
パレットをビューに持たせてるのが間違い。
0483デフォルトの名無しさん2007/02/23(金) 10:33:26
>>482
確かにおっしゃるとおりです。
ウィンドウを切り替えたときにパレットの内容をアクティブなウィンドウの
情報に変えたいので、そのあたりの情報などを管理できる部分にまとめようと思うのですが
この場合、パレットを持たせるのはMainFrameでしょうか?
0484デフォルトの名無しさん2007/02/23(金) 21:47:33
すいません教えてください。
VC++6.0です。
ツールバーのボタンに対してプロパティからプロンプトという項目を設定すると実行時にボタンの説明文が出せますよね。
あれをダイアログのボタンやエディットボックスにも出したいのですがどうすればいいでしょうか。
0485デフォルトの名無しさん2007/02/23(金) 21:54:39
つ CToolTipCtrl
04864842007/02/23(金) 22:23:14
即レスありがとうございます。
調べてみます。
0487デフォルトの名無しさんNGNG?2BP(222)
>>483
CDialogBar
0488デフォルトの名無しさん2007/02/26(月) 18:13:00
自分自身のProductVersion の読み出し方法は?

色々探したのですが、どうも自分自身のProductVersionを
読み出す方法が見つかりません。

自身の実行ファイルのフルパスを探し出し.... という方法は
見つけましたが、何だかなぁという感じで。

CString::LoadString のような感じで読み出す方法はないのでしょうか?
0489デフォルトの名無しさん2007/02/26(月) 18:53:34
ストリングテーブルになかったか?
0490デフォルトの名無しさん2007/02/26(月) 18:54:56
なんだ質問者が答えてるじゃないか
キチガイの独り言はやめほしいな
0491デフォルトの名無しさん2007/02/26(月) 19:18:29
>>489
> ストリングテーブルになかったか?

ストリングテーブルには登録されてないよ。
0492デフォルトの名無しさん2007/02/26(月) 19:19:07
>>490
> なんだ質問者が答えてるじゃないか
> キチガイの独り言はやめほしいな

CString::LoadString で読み出せるのか?
IDは、何を設定するの?
0493デフォルトの名無しさん2007/02/26(月) 19:43:48
何だかなぁ
0494デフォルトの名無しさん2007/02/26(月) 19:53:29
わざわざ教えてやっても何だかなぁと言われたら馬鹿だし
0495デフォルトの名無しさん2007/02/26(月) 20:02:23
>>488
ttp://tgws.fromc.jp/prog/versioninfo/
0496デフォルトの名無しさん2007/02/26(月) 20:04:24
FindResourceから始めれば出来なくは無いな。
04974832007/02/26(月) 21:52:54
>>487
CDialogBarを利用してみました。ソースは以下の通りです。

(MainFrm.cpp)
if (!m_wndDlgBar.Create(this, IDD_DIALOG_HOGE,
CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR)){
TRACE0("ダイアログバーの作成に失敗しました。\n");
return -1;
}

しかし、ダイアログを移動するとダイアログのあった場所が再描画されません。
CBRS_ALIGN_TOPを指定しているせいでしょうか?
また、サイズがリソースで作成したものと変わっていたり(横いっぱいに広がっている。ALIGN_TOPの影響?)
しています。

ttp://www.alpha-net.ne.jp/users2/uk413/vc/VCT_DlgBar.html
このようなドッキングされた状態の作成方法はいろいろ紹介されているのを確認しましたが、
通常のモーダレスダイアログのような振る舞いをさせる方法が分かりません。(任意の座標に表示させるとか)
どういった方法をそればいいのでしょうか?
0498デフォルトの名無しさん2007/02/26(月) 22:02:08
ダイアログバーのサンプルならMSDNについてる
0499デフォルトの名無しさん2007/02/26(月) 23:07:39
ウインドウの動かしかたも知らんのか
0500デフォルトの名無しさん2007/02/27(火) 11:53:59
こうですか?
うまくいきました!!
0501MDI今日始めます2007/02/27(火) 18:18:27
すみません。ど素人ですm(__)m

MDIのプログラム今日始めました。ウィザードでMDIのプロジェクトを作成後、
クラスビューでOnDraw(CDC* pDC)という関数を発見し、これで描画できると
思いましたが、子ウィンドウを新規作成するたびに同じ描画を繰り返すだけ。
子ウィンドウ毎に違う描画をしたいのですが、どうしたらいいんでしょう?

メインのソースたどろうにも、CWinApp::OnFileNewはライブラリになっていて
ソースの実体が無くどうしていいのかわかりません(ToT
0502デフォルトの名無しさん2007/02/27(火) 18:40:27
その違う描画、は何を持って違うことになるのか
それによってOnDrawでの動作を変えりゃいいだろ
0503デフォルトの名無しさんNGNG?2BP(222)
同じ描画になるのは同じ描画しかしないコードを書いているから。
CView::OnDrawでCDocumentのインスタンスを識別してそれぞれで描画するようにしれ。
0504デフォルトの名無しさん2007/02/28(水) 01:39:33
ListViewの初期化方法、削除方法を教えてください。
0505デフォルトの名無しさん2007/02/28(水) 13:40:52
>>504
MSDN読め
0506デフォルトの名無しさん2007/02/28(水) 22:14:14
教えてください。
VC++6.0でMDIです。
MDIの子ウィンドウとしてCFormViewを継承したクラスが2つあります。
このクラスを仮にA,Bとします。
Aのウィンドウのボタンが押されたときにBのウィンドウの
エディットボックスの内容を更新したいのですがどうすればよいでしょうか。
MDIGetActiveとGetNextWindowをつかってウィンドウをたどっていき
if(pWnd->IsKindOf(RUNTIME_CLASS(B)))で判定すればBのウィンドウの
ポインタが取れると思ったのですが、このif文がなぜか真になりません。
何がまずいのでしょうか。
0507デフォルトの名無しさん2007/02/28(水) 23:27:13
>>506
MFCの問題っちゅーかプログラミング能力の問題じゃねぇの?それ。
まあ、問題の切り分けができないってのもわからないでもないが・・・
そういう機能はAとB2つに影響を与えることができるクラスに付けなきゃ駄目だよ。
AやBはその機能を呼ぶだけ。
>>203-205の問題と似てネーか?
0508デフォルトの名無しさん2007/03/01(木) 09:30:44
>>506

そもそも基本ができていない
やろうとしていることの前に、基本から勉強しなおせ
0509デフォルトの名無しさん2007/03/01(木) 15:05:40
基本的な質問なのです、よろしくお願いします。
VS2005でMFCアプリケーション(ダイアログベース)を作ったのですが。
新規にダイアログベースを作成してそのまま何も加工せずにセットアップ
ウィザードを使ってsetup.exeを作って他のPCでインストールしようとしたら
.NET framwork2.0をするように指示する画面がでました。
これは、VS2005で開発したものはframework2.0が必要?それとも
インストーラーがframework2.0が必要?なんですか?
frameworkが必要ないとおもってMFCにしたのですが、framework不要に
する設定ありますか?よろしくお願いします。
0510デフォルトの名無しさん2007/03/01(木) 15:07:08
訂正です。
x  .NET framwork2.0をするように指示する画面がでました。
○ .NET framwork2.0をインストールするように指示する画面がでました。
0511デフォルトの名無しさん2007/03/01(木) 15:45:02
CHtmlDialog使ってる?
0512デフォルトの名無しさん2007/03/01(木) 17:30:44
それはじめてききましたので意識的にはつかってないかと
■ このスレッドは過去ログ倉庫に格納されています