■MFC相談室 mfc17d.dll■ at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
06/11/21 10:38:31
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc16d.dll■
スレリンク(tech板)

2:デフォルトの名無しさん
06/11/21 10:54:08
2GET

3:デフォルトの名無しさん
06/11/21 14:30:37
意外と使えるCMemFile
>>1

4:デフォルトの名無しさん
06/11/21 23:02:46
>>3
> 意外と使えるCMemFile

その CMemFileの内容を、ディスクに保存せずに、CHtmlView で
表示出来ないかなぁ。



5:デフォルトの名無しさん
06/11/21 23:38:42
質問です。
今SDIアプリケーションで開発しているのですが
メインフレームのタイトルが
xxxxx - xxxxxxxxxx
のようにハイフンがついております。
このハイフンを消すことは可能でしょうか?

6:デフォルトの名無しさん
06/11/22 00:11:42
リソースのString TableのIDR_MAINFRAMの値が
〜\n\n〜\n\n\n〜\n〜
となっていると思うけれど、このうちのどれかの〜がメインフレームのタイトルになっていて、そのハイフンを消せばタイトルからハイフン消える。


7:5
06/11/22 10:36:07
>>6
ありがとうございます。消えました。


8:デフォルトの名無しさん
06/11/22 15:55:30 BE:27175027-2BP(200)
>>4
CHtmlView::GetHtmlDocumentでhtmlドキュメントのIDispatchを取得して、
IHTMLDocument2::writeで注入。

9:デフォルトの名無しさん
06/11/22 22:05:49
MFCを勉強するのに定評のある本を教えて下さい。お願いします
できれば2、3冊くらい

10:デフォルトの名無しさん
06/11/22 22:58:59
スレ違い

11:デフォルトの名無しさん
06/11/23 02:55:20
>>10
いや、そうは思わんけど・・・w

12:デフォルトの名無しさん
06/11/23 06:21:35
シルトの標準講座MFC
      ↓
MFCのライブラリのソース読む

MFCはこれぐらいで十分
あとはwin32apiでもやった方がいい

13:デフォルトの名無しさん
06/11/23 15:28:54
MFCを使ってMDIプログラムを作っています。
子画面の作成方法は分かったのですが、
それにダイアログのようにコントロールを貼り付ける方法が分かりません・・・
CFormViewを土台にクラスを作ると子画面にできないですし、
CMDIChildWndを土台にクラスを作るとコントロールが使えません
両方の良いとこ取りをしたようなクラスはありませんか?
もしくは子画面でコントロールを使う方法を知りませんか?
(上は標準作成の子画面ではなく自作するクラスの方の話です)

14:デフォルトの名無しさん
06/11/23 15:36:46
MDIで普通にコントロール使えるだろ

15:デフォルトの名無しさん
06/11/23 16:03:54
>>14
色々と試してみたのですが無理でした
クラスの新規作成でCMDIChildWndを継承したクラスを作り、
グローバル関数でインスタンス生成して呼び出していますが、
表示されないですし、コントロールも貼り付けられませんです

16:デフォルトの名無しさん
06/11/23 16:36:10
ウイザードでMDIにしたら普通にできたけど

17:デフォルトの名無しさん
06/11/23 16:41:34
>>16
標準で作られる子画面ではなくてですか?

18:デフォルトの名無しさん
06/11/23 16:45:09
sdiでフォームビューにするのと同じ
初心者向けの入門書でも読んどけ

19:デフォルトの名無しさん
06/11/23 17:44:38
>>13
通常はウィザードで選択したViewで表示を行い、特定のDocumentを扱う場合のみ
新しいView(FormView派生)で表示したいってことかな?

20:9
06/11/23 18:19:49
>>12
dクス!さっそくやってみます。

21:デフォルトの名無しさん
06/11/23 19:26:44
ドキュメントテンプレート追加したら
任意のviewで表示できるけど

22:デフォルトの名無しさん
06/11/23 19:58:58
>>13
FormViewのMDI子ウィンドウはウィザードで普通にできるけれど、
もしかして、スプリッタやろうとしてるんじゃないのかな?
それならウィザードじゃ、FormViewはじかれて、できない。
FormViewの派生自作し、CreateStaticでスプリッタ作らないと。
Doc2つ作ってそれぞれにDoc-View割り付ける方法もあるらしいけれど、
オーソドックスに行くなら、この例ならTreeViewをウィザード使ってDoc-View使って、FormViewはDoc-View使わず、他のクラスからのアクセスはFormViewのオブジェクト宣言。

23:22
06/11/23 20:02:04
それと、FormViewのスプリッタをウィザードが認めてないのは、
作ってみればわかるけど、スクロールバーでボタンなどのコントロールが隠れたりして、
ありえないというか、まずチマタじゃ見ないFormになる。
蛇流ゆえに作っていくと色々とワナがあるよ。

24:22
06/11/23 20:12:08
左ツリーで右ブラウザ上のFORMみたいなことをやりたいなら、
CVIEWで作って、CMDIChildWndのハンドル取得して、オーナードローがいいよ。
DDX使えなくて、MFCの恩恵は使えないけど。

25:デフォルトの名無しさん
06/11/23 20:29:23
void CTestDlg::OnButton2()
{
m_button1.ShowWindow(SW_HIDE);
}

これにより、ボタン2を押すとボタン1は非表示状態になるのですが、

void CTestDlg::OnButton3()
{
m_button1.SetRedraw(FALSE);
m_button1.SetRedraw(TRUE);
m_button1.Invalidate();
}

としてボタン3を押すと、ボタン1が再び出てきてしまいます。
Invalidateだけだと出てきません。
SetRedrawって、SW_HIDEも勝手に戻してしまうものなのでしょうか?

これから作ろうとしているものは、
SetRedraw(FALSE)〜SetRedraw(TRUE)の間でいろいろ内部情報の更新をして、
その結果に合わせて表示状態も切り替えようとしているのですが、
非表示にしても、最後のSetRedraw(TRUE)で表示状態に戻ってしまいます…。

26:デフォルトの名無しさん
06/11/23 20:47:56
>>25
非表示なものにSetRedraw()やInvalidate()をする意味は?
非表示の間は描画処理は必要ないでしょ。

27:デフォルトの名無しさん
06/11/23 20:48:11
>>25
SetRedrawの実際の処理WM_SETREDRAWをMSDNで見ても何も書いてないね。
m_button1の表示状態見て処理するしかないんじゃない?

28:25
06/11/23 21:30:17
>>26
>>27
非表示なものにSetRedrawをするわけではなくて、
SetRedrawの最中に、更新結果によっては非表示にする
ということをやりたかったのです。

SetRedraw(FALSE)をした以上は、
最後は必ずSetRedraw(TRUE)を呼ばないとダメですよねぇ。

29:デフォルトの名無しさん
06/11/23 21:31:21
this->SetRedraw(FALSE);
this->SetRedraw(TRUE);
this->Invalidate();
もしくは
SetRedraw(FALSE);
SetRedraw(TRUE);
Invalidate();
にしたらうまくいったけど、なんでか分からん。

30:デフォルトの名無しさん
06/11/23 22:04:46
editから入力された文字列を受け取るにはどうしたら
いいんでしょうか?
誰か教えてください。
それと勉強できるホームページとか。
よろしくです。

31:デフォルトの名無しさん
06/11/23 23:33:34
>>31
つ[MSDN]

32:13
06/11/23 23:40:38
ご回答ありがとうございます
返事が遅くなって申し訳ございません


>>19
そうです
普段はウィザード生成の標準子画面で操作を行い、
ボタンが押されたときに別の子画面を表示する感じです
(他にも同じ子画面が複数表示されないような制御も
行いたいと考えています)

>>22-24
基本的にやりたいことは単純にダイアログのようにコントロールが
貼り付けられて、それへの操作を処理のトリガとする子画面を持つ
MDIアプリを作りたいだけです
しかし、思ったように上手く、とても困っている状況です


つい数ヶ月前までVBしか経験のない状態でしたので、VC++6.0(MFC)の
ドキュメントビューアーキテクチャなども理解できていません
MFCで作れないWindowsアプリは無いと聞いたのと処理速度の問題から
こちらの言語での開発を始めたのですが・・・

33:デフォルトの名無しさん
06/11/23 23:59:31
MSDN2の
「フォーム ベースの MFC アプリケーションの作成を開始するには」
これでフォームひとつはできるはず。

34:デフォルトの名無しさん
06/11/24 00:32:44
1つのドキュメントに対して複数のビューを切り替えて表示する方法は
MSDNにのってるよ。
URLリンク(support.microsoft.com)
このサンプルでは切り替える時に今までのViewを削除してるので
ちょっと変更が必要。切り替えより生成が面倒な感じ。

SDIで切り替える場合はこっち
URLリンク(support.microsoft.com)

35:デフォルトの名無しさん
06/11/24 00:40:42
>>33-34
ありがとうございます
それらのサイトで調べてみます

36:デフォルトの名無しさん
06/11/24 00:54:03
>>21のいうようにドキュメントテンプレ追加する。最初のトリだけ書くと
1:新規MFCウィザードMDI、後すべてデフォルトでプロジェクト作成。
2:リソースで新規ダイアログ作る
3:新規フォームじゃなく新規クラスでCFormViewの派生クラスを作る(2のリソースID指定)
4:新規クラスでCDocumentの派生クラスを作る
5:リソースstringテーブルに次を追加する
Form\n\nForm(*.frm)\n.frm
注)\n\nの間に何か入れるとアプリケーション立ち上がり時、もしくはメニュー>新規作成時にCViewとCFormView選択可になる。
今は、CViewのみ立ち上がる。
6:C〜AppのInitInstance実装のAddDocTemplate(pDocTemplate);の下に以下を追加
pDocTemplate = new CMultiDocTemplate(
IDR_〜,//5のstringID
RUNTIME_CLASS(C〜Doc),//4のクラス名
RUNTIME_CLASS(CMDIChildWnd),
RUNTIME_CLASS(C〜View));//3のクラス名
AddDocTemplate(pDocTemplate);

6:このファイルの頭の#includeの後に追加した、FormViewとDocumentクラスの.hファイルを#includeを記述
7:これで実行(Formを確認したい時は4の\n\nの間に何か入れる)

けれど、C++はできるなら、VCは普通はWIN32アプリから入るんだけど、この先かなり難儀するかもしれないな。

37:デフォルトの名無しさん
06/11/24 01:00:01
>>36
細かなご回答、ありがとうございます
その手順で試してみます

38:デフォルトの名無しさん
06/11/24 01:03:03
36追加で2のダイアログのスタイルはチャイルド、境界線は「しない」に指定

39:13
06/11/24 01:08:10
皆様、丁寧なご回答ありがとうございました
教えて頂いたことを試してみます

40:デフォルトの名無しさん
06/11/24 01:22:00
更に先のことになるけれど、
CViewのメニューなりからのイベントでCFormViewを開く時は、
CChildFrameのオブジェクトを取得して(CViewクラスからならGetParentFrameで取得できる。
ドキュメントテンプレにdoc-frame-viewの枠組みは登録されているので、新たにnewしてはいけない。)
これを*pChldFrmとすると、
イベントハンドラに
if(!pChldFrm->LoadFrame(・・・
{
return FALSE;//もしくは失敗した時の例外処理
}というようにFormを作り、
pChldFrm->ShowWindow(〜/*定数*/);
pChldFrm->UpdateWindow();
して表示してやる。

41:デフォルトの名無しさん
06/11/24 01:30:34
訂正
Form\n\nForm(*.frm)\n.frm

\nForm\n\nForm(*.frm)\n.frm
しておいてもらえるかな。やれば意味わかると思う。

42:デフォルトの名無しさん
06/11/24 01:55:21
それと、includeの順番はこの場合必ず、
#include"C〜Doc.h"
#include"C〜View.h"
の順番で。たまたまコンパイルビルドとおっちゃうかもしれないけど、
includeの順番はとっても重要だから。

43:デフォルトの名無しさん
06/11/25 13:15:51
>>40-42
ありがとうございました
この件に関しての問題は解決しました

次はDLL側にある子画面を呼び出し側(MDI)で表示/利用することに
挑戦しようと思います
また質問に来るかもしれませんが、よろしくお願いします

44:デフォルトの名無しさん
06/11/26 14:17:52
CToolbarCtrlクラスを使っています。

 このクラスで256色以上のビットマップを
貼り付けるにはどうしたらよいのでしょうか?
リソースエディタ上は16色しかでません。
 何かうまい方法ありましたらご教授願いたいです。

45:44
06/11/26 14:33:20
環境はVC++6です。

46:デフォルトの名無しさん
06/11/26 16:02:20
>>44
URLリンク(www.google.co.jp)

256bitmap使うだけなら簡単だけど、あれこれカスタマイズしようとすると結構大変。

47:44
06/11/26 16:32:37
ありがとうございました。

48:デフォルトの名無しさん
06/11/26 18:01:17
MDIアプリケーションでビューを
class CMyList : public CListView
としたのですけど、以下の一連の処理、
OnPreparePrinting()
OnBeginPrinting()
OnPrepareDC()
OnPrint()
OnEndPrinting()
が、ファイルメニューの印刷プレビュー項目を選択すると呼び出されるのですが、
同じく、印刷項目からですと何の反応もありません。
標準的な機能として呼び出されるのが当たり前と思っていたので、
ちょっと困ってしまっています。
OnPrint()に印刷処理を記述してプリンターに出力したいのですが、
どのようにしたら良いのかご存知の方、教えていただけませんか。
環境は.NET2003+XP SP.2です。

(後々のメンテナンスのことも考えて、
あまりトリッキーなことをしないで実装できるのが理想です。。。)

49:デフォルトの名無しさん
06/11/27 21:30:49
すいません、どなたかマルチモニタ環境があるかたに
試していただきたいんですけど、

・SDIアプリケーションをデフォルトのままビルド
・デバッグ開始してツールバーをフローティングさせる
・そのツールバーをセカンダリモニタ上に移動

とやったあと、そのツールバーをサイズ変更できますか?
自分の環境(VC6.0)ではセカンダリモニタ上ではサイズ変更できないんですけど…。

50:デフォルトの名無しさん
06/11/27 22:15:40
ダイアログベースのアプリで、Client領域に背景ビットマップを貼り付けています。
このダイアログの上で他のウィンドウをぐりぐり動かすとダイアログが再描画された時に
背景が部分的に欠けてしまう(ダイアログの地の色が出る)事があるんですが、
これってどんな理由が考えられるでしょうか。

51:50
06/11/27 22:27:39
WinXP+VC6.0です

52:デフォルトの名無しさん
06/11/27 22:40:32
VC6 MDI に MDI タブ機能を追加するにはどうしたらいいですか?

53:デフォルトの名無しさん
06/11/27 23:30:57
そういう機能は存在しない

54:デフォルトの名無しさん
06/11/28 00:13:23
>>48
標準的なCViewのサブクラスは印刷時に
CView::OnFilePrint();を呼び出している。
ただしCListViewから呼び出しても印刷できるかどうか
わからん。

55:デフォルトの名無しさん
06/11/28 19:46:02
>>49
試した。確かにサイズ変更できない。
原因は非公開クラスのCDockContext内のStretch()にあって
dockcont.cppの314-315行目のサイズ取得のところ。
最新のMFCではこっそりと修正されてる。
(VC6SP6)
HWND hWndDesk = ::GetDesktopWindow();
::GetWindowRect(hWndDesk, &rectDesk);
(VC2005)
rectDesk.left=GetSystemMetrics(SM_XVIRTUALSCREEN);
rectDesk.top=GetSystemMetrics(SM_YVIRTUALSCREEN);
rectDesk.right=rectDesk.left+GetSystemMetrics(SM_CXVIRTUALSCREEN);
rectDesk.bottom=rectDesk.top+GetSystemMetrics(SM_CYVIRTUALSCREEN);

VC6ではCToolBarとCDockContextを派生させて対処するしかない(当方では一応成功)。
非公開クラスなのでググってもほとんど情報がないけど
修正内容は違うがCDockContextを弄ってるのはあった。
URLリンク(www.ddj.com) 英語だがStep3,Step4の文章が多少参考になる。
URLリンク(www.tkb-soft.hmcbest.com) 日本語。最後の方がグダグダでかなり強引。

56:デフォルトの名無しさん
06/11/29 01:44:19
質問です。
フォルダやファイルのフルコントロール拒否ってどうやってみたらいいでしょうか?
今はとりあえず、書きこんで見て書けなかったら・・・とかやっています。
もっとスマートな方法はないでしょうか?

57:デフォルトの名無しさん
06/11/29 06:17:19
質問なんですけど。

IEの履歴ウィンドウみたいなのあるじゃないですか?
あのスプリッタに「X 閉じるボタン」が付いてるやつ。
あれってMFCの機能で実現出来るものですかね?

スプリッタウィンドウにして一つのViewをFormViewにして
その中に各種のコントロールを設置すればそれっぽくなりますけど
閉じるボタンが押された時に、スプリッタを完全に非表示にしないといけない訳で
スプリッタの大きさ0じゃなく、動的にスプリッタの数を変更とか出来るのでしょうか?

58:デフォルトの名無しさん
06/11/29 08:58:38
>IEの履歴ウィンドウみたいなのあるじゃないですか?

あれはBrowser Extension の Explorer Bar
URLリンク(msdn2.microsoft.com)

>あれってMFCの機能で実現出来るものですかね?

本人次第

59:デフォルトの名無しさん
06/11/29 09:49:59
CSplitterWnd内部では当然ペインの数は管理しているので
サブクラスで操作(数だけじゃないよ)すればできる。
流れ書こうかと思ったけどCodeGuruとか見たほうが早い。

ペインが左右に1つずつしかないなら、ほんの数行で済むはず。

60:デフォルトの名無しさん
06/11/29 10:31:28
>>58
なるほど… そういう物だったんですね…

>>59
今、色々試していた所、CDialogBarを利用して
似たような事が出来るかも知れないと思いました。
出来ればVC++のIDEみたく、ドッキング可能にもしたかったので
こっちの方がより理想に近いのかもしれません。

61:49
06/11/29 20:45:04
>>55
試していただきありがとうございます。
やっぱりこれグラフィックカードの問題とかではなかったんですか…。

ツールバーももちろんなんですが、
URLリンク(support.microsoft.com)
↑を参考にサイズ変更可能なダイアログバーを用意したんですけど、
セカンダリモニタ上でサイズ変更ができないのがかなり痛いです。

これって、VC6のままMFCだけ最新のものを使うということは無理で、
VC2005の環境にしてしまうか、派生クラスを自分で作ることになるんですよね?
ドッキングを捨ててモードレスダイアログにしてしまったほうがいいのかな…。

まずは教えていただいたサイトなどを元にして
なんとか挑戦してみたいと思います。
ありがとうございました。

62:デフォルトの名無しさん
06/11/29 22:26:25
ウィンドウやダイアログ(以下、あわせて子画面と記述)を追加するMFC拡張のDLLを作成しています
仕組みそのものは簡単で、アプリケーションからグローバル関数を通じて呼び出されます
グローバル関数は子画面ごとに用意し、関数の引数にポインタを指定する形でデータの受け渡しを行います

それで早速これを作り始めたのですが、自分の知識が乏しいこともあって問題が発生してしまいました
それは、ウィンドウを上手く表示させて処理させることができないということです
ダイアログの方はモーダル表示であるためか、特に問題なく表示させて処理させることができました
しかし、ウィンドウの方は違いました
新規クラス作成でCFormViewを継承したクラスを追加しているのですが、生成の段階で問題が発生してしまいます
コンストラクタがprotectedとなっているため、newで生成したときにエラーとなるのです
これは手動でpublicに変えることで表面上は解決しました
しかし、標準でprotectedになっていたことには何か意味があるのではないかと不安に思えてきました
大丈夫なのでしょうか?

また他にも問題があります
それは、メモリの開放です
ウィンドウはモーダルではないため、基本的にグローバル変数として使っています
これが問題となるのはユーザが閉じるボタンでウィンドウをデストロイした場合です
グローバス関数では、対応するウィンドウのグローバル変数がNULLでない場合に明示的にDestroyWindowを呼んでいます
その後にdeleteをしております
しかし、ユーザがすでにウィンドウをデストロイしていた場合、エラーが発生します
これをどうにか防ぎたいのです
ウィンドウがすでにデストロイされていることを知る手段はありませんか?
またはメモリが未開放であることを知る手段はありませんか?

とても困っております
知恵を貸してください

63:デフォルトの名無しさん
06/11/29 23:18:34
>>62
Viewの作成は通常newは使わず
CView *MyView = (CView *)RUNTIME_CLASS(CMyView)->CreateObject();
context設定して MyView->Create( ・・・ );
とかいう感じ。

後半はframeを保持しているのがどっちか不明なのでパス。

64:62
06/11/30 00:09:29
>>63
レスに大感謝です
参考にさせて頂きます

グローバル変数を保持しているのはDLLです
つまり、ウィンドウ&ダイアログは常にDLLの管理下にあります
アプリケーションは子画面の表示を指示するのとデータ受け渡しのみです

65:デフォルトの名無しさん
06/11/30 00:50:10
MDIのドッキングウィンドウってどうやればできますか?

66:デフォルトの名無しさん
06/11/30 04:17:02
>>65
私も興味あります。
VC++6というか、VisualStudioのようなMDIを実現する方法。


67:60
06/11/30 04:56:11
>>66
前書き込んだ者ですけど、多分、ダイアログバーを自分で改造して
似た様な物が出来るんじゃないかと思うんですが。
設置したコントロールもダイアログの状態によって位置、大きさを変更する等して。
外観は全部自分で独自に描画して似せて。
例えば、あの二本線のRebarみたいなのも自分で描画して。
CDialogBarのDDXが効かないのは、CDialogに書き直せば確かOKだった筈ですし。


68:デフォルトの名無しさん
06/11/30 19:00:30
アプリケーションの英語化作業中です
リソースを日本語版と英語版を用意して、以下のような設定にしています
 英語版ビルド時には日本語を無視
 日本語の場合には英語リソースを無視

この方法でビルドした場合、ダイアログに直接貼り付けてあるStaticテキストや
ボタンのCaption等は正しく言語の切替が行われていますが
StringTableから読み込んで表示する場合、英語版が全て空白になってしまいます

正しく読むにはどうしたらいいでしょうか?

69:デフォルトの名無しさん
06/11/30 19:09:49
英語と日本語でそれぞれプロジェクト作って比べてみれば馬鹿でもわかる。

70:68
06/11/30 19:43:41
すみません、解決しました
開発しているのはプラグインなのですが、対象となるソフトの言語設定を変更したら上手く行きました

71:49
06/11/30 22:37:56
>>55

CDockContextの派生クラスを作成し、以下の3つをオーバーライド。
・virtual void StartResize(int nHitTest, CPoint pt);
・void Stretch(CPoint pt);
・BOOL Track();
StartResize()とTrack()は、CDockContextのものをそのまま手を入れずにコピー。
Stretch()は、例の部分をVC2005版に修正し、それ以外はそのままコピー。
そのほかに、これらの関数で使われている定数や構造体の宣言をそのままコピー。

CToolBarの派生クラスを作成し、EnableDocking()をオーバーライド。
m_pDockContext = new CDockContext(this);
の部分を、上のCDockContextの派生クラスをnewするように修正し、
それ以外はそのままコピー。

というソースファイルを作成し、
SDIのツールバーをこのCToolBarの派生クラスに置き換えてみたところ、
無事にセカンダリモニタ上でもサイズできました。

「当方では一応成功」っていうのも、やはりこのような感じなのでしょうか?

72:62
06/11/30 22:54:50
とりあえずウィンドウをDLL側で生成して表示させることはできました
フレームとビューとドキュメントをCCreateContextで連結させるのに苦労しました
上手に表示されたときはとってもハッピーになりました

さて、申し訳ないですが本日も質問があります
それはビュー(CFormView)に張り付けたダイアログリソースについてです
なぜか分からないですが、呼び出しアプリケーション側のダイアログリソースに置き換わってしまいます
DLLのダイアログリソースが表示されません
Resource.hが怪しいと思っていますが、どうすれば解決できるのか分かりません
アドヴァイスを頂けませんか?

あと、昨日の質問が残っています
>>62の後半、メモリ開放についてです
CFormWndのインスタンスを持っているのはDLL側です
ユーザが閉じるボタンやAlt+F4でデストロイしたことを察知して2度デストロイやdeleteするのを防ぎたいです
大変にクリティカルな問題なのでとても悩んでいます
インターネット検索や書籍で解決策を探していますが、まだ解決には至っていません
アドヴァイスをお願いします

73:デフォルトの名無しさん
06/12/01 00:14:31
>>72
相変わらずFrameの位置が不明瞭です...

次の3つの内から一つを選択しなさい。
1.Exe側のCMainFrameにDLL側で作成したCFormViewを結合している
2.ExeとDLLにそれぞれFrame&Viewの対がある
3.その他

上段で上手に表示されたと書いてるけど、中段読むとFrameとViewの
結合に失敗してるし訳分からない。別な話?
下段CFormWndのbase class はCFormView or CFrameWnd ?

74:72
06/12/01 00:16:17
>>73
すみません
選択肢1が該当します

75:デフォルトの名無しさん
06/12/01 00:27:52
dll内でnewしたインスタンスはdll内でdeleteしないといけないのでしょうか。


76:デフォルトの名無しさん
06/12/01 00:49:13
>>74
であれば、Viewをdeleteする必要はない。
FrameとViewが正しく結合されていれば、exe側Frameが閉じられる際に自動で削除される。
CView::PostNCDestroy()参照。

77:デフォルトの名無しさん
06/12/01 01:11:51
>>75
うん

78:デフォルトの名無しさん
06/12/01 01:18:01
>>75
例えば開発時に、EXEがReleaseでDLLがDebugだとすると。
メモリ管理のランタイムが別になるんで、EXEでnewしたメモリをDLLで開放しようとすると、
当然そんなメモリは管理してないから落ちてしまうと。

79:デフォルトの名無しさん
06/12/01 01:27:38
exe-dllで使用しているMFCのバージョンが同じで >>78の言うことに気をつけていれば
問題ないんじゃないの?
77は根拠を示すべし。

80:デフォルトの名無しさん
06/12/01 06:53:15
>>79
別のアプリで確保したメモリを別のアプリで解放できるか?って話しになるんじゃない?

81:デフォルトの名無しさん
06/12/01 09:12:04
この子は何をほざいているのだろう・・・

82:デフォルトの名無しさん
06/12/01 10:26:11
>>79
バージョンが同じでも、MFCをスタティックリンクしてるとダメだよ。

83:デフォルトの名無しさん
06/12/01 14:28:49
論点がばらけ過ぎてる

84:55
06/12/01 19:42:03
>>71
そんな感じです。というより全く同じですね。
VC6ではやむを得ないと思います。

>>65-67
URLリンク(www.codeproject.com)
URLリンク(www.codeguru.com)
スクリーンショット見た感じ、↓のが参考になるかも。
URLリンク(www.codeguru.com)
URLリンク(www.codeguru.com)
URLリンク(www.codeproject.com)

>>62&>>72
どっかのスレで参考になる文献はないかと聞かれたから
URL貼ったんだが全く読んでないんだな。
考えられる原因の一つは、delete this;して自殺するクラスがあるということ。
CFrameWndやCViewがまさにそういうクラスなのでその可能性があるんじゃない?
76も答えてくれてる通り。


85:デフォルトの名無しさん
06/12/02 16:41:12
VC++.NET2003で開発しています。

MDIから別プロジェクトの画面を子画面として表示させたいのですが、
どういう風に作ればいいのでしょうか。

86:デフォルトの名無しさん
06/12/02 17:26:41
またMDIか

87:デフォルトの名無しさん
06/12/02 17:32:47
このまえ質問してたやつはどこに消えた?

88:49
06/12/03 13:05:02
>>84
やはりこういう派生になるのですね。安心しました。
VC7でも同じ問題が発生するようで、VC2005じゃないと直ってないようです。

89:40
06/12/03 16:05:47
>CViewのメニューなりからのイベントでCFormViewを開く時は、
の続きで、Viewの差し替えは、Viewクラスでのメニューイベントハンドラーで
CWinApp* myapp=AfxGetApp();
CDocTemplate* mydoctemp=(CDocTemplate*)RUNTIME_CLASS(CDocTemplate);
POSITION myps=myapp->GetFirstDocTemplatePosition();
mydoctemp=myapp->GetNextDocTemplate(myps);//テンプレートリストの1番目を選択するイテレータ
mydoctemp=myapp->GetNextDocTemplate(myps);//テンプレートリストの2番目を選択するイテレータ
mydoctemp->OpenDocumentFile(NULL);
でドキュメントテンプレートに入れられた2番目のViewを新規子ウィンドウで表示できたよ

90:デフォルトの名無しさん
06/12/04 13:59:24
ダイアログにタブコントロールを乗せ、複数のリストビューの表示をタブで切り替える
ソフトを書いていたんですが、タブに重ねたリストビューの列サイズを操作すると
リストビューの表示が乱れる現象が出てしまいました。

URLリンク(www.uploda.org)
サンプルプロジェクトです。VC2005で作りました。
URLリンク(www.uploda.org)
1つめのリスト。こういう感じで一番右の列境界をタブの外へ右にドラッグすると
スクロールバーが現れます。通常の動作です。
URLリンク(www.uploda.org)
2つめのリスト。1つ目と同じく一番右の列境界を右へドラッグするとスクロールバー
が現れるタイミングで表示が乱れます。

どうして2つ目のリストでのみ表示が乱れるのか悩んだ結果、ダイアログのリソース
定義ファイル中の、
> CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | (以下略)
> CONTROL "",IDC_TAB1,"SysTabControl32",0x0,7,7,173,186
> CONTROL "",IDC_LIST2,"SysListView32",LVS_REPORT | (以下略)

> CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | (以下略)
> CONTROL "",IDC_LIST2,"SysListView32",LVS_REPORT | (以下略)
> CONTROL "",IDC_TAB1,"SysTabControl32",0x0,7,7,173,186
と順番を入れ替えると表示が乱れなくなりました。逆に、タブの行をリストの先頭
に持っていくと今度は両方のタブでリストの表示が乱れるようになります。

結果オーライといえばそれまでなんですが、どうしてこれで問題が解決するのか納得が
いきません。リソース中の定義順が何に影響しているのでしょうか?

91:デフォルトの名無しさん
06/12/04 14:05:47
普通はプロパティシート

92:デフォルトの名無しさん
06/12/04 14:46:26
>>90
Zオーダーの問題じゃね?

93:デフォルトの名無しさん
06/12/04 16:30:03
Zオーダーの問題

94:90
06/12/04 22:53:30
確かにZオーダの問題でした。どうもありがとうございます。

リソース定義の順番がZオーダになるというのが将来にわたって保障された
仕様なのかどうかが疑問なので、コントロールを重ねる場合のZオーダは
きちんとSetWindowPosでコード中に書いておくことにします。

95:デフォルトの名無しさん
06/12/06 06:13:15
VC6.0のMFCで作ったプログラムを実行したときにレジストリへ一切書き込まないようにしたいのですが
HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
に VS_VERSION_INFO の FileDescription の値が書き込まれてしまいます。
FileDescription を消しても実行ファイル名が変わりに書き込まれてしまいます。
どうしたら書き込まないように出来るでしょうか?

96:デフォルトの名無しさん
06/12/06 10:01:56
そのキーを書込み禁止にすると(・∀・)イイヨ!!

97:デフォルトの名無しさん
06/12/06 23:59:45
CFtpConnectionを使ってFTPクライアントを実験的に作ってみたのですが、
PASVモードを使ったときにどのポートが使われているかというのは
どうやって取得すれば良いでしょうか?

98:デフォルトの名無しさん
06/12/12 21:25:29
CListCtrl (以下、リスト)をレポート形式で使用しているのですが、
このリストの特定セルだけ背景色を変えるにはどうしたら良いですか?
ステータス値に応じてセルの色が変わるような機能を実現したいのですが……

99:デフォルトの名無しさん
06/12/12 21:26:36
ダイアログ上に複数のスタティックなコントロールを配置しています。
各コントロール毎に違う背景色を設定したいのですがどのようにすればよいのでしょうか?
OnCtlColor()メソッド内でコントロールの判定ができればよいと思うのですが・・・。
どなたかご教授の程よろしくお願い致します。

OSはWinXP SP2、開発環境はVC++ 2005です。

100:デフォルトの名無しさん
06/12/12 21:45:51
>>98
カスタムドローじゃねぇの?

>>99
普通にウィンドウハンドル比べたらどうよ?

101:98
06/12/12 21:47:33
>>100
無知で申し訳ないのですが、カスタムドローとはどのようなものですか?

102:デフォルトの名無しさん
06/12/12 21:55:03
>>101
URLリンク(www.google.co.jp)

103:98
06/12/12 21:57:44
>>102
すみません、自分で検索するべきでした
どうもありがとうございました

104:99
06/12/12 22:00:20
>>100
レスありがとうございます。

if(GetDlgItem(IDC_STATIC_COLOR1) == pWnd){
AfxMessageBox(L"一番目のコントロール");
}
//以降コントロールの数分else if

試しにこんなコードでやってみたのですが引っかかりませんでした。
比較処理が悪いのでしょうか?



105:デフォルトの名無しさん
06/12/12 22:06:07
MFCってpWnd->m_hWnd == GetDlgItem(IDC_STATIC_COLOR1)->m_hWndってやらなくてもいいんだっけ?
まあ、駄目だったら、そもそもIDC_STATIC_COLOR1が本当にそいつの直下に配置してあるコントロールなのかどうなのか
ってところがあやしいんじゃね?

106:99
06/12/12 22:22:41
>>105
OnInitDialog内で
GetDlgItem(IDC_STATIC_COLOR1)->SetWindowText("あいう");
で文字は表示されたので問題はないと思うのですが・・・。
もう少し調べてみます。


107:99
06/12/12 22:31:54
>>105
すみません、教えていただいた
pWnd->m_hWnd == GetDlgItem(IDC_STATIC_COLOR1)->m_hWnd
でできていました。(メッセージボックスが表示されていなかったのでできていないと思っていました)
どうもありがとうございます。

108:デフォルトの名無しさん
06/12/12 22:38:02
それはえがった

109:デフォルトの名無しさん
06/12/13 16:35:12
VC6を使って、MDIアプリにMDIタブを実装したい
まずは、CMainFrame に MDIタブ用の CDocBar を配置したいのだが、
どこをどうオーバーライドしたらいいんだ?

CMainFrame::recalcLayout() あたり?


110:デフォルトの名無しさん
06/12/13 17:02:48
またお前か

111:デフォルトの名無しさん
06/12/13 19:25:44
その前にMDIの作り方は間違っていないのかね?
なんだかこの間からぶち当たった問題をことごとく質問してないか?

112:デフォルトの名無しさん
06/12/13 19:32:03
相談室だから質問しています

113:デフォルトの名無しさん
06/12/13 19:34:02
>>112
相談しようぜ。
MDIの基本的な部分はOKなん?

114:デフォルトの名無しさん
06/12/13 19:52:36
ここは自分でできもしないことを相談する所か?

115:デフォルトの名無しさん
06/12/13 20:17:28
まあ、MFCスレってここしかないんだから、そう厳しいこといわんと。
MFCって結構むずいじゃん。
俺、ドキュメントビューアーキテクチャーとかいう仕組み覚えるのに何日も必要だったぞ。
まず、ドキュメントビューアーキテクチャーの構造なんて大して重要なもんだと思ってなかったし(SDIで組んでたのもあって)。
この状態でMDIプログラミング特攻すると、はっきりいってハマルじゃんw

116:デフォルトの名無しさん
06/12/13 20:57:27
プロパティシートについて質問があります。
ダイアログをいくつか作成(このときフォントをMSゴシックの12ptに変更)し、
各ダイアログ毎にクラスを作成(CPropertyPageクラスの派生クラス)して
メインメニューに[プロパティ]項目を追加、そのイベント内で
・プロパティシートのインスタンス生成
・プロパティページをプロパティページにAddPage
・DoModalで表示
しています。
このとき、表示された各ページのフォントサイズが標準のMS UI Gothicの9pt
で表示されてしまっています。なのでCPropertySheetの派生クラスを作り、
OnInitDialog内でフォントサイズの変更を行ってみたのですが変化なしでした。
なぜこのような現象が起こるのでしょうか?

117:デフォルトの名無しさん
06/12/13 21:00:50
プロパティシート使ったことないけど
タブコントロールなら、全ページフォントを設定する必要があるな。
プロパティシートにもそんなのあんじゃね?(適当w)

118:デフォルトの名無しさん
06/12/13 21:10:57
OnInitDialog内でGetPage()->SetFont();は行っているのですが
それでも変わらないんですよ。各ページのコントロールのサイズも
ちっちゃくなってますし。全ページのコントロールの位置、サイズ、フォントを
設定しないといけないんでしょうか。

119:デフォルトの名無しさん
06/12/13 21:42:18
CPropertySheet フォント で検索

120:デフォルトの名無しさん
06/12/13 21:44:25
MDIの基本的な部分はたぶんオケ

だからおいらの相談に答えてくれよー

121:デフォルトの名無しさん
06/12/13 21:46:33
>>119
あ、やっぱ、手動なんだw

122:デフォルトの名無しさん
06/12/13 21:48:25
>>120
ドキュメントビューアーキテクチャ(なげぇなw)の理解は大丈夫ということでOK?

123:デフォルトの名無しさん
06/12/13 21:57:52
>まずは、CMainFrame に MDIタブ用の CDocBar を配置したいのだが、

MFCにCDocBarなんてあったけ?

124:デフォルトの名無しさん
06/12/13 22:20:15
>>123
すまん CDockBar だった

CDockBar はアンドキュメンテッドなクラスで、CControlBar を配置するための滑走路みたいなものだよ

125:116
06/12/13 22:43:28
>>119
SendMessageToDescendants()?でフォントは変更できましたが、
サイズとかの変更の仕方が分かりませんでした。

126:デフォルトの名無しさん
06/12/13 23:09:57
MFCを理解しようとしないで自分のやりたいことだけ質問する馬鹿ばっかりだな

127:デフォルトの名無しさん
06/12/13 23:33:37
MFCのすべてを理解してるなら、すべての質問・相談にちゃっちゃ答えて神になってくれ

128:デフォルトの名無しさん
06/12/13 23:47:28
何のためにソースがついてるんだろ

129:デフォルトの名無しさん
06/12/13 23:49:05
非効率だよね。
まず、全体っちゅーか概要ぐらいは理解しないと
なにやるにも知ってる人間にお伺いを立てないと何もできなくなっちゃうぞ。

130:デフォルトの名無しさん
06/12/14 01:57:25
なんかMFC使うほうがかえって面倒くさそうだ

131:デフォルトの名無しさん
06/12/14 03:22:11
馬鹿じゃねぇの

132:デフォルトの名無しさん
06/12/14 07:02:17
>>130
そういうときもある。

133:デフォルトの名無しさん
06/12/14 09:06:58
コントロールのサイズと位置はピクセル単位じゃなくてダイアログベース単位で、
ダイアログベース単位はフォントの幅が元になってる。
だからダイアログのフォントを変えると
コントロールのサイズと位置もフォントに比例して変わる。

このフォントサイズはダイアログを作る時に指定した
ダイアログボックステンプレートに定義されている。
ダイアログを作った後でフォントを変えても
コントロールは既に作成されてしまっているから
コントロールのサイズと位置は後で指定したフォントには影響されない。

以上ここまでMFCに限らずWin32でも同様

プロパティシートがリソースで定義されたダイアログのフォントを無視しているということは
たぶんメモリ上に読み込んだダイアログボックステンプレートのフォントを書き換えてから
その変更を加えたダイアログボックステンプレートでダイアログを作っているのではないか
と推測されるけど、あとはCPropertyPageのソース等を読めばわかることだから省略

134:デフォルトの名無しさん
06/12/14 10:51:38
  ☆ チン

        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)<  MDIタブ実装方法 まだー?
             \_/⊂ ⊂_)_ \_______
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
        |           .|/

135:デフォルトの名無しさん
06/12/14 11:22:30
ソースを読めばわかることだから省略

136:デフォルトの名無しさん
06/12/14 11:43:33
MDIタブのこと書こうか迷ってたんだけど、AAみて踏ん切りがついたよ。

137:デフォルトの名無しさん
06/12/14 13:05:50
MDIタブの何を書こうかと迷ってたんだ?

138:デフォルトの名無しさん
06/12/16 17:26:02
Button(OKやCancelや適用など)をDisableにしたいのですが、どの関数を使うのですか?
SetCheck()かと思ったのですが違うようでした。。

139:デフォルトの名無しさん
06/12/16 17:46:32
>>138
基本クラスのメンバEnableWindowで

140:デフォルトの名無しさん
06/12/16 18:12:46
なるほど…
やってみます。ありがとうございました。

141:デフォルトの名無しさん
06/12/17 19:17:51
リストコントロール(CListCtrl)をリードオンリにするにはどうすれば良いですか?

142:デフォルトの名無しさん
06/12/17 19:21:10
2つ目の質問です

ツリーリストコントロールって標準で存在しませんか?
存在しない場合はどうすれば使えますか?
MFCで作ったフリーソフトでツリーリストが使われていたので、
何らかの方法でできるのではないかと考えているのですが・・・

ちなみに、今の自分の技術力では自作は無理です

143:デフォルトの名無しさん
06/12/17 19:25:35
3つ目の質問です

MDI子ウィンドウのビュー(フォームビュー)でリストコントロール(CListCtrl)を使っているのですが、
他の子ウィンドウがリスト部分の前に重なった後、リスト部分をクリックしてリストがある子ウィンドウを
アクティブにすると重なっていたリスト部分だけが再描画されません
原因はまったく不明です
どのようにすれば子ウィンドウがアクティブになった時に正常に再描画されるようにできますか?

144:デフォルトの名無しさん
06/12/17 19:29:21
最後の質問です

MDI子ウィンドウのビューでリストコントロールを使っているのですが、
子ウィンドウのサイズ変更にあわせてリストのサイズを動的に変更するには
どのようにすれば良いですか?

VC#ではプロパティ画面で簡単に設定できたのですが、
VC++にはないのでとても困っています・・・





以上4つ質問させて頂きました
何かご存知の方は、ご回答をよろしくお願いしますm(_ _)m

145:デフォルトの名無しさん
06/12/17 19:37:53
最後のやつの答えは
子ウィンドウのサイズ変更にあわせてリストのサイズを動的に変更する

146:デフォルトの名無しさん
06/12/17 19:45:00
MDI野郎の質問は意味不明

147:デフォルトの名無しさん
06/12/17 19:51:36
具体的にはOnSizeとかOnSizingとかOnExitSizeMoveとか用途に合わせて使うと吉。

148:デフォルトの名無しさん
06/12/17 19:53:22
>>141
普通リードオンリーでできんじゃねぇっけ?
リソースファイルの方の設定に編集できるとかできないとかそういうプロパティあった希ガス。

149:デフォルトの名無しさん
06/12/17 20:00:56
>>142
昔、俺がみたのは自力で描画してたのしかみたことないな。
今、どうなってるのかはよくわからん。

150:デフォルトの名無しさん
06/12/17 21:27:01
>141-144
勉強してないの丸わかりなんだけど
よくリストコントロール表示できたね
どっかからソースぱくってきた?

151:デフォルトの名無しさん
06/12/17 21:43:34
たしかにこうなんもかんもわからんようだとどうしようもないなw

152:デフォルトの名無しさん
06/12/18 01:37:33
いつも質問しっぱなしで消えて行く人と文体がそっくりだな

153:デフォルトの名無しさん
06/12/18 16:59:07
お願いします。MFCを使い大量の点を打って画像を描画するプログラムを作っています。
点の数は数千を越えていると思うのですが かなり処理に時間がかかります。

自分なりに色々調べたところ SetPixelは遅い ということがわかりました
同時に BitBlt とか 裏画面 などと 高速化に関するワードも出てきましたが
全く分かりませんでした
この言葉で全て解決しようとするのが悪いのですが 初心者です。
しかし、時間が本当に無いので時間をかけて勉強して… ができません。

ちなみに 点は一色です。 SetPixelの遅さを解決する方法で
まだ分かり易いだろう と思う方法を教えていただけませんか?

154:デフォルトの名無しさん
06/12/18 17:15:42
かなり遅いって具体的に何秒?たった数千なら一瞬のはずだけど...

155:デフォルトの名無しさん
06/12/18 17:27:01
えっ・・・ そうなんですか?
具体的にはループ回数が3万でそのうちの一部の点を
描画しているので、最大でも3万ですね
1万は越えているかも知れませんが…

時間は3分から5分程度でした。

156:デフォルトの名無しさん
06/12/18 17:31:20
うちのPCは最新鋭からは程遠いセレロンだけど10万個の点をSetPixelで
描いても0.1秒ぐらいだったよ。(裏画面とか未使用)
描画以外の部分に時間かかってるんじゃないかな。

157:デフォルトの名無しさん
06/12/18 17:35:59
配列に直接描画すればいいんじゃない?

158:デフォルトの名無しさん
06/12/18 17:39:17
そうでしたか… スペック的には確実問題になるほどではありません。
ループ回数を増やすと比例関数的に時間も延びたので
てっきりそこが問題だと思っていました。

そうなるとどこに時間がかかっているのか全く分かりませんね…
ランダムウォークさせているのんですが そこか
1024*768もの配列を作って その中身全てを参照(検索)するという作業を
何度かしているのも原因かもしれませんね。
mallocなんかも全く使っていませんし…

ループ回数をこれ以上にするとエラーになり途中で動作が止まってしまうのも
同じ原因から来ているのかも…

しかし ここまでくるとここで相談させてもらう内容ではなくなってしまいますね。

159:デフォルトの名無しさん
06/12/18 17:42:35
1024*768*30000=230億強
それは遅いだろ...

160:デフォルトの名無しさん
06/12/18 17:57:38
>BitBlt とか 裏画面 などと 高速化に関するワードも出てきましたが全く分かりませんでした
>初心者です
>時間が本当に無いので時間をかけて勉強して… ができません。

結論: 無理

161:デフォルトの名無しさん
06/12/18 17:57:46
最後に一回だけ描画すればいいのに
いちいちSetPixel使うからだよ。

162:デフォルトの名無しさん
06/12/18 18:01:51
えっと 最後に一回だけ描画してます。

まぁ特に考えてたわけではなく、むしろ本当は描画の
様子が分かるように1回1回点を打ちたかったのですが
それができなくて 最後にだけ描画してます。
(点を打つ配列に目印をいれて最後にその部分だけ描画)

結論を言うと そのループ及び巨大な配列の中身を参照するのに
時間がかかってるというわけなんですね・・・

>>160 ってことでFAですかね。

検索の仕方や配列の使用法などを再考してみますね。
こんなくだ質に付き合ってくださってありがとうございました。


163:デフォルトの名無しさん
06/12/18 18:13:41
SetPixelをループに入れてる時点で一回だけじゃないじゃん。

164:デフォルトの名無しさん
06/12/18 18:17:04
GDIにじゃなくてメモリに対して書くようにすればいいんじゃないの?

165:デフォルトの名無しさん
06/12/18 18:20:29
たった一色ならcharで1024*768の配列をnewして
0か1を直接書き込めばいいじゃない。

その後BMPに変換すれば?

166:デフォルトの名無しさん
06/12/18 18:54:30
正直MFCと全然関係ない

167:デフォルトの名無しさん
06/12/18 19:57:42
1280*1024の画面全体の約130万ピクセルでも数秒だね
遅いというのは一瞬じゃないということ
自分で試さずに質問するのはやめてほしい。

168:デフォルトの名無しさん
06/12/19 00:26:28
>>162
そういう時は、SetPixelだけをコメントアウトしてみる。
そうすれば、それが犯人かどうか分かる。

169:デフォルトの名無しさん
06/12/19 00:53:12
質問者じゃないけど試しにBitmapBits弄ってみたら
130万pixelなんて問題にならないぐらい強烈に早いね。
今後使う機会があるかは微妙だけど勉強になったよ。

>>170 スレ違い房乙

170:153です
06/12/19 00:55:54
さらにレスしていただいたんですね。
>>163
確かにループには入ってますね
でもループもしないで1回だけ なんて できるんですか
>>164
そのような方法がある事は調べていたときにわかったんですが
なかなか理解できなかったんですよね
>>165
今は理解できないんで ちょっと考えて見ます^^;
ありがとうございます。
>>166
ですね。 158で自分でも言ってますが。 すみませんでした。
>>167
そうなんですか。 >遅いというのは一瞬じゃない そうですね
自分で試さずに とは 何のことでしょう?
確かに SetPixelに時間がかかっていたかどうかは
自分で画面全体にSetPixelで塗りつぶしてみれば分かったんですね…
そうだ と思い込んでしまったので思いつきませんでした ごめんなさい。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4310日前に更新/205 KB
担当:undef