【GUI】wxWidgets(旧wxWindows) その5【サイザー】 (960レス)
上下前次1-新
711: 2014/09/01(月)14:09 ID:X69OanmZ(6/10) AAS
MONOLITHIC の値が違うと別の *.o が作成されることが判明。
以下は、SHARED=0(静的リンク)の場合の、MONOLITHIC が 0 と 1 の場合。
CORELIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
$(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
$(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \
$(__MSLU_DEFINE_p) $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include \
省13
712: 2014/09/01(月)14:13 ID:X69OanmZ(7/10) AAS
違いは、-DwxUSE_BASE の部分で、
MONOLITHIC = 0 の場合 : -DwxUSE_BASE=0 // #define wxUSE_BASE 0
MONOLITHIC = 1 の場合 : -DwxUSE_BASE=1 // #define wxUSE_BASE 1
となっている。
例えば、/xxx/src/msw/dc.cpp は、同じソースに対し make に渡すオプションに応じて
以下の2種類の *.o ファイルが作成される。
1つ目は、MONOLITHIC=0の時に作られ、2つ目は、MONOLITHIC=1の時に作られる。
省12
713(1): 2014/09/01(月)15:21 ID:M8Jh9ISi(1) AAS
別に驚くほどのことじゃ無いけど
714: 2014/09/01(月)16:14 ID:X69OanmZ(8/10) AAS
>>713
コンパイルオプションまで変えてしまって何をやっているかと言うこと
なんだよ。ライブラリの集め方だけの問題じゃないって事なんだ。
ライブラリの動作が変わってしまい、MONOLITHIC が 0 と 1とで結果が違うことに
悩まされる可能性もある。
単にライブラリのオブジェクトの集め方(含み方)の問題では無いとすると、MONOLITHIC
オプションの意味はいったい何かと言う問題になる。
省4
715: 2014/09/01(月)16:33 ID:X69OanmZ(9/10) AAS
外部リンク:wiki.wxwidgets.org
「MONOLITHIC=1 :
Packages all libraries in a single file.
(Note: do not combine this option with a static build.)」
とあった。static build の時は、MONOLITHIC=1 にするな、と
書かれている・・・。
716: 2014/09/01(月)16:49 ID:zU7EZBBQ(1) AAS
いったい何を目的として何を検証しているんだ?
717(1): 2014/09/01(月)17:12 ID:bPa0tOdz(1) AAS
このライブラリを使うなとなる。
718: 2014/09/01(月)17:31 ID:X69OanmZ(10/10) AAS
>>717
そういうわけではない。
719(1): 2014/09/02(火)13:46 ID:TmMSlGm8(1/12) AAS
configure を試してみたら、configureのヘルプ通りには行かなかった:
・以下、xxx = wxWidgets-2.8.12 とする。/xxx/ に configure スクリプトがある。
・configureを使用するために、単なるcmd.exeではなくcygwin環境が必要であった。
・cygwinを起動する際、cygwin に入ってからの PATH が、
(MinGWのbin) : /usr/local/bin/ : /usr/bin/ : (Winからのbin)
の順になるようにした。
・カレントを /xxx/ にして configure した。configure の引数には少なくとも
省12
720(1): 2014/09/02(火)13:46 ID:TmMSlGm8(2/12) AAS
・regex, zlib, jpeg, png, tiff は全て無効にしていたにも関わらず、
src/regex, src/zlib, src/jpeg, src/tiff にしかない *.h ファイルが見つから
ないエラーとなった。。
そこで、Makfileを直接修整して、CPPFLAGS に -I 指定によって、上記ディレクトリ
を最後尾に追加した。
・make には成功した。
・/xxx/ に大量の *.o ファイルが作られ、*.a は /xxx/lib/ に作られた。
省7
721(2): 2014/09/02(火)13:48 ID:TmMSlGm8(3/12) AAS
・regex, zlib, jpeg, png, tiff は全て無効にしていたにも関わらず、
src/regex, src/zlib, src/jpeg, src/tiff にしかない *.h ファイルが見つから
ないエラーとなった。。
そこで、Makfileを直接修整して、CPPFLAGS に -I 指定によって、上記ディレクトリ
を最後尾に追加した。
・make には成功した。
・/xxx/ に大量の *.o ファイルが作られ、*.a は /xxx/lib/ に作られた。
省7
722: 2014/09/02(火)16:41 ID:TmMSlGm8(4/12) AAS
console.cpp の中身を printf() だけを使う4行の main() 関数だけに
書き換えてみたら問題なく起動して普通に文字列が表示された。
なので、MinGW 環境の問題ではなさそう。
723: 2014/09/02(火)17:12 ID:TmMSlGm8(5/12) AAS
wxPrintf()だけを使った console 版 hello world が、static link
で 96,468 bytes で済んだ。
ところが、wxString を使った場合、作成した exe を実行しようとすると
>>721 後半で書いたメッセージ・ボックスが出て起動できない。
724(1): 2014/09/02(火)17:17 ID:DoCZo715(1/2) AAS
libstdc++がダイナミックリンクになってるだけだろ。
725(1): 2014/09/02(火)17:44 ID:TmMSlGm8(6/12) AAS
>>724
ダイナミックライブラリであるところの
libstdc++-6.dll
は既に読み込めているんですわ。
「libstdc++-6.dll から見つかりませんでした。」
の「から」がそれを表している。
なお、configureを使わずに、build/msw から build したライブラリだと
省2
726(2): 2014/09/02(火)19:04 ID:DoCZo715(2/2) AAS
パスが通ったところに互換性のない別バージョンのdllがあるんだろ。
mingwだとsjljとdw2の2種類あるから。
727(1): 2014/09/02(火)19:56 ID:TmMSlGm8(7/12) AAS
MinGW/bin を
i686-pc-mingw32-g++ と MinGW/bin/g++ は別物らしくコンパイラのサイズ
(作ったプログラムのサイズではなく変換機のサイズ)がそもそも違う。
また、前者では、リンク段階で何もエラーを出さないが、
後者では、ちゃんと、_gxx_persolanity_v0 や _Unwind_Resume が
undefined reference というエラーになる。
728: 2014/09/02(火)20:00 ID:TmMSlGm8(8/12) AAS
>>726
最初、xxx dw2 yyy.dll が見つからない、と言うメッセージ・ボックス
が出たのだが、そのdllを検索すると MinGW/bin にある事が分かって、
そこにパスを通したらそのメッセージ・ボックスは出なくなった。
その代わりに >>721 のメッセージ・ボックスが出るようになった。
729(1): 2014/09/02(火)20:55 ID:TmMSlGm8(9/12) AAS
結論的に言うと、自分のローカルにMinGW32 の別バージョンが沢山あった。
サンプルのコンパイルに使われたのと同じMinGW32のbinだけをパスに
設定してからサンプルを起動すると実行できるようになった。
実行結果も問題ない。実行ファイルはstripするとサイズが小さくなったが、
>>691のライブラリをリンクした物よりも大きくなってしまった。
[wxStringを使った最小な cui program のサイズ]
・>>691 のwxライブラリ使用時 : 451,584 bytes
省10
730: 2014/09/02(火)21:12 ID:WV3CuJcS(1) AAS
よかったな
-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
にすればlibstdc++とスタティックリンクできるかもな
731(1): 2014/09/02(火)22:46 ID:TmMSlGm8(10/12) AAS
cygwin版のMinGWと、cmd.exe 版のMinGWって結構違うような気がしてきた。
Makefileなんかもcygwin版だと/cygdrive/c/xxx/yyy/zzz の形式になっている
のに対し cmd.exe版は c:\xxx\yyy\zzz になっているらしい。
また、コンパイラに -I 指定したパスなんかも同様の違いがあるらしく、
configureが作ったMakefileは、cygwin版MinGW用で、
cmd.exe版のMinGWでは、#inclde "wx/setup.h" のパスが探せなかったり
する。
省6
732(1): 2014/09/02(火)22:56 ID:RsSqk3ed(1) AAS
もう完璧にスレ違いだな
733: 2014/09/02(火)22:56 ID:TmMSlGm8(11/12) AAS
cygwin版のMinGWと、cmd.exe 版のMinGWって結構違うような気がしてきた。
Makefileなんかもcygwin版だと/cygdrive/c/xxx/yyy/zzz の形式になっている
のに対し cmd.exe版は c:\xxx\yyy\zzz になっているらしい。
また、コンパイラに -I 指定したパスなんかも同様の違いがあるらしく、
configureが作ったMakefileは、cygwin版MinGW用で、
cmd.exe版のMinGWでは、#inclde "wx/setup.h" のパスが探せなかったり
する。
省6
734: 2014/09/02(火)22:57 ID:TmMSlGm8(12/12) AAS
>>732
wx アプリのサイズダウンの仕方関連なんだけど。
735: 2014/09/02(火)23:40 ID:wgXgojMH(1) AAS
作ったバイナリのサイズなんてwxWidgetsのビルド方法によって大きく変わるうえ、
最終的に使い物にならないライブラリの出来上がりとなるのが目に見えている
本当に必要なものだけを炙り出すつもりなら止めはしないが、どう考えても徒労でしかないと思うぞ
736: 2014/09/02(火)23:47 ID:r9jqoPj2(1/2) AAS
正直wxWidgetsのバイナリサイズの話以外はほとんど既出だし
CygwinとMinGWの仕様の違い、クロスコンパイラのターゲット、configureの基本
それらの件に関しては自分のブログにでも書いていてほしい
737(1): 2014/09/02(火)23:54 ID:r9jqoPj2(2/2) AAS
まあ一応上から目線でコメントしとくと
>>725
libgccの存在に関して勉強不足、>>726の言うとおりdllの種別が2種類ある
DLLにするよりもlibgccだけスタティックリンクしたほうがいいが、libtoolにかませるのが
割と面倒なので一緒に配布したほうが楽、まぜこぜにするとか初心者くさい
>>727
クロスコンパイラとネイティブコンパイラを混同している
省3
738(1): 2014/09/03(水)00:12 ID:RSu3l9Ti(1) AAS
AA省
739: 2014/09/03(水)00:20 ID:qMd+w6/O(1) AAS
>>738
スレ違いだ、こっちでやれ
Cygwin + MinGW + GCC 相談室 Part 7
2chスレ:tech
あとMinGWはcmd.exeではなくminttyから使うべきだ
さっさとネットで資料を探す作業に戻るんだな
740: 2014/09/03(水)00:37 ID:kYvXCnau(1/3) AAS
ちなみに c:\cygwin\bin と c:\cygwin\usr\local\bin にパスを通せば、
cmd.exe からでも cygwin のコマンドが実行できるようになる。
gccもlsもmakeも。ここでbashを起動すればcygwin環境になる。
741: 2014/09/03(水)08:47 ID:VnTCGwbS(1) AAS
久しぶりに2ちゃん観に来たら
wxのスレめっちゃ野比てて嬉しい
742(1): 2014/09/03(水)14:50 ID:kYvXCnau(2/3) AAS
wx のソースを修正したら、wxString() を使った最小サンプルが、
静的リンクしても 70KB で済むようになった。
PATHには、MInGW/bin しか設定せずにテストしているので、wx の DLL
がリンクされている可能性は無く、間違いなくスタンド・アローンの
プログラム。
ちなみに、wx のソースを修正しなければ、451,584 バイトになってしまう。
>>729 に書いたものとほぼ同じプログラムだから。
743: 2014/09/03(水)15:05 ID:SXoWEkGr(1/2) AAS
wxというよりgccとライブラリのお話で伸びている
744: 2014/09/03(水)16:58 ID:3zk9T5qQ(1) AAS
>>742
dllの依存関係すらまともに調べられないのか
dependency walkerとかobjdumpとか使え
745: 2014/09/03(水)17:02 ID:SXoWEkGr(2/2) AAS
mingw入ってるならlddコマンドでもいける>依存動的ライブラリ
746: 2014/09/03(水)18:30 ID:kYvXCnau(3/3) AAS
ただ、パス設定を空にして起動できるかどうか見るのも1つの確実な方法。
747: 2014/09/04(木)03:37 ID:FQO1vG1R(1/2) AAS
性格悪いな。
コンピュータ・ソフト関連の人って。
748: 2014/09/04(木)17:23 ID:FQO1vG1R(2/2) AAS
GUIアプリのサイズ縮小を試みていたが、断念するかも知れない。
749(2): 2014/09/04(木)18:46 ID:Sd68Xi30(1) AAS
△性格が悪い
○無駄が嫌い
◎無駄な事をしてる奴が嫌い
750(1): 2014/09/05(金)15:14 ID:PbioWCRT(1) AAS
>>749
何も悪いことをせず、自分にも害を与えない人を嫌うのが性格が悪いんだよ。
751(2): 2014/09/05(金)15:46 ID:JjYqHkIR(1) AAS
公園の蚊を駆除するのに外側からじゃなくて内側から始めるとかが無駄
自分にも危害が及ぶので嫌
752(1): 2014/09/05(金)17:37 ID:MynIP2yf(1) AAS
>>749>>750
言われた側が一方的に立場が悪くなるという効能は興味深いと思う
言ったもん勝ちという現象は絶対にあるのだ
>>751
生死にかかわる難しい判断を
「無駄なこと」に無理やりおしこめた詭弁
物事を矮小化させる効果もある
753: 2014/09/05(金)18:18 ID:NH0YjWIH(1) AAS
>>751
正直言って、今回のこととの関連も分からない。
それ以前に外側から、内側から、ということの意味が全く分からない。
まるで会話ロボットが生成した文書のようだ。
>>752
この文書も意味不明。人間が書いたとは思えない全く理解できない文書だ。
754: 2014/09/05(金)22:33 ID:Mt1E1+r6(1) AAS
俺の大好きなwxWidgetsスレがめちゃんこ糞スレになって泣きそう
755: 2014/09/05(金)22:52 ID:rFI2iHSs(1) AAS
案の定あらし化したか
これ以上触れないで放っとくの推奨
756(1): 2014/09/10(水)10:22 ID:8Y3LAJyJ(1) AAS
wxWidgets って、GTK をバックエンド(port to)に使うことも出来るらしい
ね(wxGTK)。
上位のツールキットが、下位のツールキットに被さっているってことか。
X11 を直接バックエンドに使うのともまた違うのかな?
757: 2014/09/10(水)18:37 ID:/KH51cxp(1) AAS
AA省
758: 2014/09/11(木)00:33 ID:na3nzgh2(1/2) AAS
>>756
X11は組み込み向けのportなので一般的には使われないよ(メンテされてるかもよくわからん)
Linuxでの使用の際はGTKベースと思っていた方がいい
つまりwxWidgetsのクラスやメソッドでコードを書いてLinux上でビルドするとGTKアプリができる
最近はwxQtというwxWidgetsからQtをバンドルするイカれたプロジェクトが本流にマージされたようだが…
759(1): 2014/09/11(木)07:34 ID:BpRRpzGv(1) AAS
wxQtってなんかメリットあるの?
760: 2014/09/11(木)20:49 ID:na3nzgh2(2/2) AAS
>>759
目的は、Qtベースのデスクトップ(KDE)でもwxWidgetsアプリを使うためとか
(→まあKDE上でGNOMEアプリを使うツールもあった気がするのだが…)
あとQtをバンドルすることでAndroid対応も果たしていた(実用性は不明)
761: 2014/09/12(金)10:47 ID:w24nfmYL(1) AAS
wxWidgetsで、POPUP Menu (Windows では、Context Menu が正式名称かも)を作る場合、
どうしてますか?
特に、CodeBlocksなどのIDEで行う場合の最良の作法が知りたいです。
自分は、基本的な wxSmith の使い方が分かったところです。
762(1): 2014/09/12(金)11:29 ID:vSDiSYyP(1/2) AAS
MenuItem作って
SubMenu作って
AddItem
763: 2014/09/12(金)11:47 ID:S8WOzChk(1) AAS
>>762
それは手作業の場合ですよね。
そこの部分は対した手間ではないですが、
イベント・ハンドラを*.cpp, *.h, EVENT_TABLEの全てに書くのが面倒で。
764(1): 2014/09/12(金)11:47 ID:vSDiSYyP(2/2) AAS
どうぞ
動画リンク[YouTube]
765: 2014/09/12(金)12:20 ID:k4huCAJU(1) AAS
>>764
これ、今ちょうど数秒前に見終わったところだった。
これ見てると、
1. wxSmithでwxFormをエディット中に、「MenuBar」ではなく「Menu」ボタンを押して
「要素」を追加する。
そうするとwxSmithの上辺に要素のアイコンが並んでいる末尾に新しいアイコンが追加される。
2. 追加したMenu要素に名前を付ける。
省9
766: 2014/09/12(金)12:28 ID:ylwL1QX/(1/2) AAS
馬鹿には無理
767(1): 2014/09/12(金)14:27 ID:8yVPY0Zt(1) AAS
7個のメニュー項目にイベント結びつけるのに7行コード書くのって、そんな突出して面倒か?
768: 2014/09/12(金)15:27 ID:mqgnzDe4(1) AAS
>>767
それは、「EVENT_TABLE」の箇所だけの話で、実際は、*.h に
メンバ関数宣言を7つ書き、*.cpp に
Zzzz Ccccc::OnXxxxx( Yyyy *pYyyy )
{
return Qqqqq;
}
省2
769: 2014/09/12(金)16:36 ID:ylwL1QX/(2/2) AAS
IBみたいなのを期待したら駄目
770(1): 2014/09/12(金)19:11 ID:cDGrnlyB(1/3) AAS
なんで今更wxSmithなんだよ古臭いな
なんでイベントテーブル使ってんだよ古臭いな
黙ってwxFormBuilder使ってみろよメッチャ簡単で笑えるぞ
771(1): 2014/09/12(金)19:15 ID:nAjxttHn(1/3) AAS
>>770
IDEとの組み合わせは?
IDEがサポートしていなくてもいけるんだろうか?
772(1): 2014/09/12(金)19:26 ID:cDGrnlyB(2/3) AAS
>>771
ちんまい個人用ツールしか作った事が無いから大規模プログラムでどうなるかは分からんが、
俺はwxFormBuilderでGUIデザインし、VisualStudioでコード書いてる。
GUI部品を追加したくなったら、いつでも追加編集できる。
もちろんイベント追加も問題ない。
VSでコード書きつつGUIエディットしても、VSにフォーカスを移したら勝手に読み込み直してくれる。
今まで書いたコードがGUI生成時に消去される事も無い。
省1
773(1): 2014/09/12(金)19:30 ID:nAjxttHn(2/3) AAS
>>772
POPUP MENU を作る時、EVENT_TABLE を使わずに何か良い方法で
やってくれるのかな?
774: 2014/09/12(金)19:38 ID:RfUl3Wi+(1) AAS
wxFormBuilderかあ
もはやクロスプラットフォームでGUIがGUIでデザインできるのか(しかもフリーソフトウェア)
775: 2014/09/12(金)19:39 ID:nAjxttHn(3/3) AAS
VSは、外部エディタでソースを編集した場合、VSに戻ると自動的に再ロード
してくれる機能がある事は知ってる。これは昔からある機能。
776(2): 2014/09/12(金)20:52 ID:cDGrnlyB(3/3) AAS
>>773
凝りに凝ったメニューは知らんが、ポップアップメニューの作成および
メニュークリック時のイベント生成なんかは全部wxFormBuilder上で出来る。
従来のイベントテーブルでも生成してくれるし、Connect関数を使ったイベント生成も出来る。
今はConnectも古くてBindがトレンドらしいが、詳しくは知らない。
外部リンク[html]:www.dotup.org
参考までに、wxFormBuilderのみで作ったサンプルコードを添付する。
省2
777(1): 2014/09/13(土)07:40 ID:CAfEAxmE(1) AAS
>>776
これは、どうやって作ったの?
生成されたコードも参考にはなるけど、wxFormBuilder上での操作方法が
知りたい。
778(1): 2014/09/13(土)16:39 ID:JrIr4YUs(1/3) AAS
>>777
説明がめんどくさいから、wxFormBuilderでこの「wxMenuTest.fbp.」を開いて確認してくれ。
あとは適当に触ってれば理解できるだろ。
外部リンク[html]:www.dotup.org
適当にGUIを作ったらF8キーでメインクラスを生成して、
その後F6キーでサブクラスを生成すればいい。
あとは添付した「main.cpp」みたいなコードを書いてビルドすれば目出度くGUIプログラムの完成だ。
779(2): 2014/09/13(土)17:37 ID:dXOJBgge(1) AAS
レイアウトやイベントの仕様が
前もって分かって一発で決まるようなものならいいけど
そうでない場合は細かいテクが必要になるんだよなぁ
VB,delphi,VisualStudio他のポトペタとは違って
基本クラスや継承クラスの生成コードは
上書きしちゃってよしなにしてくれないから目視マージが必要になる
で、それならxrcでいっかなとなったりとね
省4
780: 2014/09/13(土)18:03 ID:iQniTJEB(1/8) AAS
>>778
出来れば言葉で説明していただけるととても有難いんだけれども。
781(1): 2014/09/13(土)18:20 ID:iQniTJEB(2/8) AAS
>>776
MyProject1MyFrame1.cpp に、
void MyProject1MyFrame1::m_button1OnButtonClick( wxCommandEvent& event )
{
// TODO: Implement m_button1OnButtonClick
this->Close();
}
省6
782: 2014/09/13(土)18:22 ID:iQniTJEB(3/8) AAS
そもそも wxFormBuilder って、人間が書いたコードと「マージ」や「アペンド」する機能は全くなくて、
デザイナのテキスト領域に表示されるコードをコピペして使う程度の事しかできないのかな?
783: 2014/09/13(土)18:27 ID:lhtCGruO(1/2) AAS
xrcはwxFormBuilderだとwxRibbonとかで生成に抜けがあるよね
これ自体はそのうちなおるだろうけど、案外使われてないのかなxrc
784: 2014/09/13(土)18:54 ID:iQniTJEB(4/8) AAS
class MyFrame1 : public wxFrame {・・・};
class MyProject1MyFrame1 : public MyFrame1 {・・・};
となっていて、
外部リンク:stackoverflow.com
の
・build your frame/panel in formbuilder
・generate inherited class
省6
785(1): 2014/09/13(土)18:57 ID:iQniTJEB(5/8) AAS
つまり、>>781 のイベント・ハンドラにおいて、this->Close(); の外側の部分も手作業で
書くしかないのではなかろうか?
そして、対応する *.h ファイルの中に、同じ関数のメンバ関数宣言も手作業で追加するしかないのでは?
786(1): 2014/09/13(土)19:05 ID:lhtCGruO(2/2) AAS
実装の中身以外は何一つ手では書かないっていうなら、wxWidgetsは投げ捨てて
QtCreator有するQtか、C++ Builderあたりを使うしかないよ。
wxFormBuilderはIDEじゃないし。
787: 2014/09/13(土)19:07 ID:iQniTJEB(6/8) AAS
>>786
QtCreator では、それが出来るのかな?
788: 2014/09/13(土)19:09 ID:o7tow4WW(1) AAS
XRC最強なんですけど
789(1): 2014/09/13(土)19:18 ID:JrIr4YUs(2/3) AAS
>>785
言葉通りに受け取ってくれればいい。
本当に「this->Close();以外書いてない」んだ。
つまり関数実装部は全て自動生成される。
つーか試してくれよ。
これだけ御膳立てしたんだからさ。
790(2): 2014/09/13(土)19:23 ID:iQniTJEB(7/8) AAS
>>789
大体、答えが分かった。
つまりあなたは、wxFormBuilder に MyProject1MyFrame1 を生成させて、
this->Close();
を追加したんだ。
そいういうやり方だと、ボタンやメニュー項目を一つ増やす度に、手作業で、また、
this->Close();
省4
791(1): 2014/09/13(土)19:27 ID:iQniTJEB(8/8) AAS
>>790
>そいういうやり方だと、ボタンやメニュー項目を一つ増やす度に、手作業で、また、
>this->Close();
>を自分で書かなきゃならない。
ここの部分を補足すると、その時に追加したボタンやメニュー項目に対するハンドラだけ
でなく、既に存在していたボタンやメニュー項目に対する全てのハンドラの中身を手作業で
コピーする必要があるということになる。
省1
上下前次1-新書関写板覧索設栞歴
あと 169 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s