【GUIライブラリ】wxW ..
488:デフォルトの名無しさん
03/09/27 08:22
>>479
レスどうもありがとう。
> XRCはXMLパーザが原因で日本語通らなかったはず
> Unicodeビルドしても変わらないんじゃないかな
そうですか。残念です。
今日初めて気づいたんですが、Gtk版ってUNICODEビルドがないんですね。
いまいちUNICODEビルドが何なのか分からないんですが、どなたか解説願えませんか?
> ただwxXmlResourceはwxLocaleを設定してやれば
> getopt風のメッセージ変換してくれるから
> poファイル用意してやれば一応日本語は出せるよ
> (Windowsでしか確認していないけどね)
今はこれでやってます。
ただいろいろと問題や悩みがあって、
・_Fileに対応するmsgstrが&Fileで直観的ではないし、xgettextで取り出すとsedをかまさなきゃいけない
・下の二つのどちらにしようかという悩み
1.xrcの方を_Fileとしてja.poでファイル(&F)とする
2.xrcの方をFileとしてen.poで&File、ja.poでファイル(&F)とする
poを使うとメッセージの翻訳にインターフェイス(キーバインド)の定義も含まれてしまうから、
キーバインドを変えるためだけにユーザがpoを編集してmsgfmtしなければいけないのが大きな悩みです。
それから、多言語での整合性を取るためにxrcの方で指定するラベルやツールチップ文字列等に
決まった文字列を使わなければならないという悩みもあります。
それならいっそのことインターフェイスの定義に翻訳も含めてしまうのがいいのではないかと。
(というか、翻訳ってインターフェイスの一部ですよね)
なので時間ができればxrcを多言語対応に書き換えようかと思っています。
このレスちょっと日本語おかしいですが勘弁して下さい。宿酔いなので
489:デフォルトの名無しさん
03/09/28 15:37
複数フレームが開いている時に、一度に全て閉じるには普通どうするのでしょうか?
例えばあるフレームで「ファイル→終了」を選んだ時です。
wxExitは緊急の時だけにしろって書いてありますし、
wxWindow#FindWindow*はidやnameが分からないので使えませんし、
wxApp#GetTopWindowは複数回呼んでも同じウィンドウを戻してくるし。。
教えてください えろい人。
490:の
03/09/28 19:33
えろい人と呼ばれて答えないわけにはいかないですね。
> 例えばあるフレームで「ファイル→終了」を選んだ時です。
アプリを終了させるのなら、wxApp::GetTopWindowでメインウインドウの
ポインタを入手してwxWindow::Closeすればいいと思う。
# wxWindow::Destroyかな?
wxApp, DECLARE_APP()も参考のこと。
491:デフォルトの名無しさん
03/09/28 20:00
>>490
レスありがとうございます。僕も早くえろい人になりたいです。
説明不足で申し訳ありませんが、複数フレームとは各々独立しているものでして、
トップウィンドウが閉じられても他のフレームは存在しつづけるのです。
つまり、全てのフレームの親はNULLなのです。
複数インスタンスを起動すればいいだけの話なんですが、
起動時に重い処理を行うためにそれを避けています。
492:デフォルトの名無しさん
03/09/28 20:53
URLリンク(wxwindowsjp.sourceforge.jp) (翻訳ありがとうございます)では、
「新しいウィンドウを作成する時には可能な限り常に親フレームを使うことを推奨する.
そうしない時は,トップレベルフレームのwxCloseEventのハンドラで,全ての子フレームを確実に破棄する事.」
とあるのですが、その「全ての子フレームを確実に破棄する」方法が知りたいのです。
全てのウィンドウのリストを保持する・・・?んー。。。
うおーーーーーできましたっ!
Sえんd
493:デフォルトの名無しさん
03/09/28 20:56
すいません。取り乱しました。。。えっと、wxAppに
bool SendIdleEvents()
すべてのトップレベルウィンドウにアイドルイベントを送ります。
というのを見つけまして、ソースを見たところwxTopLevelWindowsに対して処理をしていましたので、
case wxID_EXIT:{
wxWindowList::Node* node = wxTopLevelWindows.GetFirst();
while (node) {
wxWindow* win = node->GetData();
win->Close(TRUE);
node = node->GetNext();
}
break;
}
としたところ、うまくいきました。お騒がせ致しました。
494:の
03/09/28 21:49
おっと失礼……特殊なケースですな。
グローバル変数の wxTopLevelWindows を利用するという手もありそうですが、
ドキュメント化されていない変数を利用するのもまずいかな?
# どっかでドキュメント化されていましたっけ?
私だったら、素直にwxApp(の派生クラス)でNULL親のウインドウリストを
持つようにしますかね……
495:の
03/09/28 21:58
入れ違いですな……wxTopLevelWindows を利用しましたか。
このあたりのグローバル変数もドキュメント化してくれると助かるのですけどね
# 仕様Fixという意味からも
496:デフォルトの名無しさん
03/09/28 22:29
確かにドキュメント化されてないのは心配ですね。でも結構不変的なオブジェクトっぽいですよ。
REV:1.5以降は wx/window.h に存在してます。REV:HEADでも依然として存在しています。
URLリンク(cvs.wxwindows.org)
REV:1.4以前は各々のプラットフォーム毎に持っていたようです。
URLリンク(cvs.wxwindows.org)
URLリンク(cvs.wxwindows.org)
URLリンク(cvs.wxwindows.org)
URLリンク(cvs.wxwindows.org)
URLリンク(cvs.wxwindows.org)
つまり、wxTopLevelWindowsという識別子はwxWindowsの歴史の中で存在しなかった事はないようです。
wxWindowsのどのリビジョンを取り出しても、必ずwxTopLevelWindowsは存在します。
これからもずっとこうだと限りませんが、1998年存在しつづけているオブジェクトなので余程のことが無い限り大丈夫だと思います。
また、もし変更があった場合は toplvcmn.cpp utilscmn.cpp wincmn.cpp helpctrl.cpp app.cpp
data.cpp mdi.cpp nativdlg.cpp taskbar.cpp toplevel.cpp window.cpp app.h window.h
に一度に変更が入るため、変更の可能性は低いように思えます。
497:デフォルトの名無しさん
03/09/28 23:43
と思ったんですが、
URLリンク(wxguide.sourceforge.net)
のガイドラインでは
WX_DEFINE_ARRAY (AppFrame*, AppFrames);
で全てのフレームをApp(public wxApp)で管理していました。
のさんの言うように自前で管理することにします。どうも。
498:デフォルトの名無しさん
03/09/29 20:54
最近wxWindowsの勉強を始めたのですが、サンプルを見ると、
どれもボタンとかメニューを作るたびにIDを割り当てて、
そのIDをベースにコールバックを登録してますよね?
みなさん、そのスタイルでプログラムされてるんですか?
wxID_ANYでまかせて、GetIdを使うやり方は、将来何かまず
いことがおきるでしょうか?
ついでにいうと、せっかくオブジェクト指向なのに、なんで
IDなんていう内部情報を表に見せるようなAPIになってるん
でしょうね。
499:の
03/09/29 23:58
> 498
>wxID_ANYでまかせて、GetIdを使うやり方は、将来何かまず
具体的にはどんな感じ?
# ハンドラ内でif判定?
マクロとか使用せずに登録したいのなら、EvtHandler::Connectを使うのが
スマートだけど……どのみちIDを使用しますな。
> IDなんていう内部情報を表に見せるようなAPIになってるん
IDをメッセージの一種と考えているんでしょうね。
メンバ関数をコールバックするためにオブジェクトそのものをやりとりするよりも
効率的と判断したのですかね?
500:デフォルトの名無しさん
03/09/30 00:10
>>498
>なんでIDなんていう内部情報を表に見せるようなAPIになってるん
OnFileMenu(wxCommandFileMenuEvent) {}
OnEditMenu(wxCommandEditMenuEvent) {}
OnExitMenu(wxCommandExitMenuEvent) {}
OnOpenMenu(wxCommandOpenMenuEvent) {}
俺はこんなのやりたくないぞ。
OnCommand(wxCommandEvent) {switch (event.GetId())}
の方が素直でいい。
501:デフォルトの名無しさん
03/09/30 02:01
>>500
やりたくないって最近のGUIフレームワークはみんなそうなんだが。
拡張無しのC++だと発生したイベントとイベントハンドラOnFileMenuの呼び出しを
結びつけるのが難しいから(まさかvirtualにもできないし)wxWではやってないというだけで。
502:デフォルトの名無しさん
03/09/30 02:12
>>501
ほんとにメニューが増えるたびにクラス作るの?
まじでやりたくないな。。とりあえずSwingは違ったけど。
その最近のGUIフレームワークって何てやつ?
503:501
03/09/30 02:26
>>502
>みんなそうなんだが。
>>500の例は少し違ったな。クラスをボコボコ作るわけじゃない。
↓な感じ。
class Form1
{
OnFileMenu(wxCommandMenuEvent) {}
OnEditMenu(wxCommandMenuEvent) {}
OnExitMenu(wxCommandMenuEvent) {}
OnOpenMenu(wxCommandMenuEvent) {}
}
504:デフォルトの名無しさん
03/09/30 02:31
(´-`).。oO(なんで「MFCに似てるな」で片づけられないんだろう…)
505:デフォルトの名無しさん
03/09/30 02:41
>>503
それって
EVT_COMMAND(wxID_FILE, wxCommandMenuEvent, OnFileMenu)
EVT_COMMAND(wxID_EDIT, wxCommandMenuEvent, OnEditMenu)
EVT_COMMAND(wxID_EXIT, wxCommandMenuEvent, OnExitMenu)
EVT_COMMAND(wxID_OPEN, wxCommandMenuEvent, OnOpenMenu)
と何が違うん?
506:デフォルトの名無しさん
03/09/30 02:46
あ、違うか。そうしないのは何故かってことか。なんでだろ?
関数増えまくるのがめんどくさいからかな。
ヘッダにも書かないかんし。まあC++の宿命っつーか。
507:デフォルトの名無しさん
03/09/30 06:45
WideStudio のドキュドキューンさになんとも馴染めなかったので、
これはどうかと wxWindows を見てみたが、
設計古すぎ もうだめぽ
508:デフォルトの名無しさん
03/09/30 11:00
>>507
来年また覗きにおいで
URLリンク(www.wxwindows.org)
Version 3.0.0 Stable
Release 15/12/2003
This stable release will have STL compatibility for compilers that support
templates fully. For example the wxString class will derive from
std::basic_string<>.
509:デフォルトの名無しさん
03/09/30 12:23
よーするにdelegateのないC++は糞だしその上に構築されたライブラリも糞ってこった。
510:デフォルトの名無しさん
03/09/30 13:44
>>509
delegate自分で書けねーのかよ(激藁
511:507
03/10/01 00:35
>>508
おぉ
# gtkmm から早く抜け出したいので期待age.
512:デフォルトの名無しさん
03/10/02 20:27
ドキュメントかなりvirtualの間違いがあるんですけど
こういうのってどうしたらいいんでしょうかね?
報告した方がいいんですか?
virtualってドキュメントに書いてあったからオーバーライドしてはまった人より。
513:デフォルトの名無しさん
03/10/02 21:12
>>512
そりゃもちろん報告した方がいいでしょ。
514:デフォルトの名無しさん
03/10/04 17:26
どなたかwxDynamicLibrary(wxPluginLibrary)をうまく使えている方いませんか?
まだ突き詰めて実験してないんですけど、現象としては
class MyWindow : public wxWindow {
DECLARE_DYNAMIC_CLASS(MyWindow);
}
IMPLEMENT_DYNAMIC_CLASS(MyWindow, wxWindow);
というクラスをDLLにしてあり、アプリケーションから
wxDynamicLoaderやwxPluginManagerを使って読み込んでインスタンスを生成しているんですが
instance->GetBaseName1() == wxT("wxWindow")
なのに
instance->GetBaseClass() == NULL
という良く分からない状態になっています。
ドキュメントにはstrlenのサンプルがありますが、wxWindowsの型システムを使った
オブジェクトの生成方法のサンプルがなかなか見つかりません。
一応 URLリンク(lists.wxwindows.org) も見たんですけど何だか良く分からん(;´Д`)
何か情報があればお願いします(英語でも何かのソースでもいいです)
515:デフォルトの名無しさん
03/10/04 17:30
すいません。めちゃくちゃ間違えました
instance->GetClassInfo()->GetBaseClassName1() == wxT("wxWindow")
なのに
instance->GetClassInfo()->GetBaseClass1() == NULL
です。
516:デフォルトの名無しさん
03/10/04 21:03
>>514
おお、そんなものがあるのか。
漏れも試してみます。
517:デフォルトの名無しさん
03/10/06 00:16
イベントを兄弟ウィンドウに伝播させるには、
1.子ウィンドウAがイベントを親ウィンドウに投げて、
2.親ウィンドウが受け取ったイベントを子ウィンドウBへ投げる
としているのですが、これだと親ウィンドウが全てのイベントを
管理しなきゃいけないんですがこんなもんなんですか?
GUIアプリ作ったことないんでこれが普通なのかどうかよく分かりません。
518:デフォルトの名無しさん
03/10/06 07:20
1.子ウィンドウAが親ウィンドウのハンドルを取得する
2.親ウィンドウから子ウィンドウA,B,C,D,...のリストを取得する
3.子ウィンドウリストから必要なウィンドウをピックアップしてイベントを投げる
でも,動作すると思いますよ.
519:デフォルトの名無しさん
03/10/06 08:34
>>518
レスありがとうございます。
XRCを使っているという前提で聞いてもらいたいんですが、
「必要なウィンドウをピックアップ」とありますが、ユーザが勝手に作ったクラスの場合は
必要かどうか分からないので、結局どこかで while を使って子ウィンドウ全てに
イベントを投げる必要があるということですね。
そうすると、孫ウィンドウに送る場合はどうするのでしょう?
途中にwxPanelやwxSplitterWindowなどがはさまってしまうとそれ以上イベントが飛ばないので、
1.まず最初にトップウィンドウにイベントを投げて、
2.トップウィンドウの全ての子孫ウィンドウを再帰的に検索して
3.それぞれのウィンドウのProcessEventを呼び出す
ということをしなければならないのでしょうか。
「しなければならない」のならするのは全然平気なのですが、ちょっと不安になってしまいまして。
520:デフォルトの名無しさん
03/10/10 19:20
C++BuilderXはどうだったんだろう。
521:思兼 ◆l3iwkTImVo
03/10/10 22:03
>>520
10月半ばにPersonal版がDL可能になる・・・筈
522:デフォルトの名無しさん
03/10/10 22:03
へぇ
523:デフォルトの名無しさん
03/10/11 03:10
英語版のPersonal入れてみたけどwxWindowsは入ってなかったしRADも見当たらなかったぞ
524:思兼 ◆l3iwkTImVo
03/10/11 10:48
>>523
まぢ?
とりあえずプロコンが終わったら入れてみよう.
525:デフォルトの名無しさん
03/10/11 22:31
そういえばBitTorrentもwxWindows/Pythonなんだよね。やけに配布パッケージ大きいと思ったらライブラリが9割以上食ってた
526:の
03/10/12 13:14
> 525
DLLだと全部入りになるからデカいよね。
C++でstatic linkすると随分小さいけど……Pythonじゃ無理か……
527:514
03/10/12 23:42
>>514-515 できましたー。
これが正しい方法なのかどうか分かりませんが、
クラス名以外の情報が見えない状態でインスタンスの生成に成功しました。
以下にTipsとして示します。ちょっと長いです。
環境はWindows2000、wxWindows2.4.1です。今週中にLinuxでもやってみます。
1.DLLを用意する。
ヘッダの中身はこんな感じです。キモはDECLARE_USER_EXPORTED_PLUGGABLE_CLASSです。
これによってwxPluginLibraryにwxClassInfoのハッシュマップが宣言されます。
#ifndef MYFRAME_H
#define MYFRAME_H
#include <wx/wx.h>
class MyFrame : public wxFrame {
DECLARE_USER_EXPORTED_PLUGGABLE_CLASS(MyFrame, __declspec(dllexport));
};
#endif
で、"__declspen(dllexport)"はWXDLLEXPORTのように、
DLL側では__declspen(dllexport)、アプリケーション側では__declspen(dllimport)とならなければなりません。
wx/defs.hを見て適宜プリプロセッサで場合分けしてください。
今回はアプリケーション側はMyFrame.hをincludeしないので、このようにしました。
528:514
03/10/12 23:49
(続き)MyFrameはexportしなくても良いみたいです。(ひょっとすると必要なのかもしれませんが)
1.DLLを用意する(2)
今度は実装部です。IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASSを使えばいいのですが、
wxWindows2.4.1のwx/object.hの_IMPLEMENT_DL_SENTINELにバグがあり、コンパイルが通りませんので以下のようにします。
-------------------------------
#include <wx/dynload.h>
#include "MyFrame.h"
#undef _IMPLEMENT_DL_SENTINEL
#define _IMPLEMENT_DL_SENTINEL(name) \
const wxString name::name##PluginSentinel::sm_className(#name); \
name::name##PluginSentinel::name##PluginSentinel() { \
wxPluginLibrary *e = (wxPluginLibrary*) wxPluginLibrary::ms_classes->operator[](#name); \
if( e != 0 ) { e->RefObj(); } \
} \
name::name##PluginSentinel::~name##PluginSentinel() { \
wxPluginLibrary *e = (wxPluginLibrary*) wxPluginLibrary::ms_classes->operator[](#name); \
if( e != 0 ) { e->UnrefObj(); } \
}
IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS(MyFrame, wxFrame);
-------------------------------
ms_classes.Get(#name) となっているところを ms_classes->operator[](#name) と直します。
で、これをDLLとしてコンパイルします。
529:514
03/10/12 23:57
(続き)ありゃ、ずれてしまった・・・スマン。
2.DLLを読み込んでインスタンスを生成する
wxPluginManagerを使ってDLLを読み込み、wxClassInfoを全走査して目的のクラスを見つけます。
これは URLリンク(lists.wxwindows.org) とほとんど同じです。
---------------------------------
#include <wx/wx.h>
#include <wx/dynload.h>
class MyApp : public wxApp {virtual bool OnInit();}; IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
wxPluginLibrary* lib = wxPluginManager::LoadLibrary("./lib/Debug/lib.dll");
wxNode *node;
wxClassInfo* classInfo;
wxClassInfo::sm_classTable->BeginFind();
node = wxClassInfo::sm_classTable->Next();
while (node) {
classInfo = (wxClassInfo *)node->Data();
if (wxString(classInfo->GetClassName()) == wxT("MyFrame")) {
wxLogTrace(classInfo->GetClassName());
wxLogTrace(classInfo->GetBaseClass1()->GetClassName());
wxFrame* frame = (wxFrame*)classInfo->CreateObject();
frame->Create(NULL, -1, wxT(wxString("class ") + classInfo->GetClassName() + wxString(" : public ") + classInfo->GetBaseClassName1()));
frame->Show(TRUE);
return TRUE;
}
node = wxClassInfo::sm_classTable->Next();
}
return FALSE;
}
---------------------------------
以上です。
530:514
03/10/13 03:21
あの・・・追記です。
DECLARE_USER_EXPORTED_PLUGGABLE_CLASS(MyFrame, __declspec(dllexport));
IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS(MyFrame, wxFrame);
の代わりに
DECLARE_DYNAMIC_CLASS(MyFrame);
IMPLEMENT_DYNAMIC_CLASS(MyFrame, wxFrame);
でもできちゃいました。。。(じゃあPLUGGABLEは何のためにある??)
>>514-515の原因は分からずじまいです。>>527-528の無駄レスごめん。
531:思兼 ◆l3iwkTImVo
03/10/13 17:46
wxWindows Personal 英語版をインストールしてみました.
確かにwxWindowsの影も形もありません・・・ハァ.
デモでは新規作成にwxWindowsのタブがあったのに,こっちにはありません.
wxWindowsはどういう形で使えるようになるのかすら判りません.とりあえず
10月半ばのC++BuilderXではwxWindowsは使えなさそう.
532:デフォルトの名無しさん
03/10/14 11:36
>>523
CBXのどこにRADだと書いてあるのかと小1時間・・・
>>531
某得意のPro版以上とか?
533:思兼 ◆l3iwkTImVo
03/10/14 18:16
>>532
URLリンク(www.borland.com)
このデモの最後の方ではwxWindowsアプリをRADっぽく作る様子があるんだけど・・・
少なくともPersonal版には無いな.ラインナップ間の機能を比較する表にwxWindowsの
項目が無いから,wxWindowsサポートの有無が差別機能だとも思えない.
ソッコーでアンインスコして,MinGW Developer Studioをインストールしてみた.
こっちはなかなか良い.何よりめんどくさいwxWindowsのインストールが簡単にできる
ことだけでも十分うれしい.IDE自体もwxWindows製なので動作が軽い.
他のIDEが使いたいなら,インストールした後wxWindows関連のファイルだけ取り
出してアンインストールするという使い方もアリかも.
534:532
03/10/14 21:49
>>533
そのデモ見てなかった。すまん。
ただDelphiでも比較表にVCLソースの有無とか書いてないし。
535:思兼 ◆l3iwkTImVo
03/10/15 00:18
プロコンも終わったし,ドキュメント書いてからソースを某雑誌の人に
提出したら翻訳に再参戦しようかと思います.
で,結局C++BuilderXのwxWindows採用の噂以降も翻訳作業は続いて
いるんでしょうか?
メインの開発環境をノートPCに移行してから,まだCVS入れてないんです.
536:デフォルトの名無しさん
03/10/16 11:02
>>514-515 と >>527->>530 は全て誤りでした。
間違った情報のまま残しておくとTipsに載った場合にまずいので修正しておきます。
wxPluginLibraryが何をするのかというと、通常の::LoadLibrary,dlopenの動作に加えて、
「wxModuleから派生しているクラスをwxWindowsの型システムにインポートする」
という機能が付加されているという、この一点だけです。
wxPluginManager::LoadLibrary("ライブラリ");を実行するだけでpublic wxModuleなクラスはちゃんと使えます。
public wxModule"以外の"クラスは型システムにインポートされませんので工夫して書く必要があります。
ところでWindowsでなかなかうまくいかなったのですが、その原因は wxClassInfo::sm_first でした。
こいつはプロセス中で唯一であることを保証しなければいけません。
つまりDLLを使うことが必須となります。(スタティックリンクでうまくいくようなアイデアがあれば教えてください)
Linuxでうまくいっていたのは、wxGTK.rpmで入れているため元々共有ライブラリになっていたからでした。
これについては
URLリンク(lists.wxwindows.org)
の P.S.の部分に
>you need to build your app and dll using WXUSINGDLL=1, otherwise you'll have no end of trouble.
とちゃんと書いてありました。(でもこれP.S.なんてもんじゃじゃないだろーと思った)
537:デフォルトの名無しさん
03/10/17 00:15
>>536
訂正が間違ってるというとんでもないことをしてしまいました。(;´Д`)
> wxPluginManager::LoadLibrary("ライブラリ");を実行するだけでpublic wxModuleなクラスはちゃんと使えます。
> public wxModule"以外の"クラスは型システムにインポートされませんので工夫して書く必要があります。
そんなことないです。wxClassInfoを生成(IMPLEMENT_DYNAMIC_CLASS)すると自動的にインポートされます。
wxModuleを継承したクラスは、メモリにマップ・アンマップされる度にOnInit,OnExitが呼ばれ、
そうじゃないクラスは特に何も起こらない、です。モウカキマセンヽ(`Д´)ノゴメンナサイ
538:デフォルトの名無しさん
03/10/17 14:13
昨日、2.4.2落としたら src/makefile.b32 が付いていないみたいなんですけど、
どうやってlib作ったらいいですか?
539:の
03/10/18 11:53
> 537
お疲れです。
>モウカキマセンヽ(`Д´)ノゴメンナサイ
そんなこと言わずに書き込んでくだされ。
Hackについてけないことが多いですが……
> 538
$(WXWIN)/docs/(システムごとのフォルダ)/install.txt
を見るヨロシ。
コンパイラごとのmakefileを使うか、configureを使うみたいですな。
540:思兼 ◆l3iwkTImVo
03/10/18 11:59
bcc使ってないから知らないけど,configureは使えないんだよね.bccでは
makefileがないとビルドできないということになると思うけど,使用するmakefileが
変わったのかな?
MinGW Developer StudioのwxWindows入りバージョンを使ってるから,マトモな
アドバイスが出来なくてスマソ.
541:デフォルトの名無しさん
03/10/18 12:15
>>539
結局はスタティックリンクするとwxClassInfoのメンバ変数が複数生成されてしまうという
こちら側のしょうもないミスだったのですが、ろくに確認せずに書いてしまって申し訳なく思っとります。
>そんなこと言わずに書き込んでくだされ。
お言葉に甘えて、これからは確実に確認してから書き込みさせていただきます。
>>BCCの話題
いやいや、src/makefile.vcの中身見れば分かるけど、
src/msw/makefile.*を読んでるだけなので、
BCCだとsrc/msw/makefile.b32を使えばいいわけです。
src/makefile.vcをコピってちょっと修正すればOKだと思う。
542:デフォルトの名無しさん
03/10/18 12:21
×src/makefile.vcをコピってちょっと修正すればOKだと思う。
○src/makefile.vcをコピってちょっと修正してもいいと思う。
543:デフォルトの名無しさん
03/10/18 14:48
一応今回の件(wxClassInfo,wxDynamicLibrary)についてまとめてみました。
URLリンク(www004.upp.so-net.ne.jp)
転載等は自由にして下さって構いません。
544:538
03/10/19 02:08
>>539-542
レスサンクス、とりあえず来週
>src/makefile.vcをコピってちょっと修正
ためしてみます。
545:デフォルトの名無しさん
03/10/19 07:14
Cygwin環境でいじってみようと、ドキュメントに書いてあるとおりに
../configure --with-msw --enable-debug --enable-debug_gdb --disable-shared
make
でコンパイルしました。
これだと、cygwin1.dllが必要になっていると思うんですが、
cygwin1.dllが必要ないようにするにはどうしたらいいのでしょうか。
-mno-cygwinをどこかで指定するのでしょうか。
546:思兼 ◆l3iwkTImVo
03/10/19 08:23
>>545
specあたりを弄ればいいんじゃない?
でもいろいろ問題があるかもしれないから,↓を読んでから挑戦してね.
URLリンク(www.sixnine.net)
547:538
03/10/20 13:32
>src/makefile.vcをコピってちょっと修正
やってみたら簡単にできました。書き込むほどのことでもないですがとりあえず
!include <makeb32.env>
THISDIR=$(WXWIN)\src
all:
cd msw
make -f makefile.b32
cd $(THISDIR)
clean:
cd msw
make -f makefile.b32 clean
cd $(THISDIR)
cleanall:
cd msw
make -f makefile.b32 cleanall
cd $(THISDIR)
548:538
03/10/20 13:36
ためしてみたのは
make -f makefile.b32 FINAL=1
でライブラリを作成して samples\dialogs をメイク、実行ができました。
549:538
03/10/20 13:52
というか、
>BCCだとsrc/msw/makefile.b32を使えばいいわけです。
が、正解だったのですね。おさわがせスンマソ
550:デフォルトの名無しさん
03/10/20 13:54
へえ
551:デフォルトの名無しさん
03/10/25 14:45
>>546さん
MinGWDSに同梱のwxWindowsライブラリからリソース使えますか?
MinGWからライブラリ作り直さないと無理ですかね・・・
552:デフォルトの名無しさん
03/10/25 15:24
というか「(゚∀゚)ノ☆バンバン! とりあえずライブラリ全部持ってこーい」ってオプションないのかな
--enable-controls use all usual controls
これは違うみたいだし
553:思兼 ◆l3iwkTImVo
03/10/25 21:56
>>551
wxWindowsを入れてるPCとMinGWDS入れてるPCが違うので,正確には調べて
いません.
<wx/setup.h>
#define wxUSE_RESOURCES 1
#define wxUSE_PROLOGIO 0
#define wxUSE_WX_RESOURCES 0
こんな感じでdefineされていますが,とりあえずPROLOGIOが0ということは
.wxr形式のリソースは無理でしょう..rcはいけるんじゃないかな.
#さっさとdialogedをxrcバージョンにしろよ>wxWindows
554:思兼 ◆l3iwkTImVo
03/10/25 22:14
>#さっさとdialogedをxrcバージョンにしろよ>wxWindows
ちゃんとwxrceditってのがありますね.contribのなかにあるのを「ちゃんと」と
言うかどうかは知りませんけど.
いまcontrib内のmake中ですが,errorやwarningが沢山出てくる・・・使えないかも.
555:思兼 ◆l3iwkTImVo
03/10/25 22:31
wxrceditが一応ビルド&実行可能でした.
使い方が判らないけれど,単にXRC専用xmlエディタにプレビュー機能が
付いたみたいな感じで,RADツールみたくペタペタと貼るのは無理かも.
556:デフォルトの名無しさん
03/10/26 00:16
>>555
俺使い方良く分からんかった。
あれだと手書きの方が早い気がした。
557:思兼 ◆l3iwkTImVo
03/10/26 06:19
>>556
一応,プレビューがサクサク表示されるならあっちの方がデザインしやすい
とは思う.でもまだXRCはお勧めできるものではないね.
っつーことで,wxr形式のリソースに対応していないMinGWDS付属ライブラリは
使いにくいかも.
wxWindowsって結構こういう不完全な部分が多いかも.自分で使う分には良いけど,
C++初心者の後輩に使わせるGUIツールキットとしてはgtkmmかFOXの方が良いかも.
翻訳再参戦は延期してしばらく別のライブラリを触ってみます.
#Windows上でフリーで初心者にも使いやすい開発環境をそろえるのは大変かも.
558:の
03/10/26 22:26
wxListBox終ったなり
URLリンク(wxwindowsjp.sourceforge.jp)
559:デフォルトの名無しさん
03/10/30 15:13
otsu
560:デフォルトの名無しさん
03/11/03 00:24
思兼 ◆l3iwkTImVoにも見捨てられた哀れなライブラリ
561:の
03/11/03 03:43
>560
まあ、のんびりいくよ。マターリとな。
使う分にはいいんだが、訳すのは大変。ヒマが作れん。
Wikiみたいのだったらなぁ
562:デフォルトの名無しさん
03/11/03 17:07
wxFoundationとBorlandの採用がらみでMLは喧喧諤諤でし。
563:デフォルトの名無しさん
03/11/05 07:29
>>562
wxWindowsがBorlandに採用されるん?
564:思兼 ◆l3iwkTImVo
03/11/05 17:06
>>563
URLリンク(www.zdnet.co.jp)
今はWindows版用のプレビュー版プラグインとして提供されて
いる・・・んだと思う.
将来的にC++BuilderやKylixと統合される時には,完全にクロス
プラットフォームな標準プラグインとなると思いたい.
565:思兼 ◆l3iwkTImVo
03/11/05 17:14
>>560
どっちかっていうと,C++自体に愛想が付きかけている気がする.すごく
強力で,プロコンの競技部門には必須だし,それ以外でも自分個人で
使う分にはすごく良い.でも後輩に教えようとすると,プログラミング以外で
覚えないといけない部分があまりにも多いことに気が付く.
多分,他人と一緒にプログラムを書くときに,個人の能力差が一番問題に
なるのもC++だと思う.
#C#かJavaがガベッジコレクタ&VM無しで動かせるなら,すぐにでも移行したい.
566:デフォルトの名無しさん
03/11/05 17:15
Rubyだな
567:思兼 ◆l3iwkTImVo
03/11/05 17:19
>>566
Rubyって起動速い?
値ベースと参照ベースをプログラマが指定できるGenericsがある?
メモリ管理をプログラマが指定できる?
JITコンパイラの最適化能力は高い?
ブロックは{}の形が見やすくて好きだけど,Rubyがプロコンの競技で十分使える
性能を持っているのなら後輩に教えてみる.
568:デフォルトの名無しさん
03/11/05 17:33
| ブロックは{}の形が見やすくて好きだけど,Rubyがプロコンの競技で十分使える
|性能を持っているのなら後輩に教えてみる.
と言う位Rubyを分かってるなら前4つの質問の答えは分かると思うが?
569:思兼 ◆l3iwkTImVo
03/11/05 19:15
>>568
いや,Rubyのプログラムソースを見たことがあるだけで,実際に使ったことは無い.
Perlっぽいスクリプト言語だとか,中間コード+JITコンパイルだからPerlより速いとか,
その程度の印象はあるけどそれが正しい理解だと言う自身は無い.
570:思兼 ◆l3iwkTImVo
03/11/05 19:26
調べてみた.
1.起動速度
C#より遅い
2.Generics
無い?(検索してもそれらしいものがヒットせず.リファレンスを概観しても載ってない)
3.メモリ管理
ガベッジコレクトに任せるしかない.
4.実行速度
C#にダブルスコアをつけて遅い.
結論
Perlの代わりにはなっても,C++の代わりになるとは思えない.
571:デフォルトの名無しさん
03/11/05 19:37
>>570
Rubyはモノタイプ言語なので、genericsは不要。
型チェックが無いので、ミスが許されない競技にはお薦めできないかも?
競技なら、タイピングに手間かけられないだろうから、いくら要件を満たしててもAdaなんかは除外でしょうね。
OCamlとか、どう?(よく知らんけど
C++の機能に満足してて複雑さに愛想が尽きてるならDが一番いいんだろうけど、まだアルファだし。
//スレ違いすまんです
572:思兼 ◆l3iwkTImVo
03/11/05 19:56
>>571
競技といっても,プログラミング速度を競うのでは無くて,先に作ったプログラムを
持ち寄って性能を競い合うものです.形式としてはロボコンに近い.
URLリンク(www.procon.gr.jp)
#スレ違いすぎだな・・・スマソ
573:デフォルトの名無しさん
03/11/05 20:18
>>565
GCなしネイティブでC系といったら、D言語ですよ。
genericsもあるし、値・参照の使い分けも、メモリ管理も出来る。
スレリンク(tech板)l50
難点は、D言語がデフォルトのGUIライブラリを持っていないこと。
wxWindowsがポートされると嬉しいんだけど。
574:デフォルトの名無しさん
03/11/05 21:53
>>573
D言語はGC付きだよ。オフにすることもできるけどさ。
まぁ、でも、D言語は俺も期待。思想にちょっと不満はあるが。
文字列とか連想配列とかはライブラリに入れて欲しいかな、やっぱり。
575:の
03/11/05 23:59
>565
Templateみたいな仕組みのある言語があれば、そっちも勉強したいなあ。
コンパイル時に確定している情報と実行時じゃないと確定しない情報という観点で
効率化を計っている言語はC++以外に知らないしなぁ。
576:デフォルトの名無しさん
03/11/06 08:38
Eiffelとかどうなんだろう?
577:デフォルトの名無しさん
03/11/06 19:38
どんな言語にせよ、メジャーになってもらわないと仕事に使えないのが辛い。
メジャーじゃなくても仕事に使える、というつっこみはなしで。
578:デフォルトの名無しさん
03/11/07 03:17
まずは使ってメジャー化させてくださいw
579:デフォルトの名無しさん
03/11/07 23:01
>>574
全体的に禿同
580:デフォルトの名無しさん
03/11/07 23:46
連想配列は同意だが、文字列に関しては、そのまま文字列に使える配列というのは嫌いじゃ無い、
というか、素のCだってそうだし。
文字列をクラスにした場合、C++のように、リテラルからの格納形式への変換というコストと、
様々な文字列クラス乱立という混乱を招くので、組み込みで正解と思うし、
charの配列とそれ以外の配列を区別する必然性は無いので、OKかと
むしろ問題は.sort。同じデータ列でも並び方は色々あるのに、一種類だけ言語に組み込む理由が…
//スレ違いゴメン
581:デフォルトの名無しさん
03/11/10 05:20
>>580
見た感じ、標準ではクラスを使わず、データと関数を分離して使う方向で行ってるね。
ここんところがC的だが、Cより安全になってるようだからいいか。
でも、わざわざ配列操作のために演算子作ったり、deleteを連想配列の要素削除に使ったり。
うーん、普通に関数じゃダメなんかな。~ってタイプしにくいぞ。関数のがいいよ……。
582:デフォルトの名無しさん
03/11/12 23:55
凄いスレだ・・・翻訳プロジェクトが動いてる・・・
このスレの神に習ってFLTK日本語ドキュメントでも作っちゃおうかねぇ・・・
583:の
03/11/13 01:12
>582
ちょっと停滞中だよ。私も今しばらくはTikiの勉強中……
でも、いい加減飽きたから翻訳に戻ろうかな……
584:思兼 ◆l3iwkTImVo
03/11/18 16:51
さっきCマガジンを立ち読みしてきた.
C++BuilderXの紹介記事があって,Borlandへのインタビューもあった.
wxWindowsは,将来搭載される予定のGUI関連の機能のプレビューと
して搭載されただけで,wxWindowsの採用が決定しているわけではない
とのこと.
とりあえず,wxWindows3が大幅に使いやすくなって,C++BuilderXへの
採用されて,一気にメジャー化という夢はまだ残ってる.
585:デフォルトの名無しさん
03/11/18 21:43
そ、そうなのか。
なんだったんだ。
586:デフォルトの名無しさん
03/11/18 21:44
夢見すぎ。
587:デフォルトの名無しさん
03/11/18 22:23
1月にwxWindowsで遊だときは日本語の情報なんてほとんどなかったのに。
ちょっとだけマニュアルを日本語に訳してすぐ挫折した。
すごいよ2ch
そのとき作ったページの一部を編集して6月くらいにアップしてほったらかし。
このスレ見たら元気になったので、更新する気力が湧いてきそう。
URLリンク(www.h3.dion.ne.jp)
588:デフォルトの名無しさん
03/11/22 02:52
GTK,gtkmmでいいじゃん。
589:思兼 ◆l3iwkTImVo
03/11/22 06:53
>>588
gtkに比べて,wxWindowsはネイティブのLook'n'Feelだとか,多機能だという
違いがある.
特に機能に関しては,Write once, Compile anywhereを実現するために,
API依存を吸収するラッパクラスが多数存在する.
その代わりgtkmmに比べて泥臭いコードになるんだけどね(w.wxWindows3に
期待.
590:デフォルトの名無しさん
03/11/22 16:29
おれも、gtkやQtなどを使ってしまうことに賛成。
どうしても、windowsの操作感を求めるなら、外部だけ作り直してしまった方がいい。
591:デフォルトの名無しさん
03/11/22 21:23
逆にGTKやQtはwxWindowsに比べてどんな利点があるの?
592:デフォルトの名無しさん
03/11/23 11:44
URLリンク(www.roebling.de)
どうよ?
593:デフォルトの名無しさん
03/11/27 20:04
2.4.2で、メッセージカタログをShift_JISで作るとちゃんと使えないみたい。
UTF-8では使えたので、内部での変換でしくってるのか?
2.4.0ではちゃんと使えてたのに……。
594:灰 ◆v/.u/aNe9w
03/12/09 01:29
wxColour と 標準イベント識別子 を翻訳してくれた素敵さん。
URLリンク(wxwindowsjp.sourceforge.jp)
URLリンク(wxwindowsjp.sourceforge.jp)
ありがのう。
あと、この辺に突っ込んでくれる人がいると誰かが幸せになりそうな気がします。
URLリンク(dot-gray.s33.xrea.com)
URLリンク(dot-gray.s33.xrea.com)
595:デフォルトの名無しさん
03/12/09 18:31
$B$9$_$^$;$s!"$I$J$?$+65$($F2<$5$$!#(B
$B2?$+D9$$=hM}$r$9$k;~$K!"=hM}$r$7$F$$$k$"$$$@$K(BWindow$B$H$+$,:FIA2h$5$l$J$/$J$C$F(B
$B$7$^$&$N$G$9$,!"$3$l$r=hM}$NESCf$K:FIA2h$5$l$k$h$&$K$7$?$i$I$&$7$?$iNI$$$G$7$g$&$+!#(B
$B%a%$%s%U%l!<%`$N(BRefresh(), Raise(), Update()
$B$H$+$r8F$Y$PNI$$$N$+$H;W$C$?$N$G$9$,!"(B
$B$=$l$G$O:FIA2h$5$l$J$$$h$&$G!D!#(B
GUI$B$N%=%U%H:n$C$?;v$J$s$FKX$IL5$$$N$G$I$N$h$&$J%-!<%o!<%I$G8!:w$7$?$iNI$$$N$+$bJ,$+$i$:!"(B
$B$I$J$?$+%]%$%s%H$@$1$G$bNI$$$N$G65$($F2<$5$$(Bm(_ _)m
596:595
03/12/09 18:50
すみません、どなたか教えて下さい。
何か長い処理をする時に、処理をしているあいだにWindowとかが再描画されなくなって
しまうのですが、これを処理の途中に再描画されるようにしたらどうしたら良いでしょうか。
メインフレームのRefresh(), Raise(), Update() とかを呼べば良いのかと思ったのですが、
それでは再描画されないようで…。
GUIのソフト作った事なんて殆ど無いのでどのようなキーワードで検索したら良いのかも分からず、
どなたかポイントだけでも良いので教えて下さいm(_ _)m
すみません>>595バケました。
597:デフォルトの名無しさん
03/12/09 19:02
先人は0.1秒以上かかる処理をメインスレッドでやるなと言っていたが。
598:デフォルトの名無しさん
03/12/09 19:25
要するに0.1秒未満で実行できるハードウェアを使えということか。
599:デフォルトの名無しさん
03/12/10 03:18
マルチスレッド
600:デフォルトの名無しさん
03/12/10 18:04
>>597
0.1秒未満の処理に分割しろって事ですな
601:デフォルトの名無しさん
03/12/11 17:14
wx494.htm によると,マルチスレッドにする他の選択として,演算を
idle handler にするか,定期的に ::wxYield() (wxApp::wxYield())を
呼んで画面を更新してください,と書いてあります.
wxYield は,プログレスバーや splashscreen を更新する時によく使われます.
ためしてみてください.
602:596
03/12/16 14:21
>>601
ありがとうございました。さらに安全な::SafeYield()を使うことでそれなりに目的が達成されそうです。
また、
>>597, 599
やはり途中で中止とかもできるようにしたいので、将来的にはマルチスレッドにもしようと思います。
ご指導ありがとうございました。
ちなみに wxMDIChildFrame::GetParent() って wxGTK だと wxMDIClientWindow を返して、 wxMSWだと
wxMDIParentFrame() を返すんですね。コレにハマっていたので、御礼兼メモとして書かせて頂きます。
603:灰 ◆v/.u/aNe9w
03/12/20 23:20
AkiYunタンありがつー。
URLリンク(wxwindowsjp.sourceforge.jp)
604:デフォルトの名無しさん
03/12/21 14:39
どんどんあげていこう
605:デフォルトの名無しさん
03/12/21 22:56
じゃぁ、さげ
606:デフォルトの名無しさん
03/12/22 01:09
>>602
GetParentでクライアントウィンドウ返さるのっておかしくねぇ?
バグかな。
607:デフォルトの名無しさん
03/12/25 16:47
翻訳はここに書き込んでいいのかな?
wxWindows Hello World サンプル の一文目は、
多くの人から、文法や基本的な原理に関する幾らかの迅速な判断が出来るように、
ここに小さなサンプルを示して欲しい、という要求をされてきたが、あなたは今、
wxWindows における"Hello World" を見ることが出来る。
って感じでしょうか。幾分堅いかな。
608:デフォルトの名無しさん
03/12/28 22:50
Borland の C++ BuilderXに,wxWindows用のパッケージがありました.
A technology preview of a RAD designer for the wx framework and of a
100% ANSI/ISO C++ compliant compiler for Windows x86 For use with
C++BuilderX Personal and C++BuilderX Enterprise Trial
だそうです.
609:思兼 ◆l3iwkTImVo
03/12/29 00:16
>>608
それ,ダウンロードしたPersonal版にはついてなかったんだよな・・・.
Borlandの中の人によると,まだwxWindowsに正式に決めたわけでは
無いらしい.
610:デフォルトの名無しさん
03/12/29 01:24
>>609
あくまで,_A technology preview_ですから.
でも,Borlandのサイトからダウンロードできるようになってました.
611:& ◆iFNZlc1izc
03/12/29 11:51
>>607
ありがつー。直してきました!
612:デフォルトの名無しさん
03/12/31 17:13
初心者ですみません。教えてください。
wxWindowsをダウソしてインクルードファイルのパス
を通したのですが、wx/setup.hがないと叱られてサンプルが
コンパイルできません。
で、自作の空のsetup.hをつくってwxフォルダに入れてみたのですが
ダメなのですがどうすればいいでしょうか?
613:デフォルトの名無しさん
03/12/31 17:16
>>612
Windowsの検索機能でsetup.hを探しましたか?
614:デフォルトの名無しさん
03/12/31 17:19
>>613
レスありがとうございます。
探したのですが、#include wx/setup.h
になっていてwxにはないのです。
wx/unix/setup.hとかはあるのですが。。。
615:デフォルトの名無しさん
03/12/31 17:21
>>614
CategoryList - Let's wxWindows
URLリンク(dot-gray.s33.xrea.com)
616:614
03/12/31 17:55
>>615
レスどうもです。
今読んでいるのですが、後ほど報告させていただきますね。
ありがとうございます。。。
617:614
03/12/31 23:33
レス遅れてすみません。
うまくいきました。
wx/msw/setup.hをwxフォルダにコピーしたらいけました。
どうもです〜。。。
618:デフォルトの名無しさん
04/01/01 00:21
まさかinclude/wxにコピーしたのか?
もしそうだったら、そんな変なことせずに lib/msw???/ をインクルードパスに追加せーよ。
619:614
04/01/01 00:29
>まさかinclude/wxにコピーしたのか?
そうです(TT)
>もしそうだったら、そんな変なことせずに lib/msw???/ をインクルードパスに追加せーよ。
だってソース中で、#include wx/setup.h ってなってるんですもん(TT)
620:デフォルトの名無しさん
04/01/01 01:03
今年はwxWindowsがメジャー化しますように
621:デフォルトの名無しさん
04/01/01 02:38
>>619
>だってソース中で、#include wx/setup.h ってなってるんですもん(TT)
そりゃそうだよ。
lib/msw???/wx/setup.h
にビルドに対応したsetup.hが入ってるんだから。
lib/msw???/をインクルードパスに追加したら、#include <wx/setup.h>で
lib/msw???/wx/setup.hが読み込まれるだろ?
622:の
04/01/01 03:20
あけおめ
>619
VCでのインストール手順はここです(引越しました)。
URLリンク(www.fiercewinds.net)
VC使ってるなら参考にしてください。
623:デフォルトの名無しさん
04/01/01 06:09
wxmsw242d.dllのサイズが26.7Mもあるんですが
もっと小さくできませんか?
624:思兼 ◆l3iwkTImVo
04/01/01 06:33
>>623
デバッグ用だとそんなもん.リリース版ではもっと小さくなるから気にしない.
あと,VCのランタイムと違ってwxWindowsのランタイムはバージョンが同じでも
configureの仕方で中身が違ってくるから,リリース版ではDLLを使わずにスタティックで
ビルドする事をお勧めする.
625:デフォルトの名無しさん
04/01/01 07:48
>>624
こんなもんですか。なるほど。
公開する上ででかいdllをダウンロードするのは大変だと思ってたんですが
しょうがないですね。
ありがとうございました。
626:思兼 ◆l3iwkTImVo
04/01/01 15:41
>>625
wxmsw242d.dllはデバッグビルドされたdll.デバッグ情報が入ってるのでデカイ.
公開にはデバッグ情報の無いwxmsw242.dllの方を使おう.
できれば>>624に書いたようにスタティックで使うことをお勧めするけどね.
627:デフォルトの名無しさん
04/01/01 22:27
make -f makefile.g95 WXMAKINGDLL=1
でコンパイルするとwxmsw242d.dllができるのに対して、
wxmsw242.dllを作るにはどのようにコンパイルすればいいですか?
628:思兼 ◆l3iwkTImVo
04/01/01 22:32
>>627
bccは使って無いから知らないけど,多分
make -f makefile.g95 WXMAKINGDLL=1 FINAL=1
だと思う.
629:思兼 ◆l3iwkTImVo
04/01/01 22:36
あ,makefile.g95はgccか.多分コマンドは>>628で合ってる.
それでダメなら,cygwinかMinGWで
strip wxmsw242d.dll
でデバッグ情報を外せるはず.こっちだと最適化はされないけどね.
630:デフォルトの名無しさん
04/01/01 22:48
ありがとう。やってみます。
631:デフォルトの名無しさん
04/01/01 23:52
wxmsw242.dllできました。なんと4.85M!
これで「サイズデカッ!」っていわれずにすみそうです。
ありがとうございました。
632:デフォルトの名無しさん
04/01/02 00:18
サンプルのコンパイルがうまくいないのはなぜですか?
make -f makefile.g95 WXUSINGDLL=1
../../include/wx/chkconf.h:47:9: #error "wxUSE_DYNLIB_CLASS must be defined."
../../include/wx/chkconf.h:55:9: #error "wxUSE_FILESYSTEM must be defined."
../../include/wx/chkconf.h:68:9: #error "wxUSE_DYNAMIC_LOADER must be defined."
docview.cpp:212: error: invalid use of undefined type `class MyFrame'
docview.h:43: error: forward declaration of `class MyFrame'
make: *** [docview.o] Error 1
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5025日前に更新/338 KB
担当:undef