【C++】マイナーGUIツールキットat TECH
【C++】マイナーGUIツールキット - 暇つぶし2ch446:デフォルトの名無しさん
08/11/09 01:47:00
>>445

ググって、VirtualAllocこれが何かはわかった。
(呼び出し側プロセスの仮想アドレス空間に領域を確保)

が、そのほかの部分がわからない。

もうちょっと噛み砕いてお願いしたい。

447:デフォルトの名無しさん
08/11/09 02:04:48
とりあえず他でやって欲しい。

448:デフォルトの名無しさん
08/11/09 02:05:45
マイナーGUI(ラッパか・・・)作ってるからいいんじゃね?

449:デフォルトの名無しさん
08/11/09 02:27:18
>>446
君がどういうレベルかわからないと説明は難しい。
stdcallとcdeclは知っている?
clのABIはthiscallでECXにthisが入るのは知っている?

450:デフォルトの名無しさん
08/11/09 02:41:11
私のレベルは、簡単なものならAPIをガリガリでモノを作れる。
MFCは使ったことなし。

>stdcallとcdeclは知っている?
これは名前は知っている。

>clのABIはthiscallでECXにthisが入るのは知っている?
これは、知らない。
cl・・・コンパイラ?
ABI・・・アプリケーション・バイナリー・インターフェイス?
thiscall ≒ cdecl?
ECX・・・アセンブリは全く知らない

つまり、アセンブリを知らないとできないってこと?orz



451:デフォルトの名無しさん
08/11/09 03:14:18
>>450
アセンブリと言っても別に難しい知識は必要ない。
C言語が使えるんなら、レジスタとスタックの操作、
つまりmovとpushくらいは3分でわかるはず。

そして引数がスタックに積まれることが理解できれば良い。
そのスタックをどこで戻すかの違いがstdcallとcdecl。
インスタンスメソッドに対してはインスタンスが引数として扱われる。
それがcl(VC++のコンパイラ)ではECXで渡されるということ。
ちなみにgccだと第一引数としてスタックに積まれる。
こういう呼び出し規約のことをABIと呼ぶ。

なぜこんな知識が必要か?
それはインスタンスメソッドに対してコールバックさせるため。
実際にATLではこの方法が使われている。
ハッシュで済ませるんなら必要ないんだけど、
外部に委譲させるときに悩むことになる。

452:デフォルトの名無しさん
08/11/09 03:23:19
ふと疑問に思って昔作ったGUIクラスをひっぱりだして覗いてみたら

SetWindowLong( hWnd, GWL_USERDATA, (int)this );
みたいな感じのを使ってた。ハンドルと32bitデータを関連付けられるらしい。
で、Windowプロシージャで
GetWindowLong( hWnd, GWL_USERDATA );
を使って、ハンドルから対応クラスのポインタをひっぱってきて
Window別のイベントを処理してた。なつかすぃ。

453:デフォルトの名無しさん
08/11/09 03:33:48
>>452
その方法だとたとえばウィンドウ上でIMEの入力をしているときに
候補の上でホイール回したりしてIMEが作ったhWndが飛んでくると
不正なポインタに飛ばすことになって落ちるよ。
結局、登録されたhWndかどうかチェックするとハッシュになってしまう。

454:デフォルトの名無しさん
08/11/09 07:15:09
>>445
ウィンドウインスタンスごとにRegisterClassExって何か違うと思う。
ATLでやってるのは、StartWindowProcってのを登録しといて、
StartWindowProcの中でサンクつくって、次回以降はそれが呼ばれるようにする、っていう方法だったと思う。

>>453
俺はIME触ったこと無いから実際はどうなのか知らないんだけど、
そんなことがあったらそれIMEのバグじゃねーの?

455:デフォルトの名無しさん
08/11/09 09:30:36
同じくで、サンク作る方法は自分でも書いたことあったけども>>454の意味はちまちまわからんとこが。
ATLのソースか、エディタのGreenPadがそんな方法使ってたから見てみてもいいかも。
わかりにくい上に機械語直接埋め込むから試しに自分でラッパ書いてみる、って段階ではどうかと思うが、早いし。

ウィンドウハンドルとthisを関連づける方法はGWL_USERDATAの他にSetProp/GetPropAPIもある。

URLリンク(hp.vector.co.jp)
URLリンク(hilbert.elcom.nitech.ac.jp)

一応この辺がその辺の話。

456:デフォルトの名無しさん
08/11/09 10:50:11
454だけど、実際にATLがどうやってるのかは>>455のリンク先が詳しいのでそっち見てね。
あと、WndProcからthisを手に入れる方法を適当にまとめてみた。他にも方法あるかも。

どこにHWND↔thisの対応を入れておくか
・Set/GetWindowLongPtrを使う(GWLP_USERDATAを使うのか、cbWndExtraで確保しとくのか)
・Set/GetPropを使う(キーは文字列かATOMか)
・ハッシュテーブルを使う(排他制御はどうすんのか)
・サンクを使う(CPUのアーキテクチャごとにry)

どのタイミングでHWND↔thisを関連づけるか
・WM_CREATEで(thisはCreateWindowの最後の引数か、グローバル変数から)
・最初にWndProcが呼ばれた段階で(thisはグローバル変数から)
・WH_CBTとかWH_CALLWNDPROCフックで(thisはグローバル変数から)
・そもそもWM_CREATEイラネ、CreateWindowを呼んだ後で
ただしグローバル変数にはTLSも含む

457:デフォルトの名無しさん
08/11/09 12:24:53
いくつか意見がでてるけど、個人的にはハッシュが一番楽じゃない?と思う。

std::map<HWND,[基底クラスのポインタ]> g_controlList;

LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  基底クラス *p基底クラス = g_controlList[ hWnd ];

  // コントロール別イベント処理
  p基底クラス->OnEvent(msg, wParam, lParam);
}

最近C++書いてないんで色々間違ってそうだけど、キモはこんな感じかと。
ここは、より良い方法がでてきたら差し替えることにして
次へ進んだ方が本人の為になるし、スレ的にも面白いw

458:デフォルトの名無しさん
08/11/09 13:50:14
>>454
インスタンスごとにクラスを登録しているのはWindows Formsだね。

459:デフォルトの名無しさん
08/11/09 18:40:07
この流れを見てるとこのスレの住人はやっぱり結構自分ラッパを書いてしまっているんだなあと感じて親近感がw
しかし>>450は付いてきているのか。周りが凄い盛り上がってしまってるけど。

460:デフォルトの名無しさん
08/11/09 21:38:28
>>450は単語一個一個調べたり、根が真面目そうなんで、
今、大量の情報がドカドカ出てきたので知らん部分をググってる最中じゃない?
期待がプレッシャーにならない程度にマターリ待つのが良いかと。

俺もラッパ作ちゃった1人なんだが、結局デザイナーツールの作成が面倒で
活用には至らなかった。
その辺までしっかり作った人っているの?

461:デフォルトの名無しさん
08/11/10 00:28:53
なぁ、>445 の方法って、ネットで探しても情報ないのな。
ATLのソース読んでみようと思ったけど、どこから読んだらいいのかわかんねw

>450 は初心者っぽいしきつい気がするのは俺だけか?


そういや、昔、CマガでGUIライブラリを作るってのがあったが
あれは参考にならないか?
もう、手に入らないけど。

462:デフォルトの名無しさん
08/11/10 02:05:47
>>460
> その辺までしっかり作った人っているの?

WideStudioってきもいけど凄いよね

463:デフォルトの名無しさん
08/11/10 06:11:25
>>461
ATLについては>>455
>>445の言ってるのはATLじゃなくてWindows Formsのことらしい

464:デフォルトの名無しさん
08/11/10 07:58:51
『組み込みGUI(ウィンドウ・システム)環境の設計と実装』って本
読んだことある人います? おもしろい?

465:デフォルトの名無しさん
08/11/10 08:11:08
>>463
>455は手軽にthunk作るやり方。
ATLはCDynamicStdCallThunkが__AllocStdCallThunkの確保した領域に機械語つっこんでるぞ。

466:デフォルトの名無しさん
08/11/10 13:35:58
>>450
適当にサンクを実装してみた。良かったら参考にしてみて。
URLリンク(www.yourfilehost.com)

>>451
stdcallとthiscallの変換があるから単純にECXに代入するだけじゃダメだぞ?
まあそれでも動くけどさ、ちょっと気持ち悪いよね。

467:デフォルトの名無しさん
08/11/10 15:47:24
>>464
フレームバッファ直描きでウィンドウシステムを作る本だよ。
OSを作ったりとか、LinuxでXを使わないGUIを作ったりとか、
そういうことに興味がある人には面白いと思う。
Windowsアプリを作るのにはほとんど参考にならない。

468:デフォルトの名無しさん
08/11/10 21:28:35
一つずつ

>>451

>つまりmovとpushくらいは3分でわかるはず。
mov・・・ジスタやメモリに、データの転送を行う
push・・・スタックにデータを積む

>そのスタックをどこで戻すかの違いがstdcallとcdecl。
このことでいいのかな?
URLリンク(www.ne.jp)

>ECX
レジストリと
こんな場所がある、程度でいいのかな?



469:デフォルトの名無しさん
08/11/10 21:32:35
>>452
>>453
>>454
調べたらこんな頁を発見
URLリンク(qwerty.s2.xrea.com)

サンク(thunk)って、調べても情報がないな。


470:デフォルトの名無しさん
08/11/10 21:34:28
>>455

いま、ここまで

参照先のリンクの内容を理解するのに苦労している。
正直、難しい。

471:デフォルトの名無しさん
08/11/10 22:41:30
>>469
wikipediaにあったぞ
URLリンク(en.wikipedia.org)

472:デフォルトの名無しさん
08/11/11 17:08:05
WindowsXP SP2のDEPでATLのThunkが問題になってたような気がするんだけど、
あれは何でなんだろ?

473:デフォルトの名無しさん
08/11/11 17:22:32
>>472
ウィルス等がバッファオーバーフローでヒープに不正コードを埋め込むことの対策として
ヒープのコードを実行できなくしたのがDEP。

ATLではサンクをHeapAlloc領域でやっていたため引っ掛かることになった。
今のATLはVirtualAllocでPAGE_EXECUTE_READWRITEで確保するため問題ない。

474:472
08/11/11 20:27:35
>>473
なるほど、わかりやすい説明サンクスです。

475:デフォルトの名無しさん
08/11/13 03:52:36
おまえら!
言いたいのをガマンしてるなら、代わり俺が言ってやるよ!
あくまでもおまえらの代弁だからな!俺が言いたいワケじゃないんだからな!





なるほど、わかりやすい説明Thunkです。

476:デフォルトの名無しさん
08/11/13 07:05:21
さみぃw

477:デフォルトの名無しさん
08/11/17 23:11:46
こんな方法どうやって勉強しました?

478:デフォルトの名無しさん
08/11/18 22:33:44
>>477
Windows 3.1の頃(15年前)からプログラム作ってたら嫌でも身に付く

479:デフォルトの名無しさん
08/11/19 18:52:55
class window
{
public:
 static window *m_this;
 static LRESULT CALLBACK StartWindowProc(HWND, UINT, WPARAM, LPARAM); //スタートアップ
 static LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM); //本命

 HWND SetHandle(HWND hwnd);//ウインドウハンドルを設定する
 void Create();//ここでクリティカルセクションを設定してCreateWindowを呼ぶ
}

window *m_this;

LRESULT CALLBACK window::StartWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 window *pThis = window::m_this;
 window::m_this = NULL;
 //ここでクリティカルセクションを取り除く
 ::SetProp(hwnd, _T("THISCLASS"), (HANDLE)pThis);
 pThis->SetHandle(hwnd);
 ::SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG)window::WindowProc);
 return window::WindowProc(hwnd, msg, wParam, lParam);
}

かなりふざけた方法だけど...
俺はこんな感じでやってる...


480:デフォルトの名無しさん
08/12/01 20:53:23
何となく、自分も昔作ったGUIを晒してみようとサンプル動かしてみたら、
リストビューを拡張して作ろうとしたらしいGridViewがいきなりバグってた。
出直してきます。orz

481:デフォルトの名無しさん
09/01/12 01:32:46
>>441はもうやめちゃったのかな?
こんなのあったよ
URLリンク(www.binzume.net)

482:デフォルトの名無しさん
09/01/28 13:05:32
保守あげ

483:デフォルトの名無しさん
09/01/31 16:42:03
ATLを使うと勝手に各アーキテクチャごとにthunk作ってくれる。
使い方は↓のようなかんじです。

class HogeWindow {
 ATL::CStdCallThunk thunk;
 HWND hWnd;
 static LRESULT CALLBACK redirect(T* object, UINT msg, WPARAM wParam, LPARAM lParam) {
  return object->WindowProcedure(msg, wParam, lParam);
 }
 LRESULT WindowProcedure(UINT m, WPARAM w, LPARAM l) {
  (処理)
 }
 HogeWindow() {
  (HWNDを作る)
  thunk.Init((DWORD_PTR)redirect, this);
  SetWindowLongPtr(hWnd, GWL_WNDPROC, (LONG_PTR)thunk.GetCodeAddress());
 }
};


484:デフォルトの名無しさん
09/03/21 03:51:43
SOL9をVC++2008SP1で試してみた。

>c:\usr\include\sol\window.h(68) : error C2664: 'GetClassNameW' : 2 番目の引数を 'char *' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
(面倒だから全部は乗せない)

こんなエラーが大量に出てきた。

これって、VC++2008SP1では使えないのか?



485:デフォルトの名無しさん
09/03/21 07:50:26
>>484
unicodeを使わない設定にしてみたら?


486:デフォルトの名無しさん
09/03/22 02:27:38
>>485

サンクス

コンパイルできた

487:デフォルトの名無しさん
09/03/22 02:29:43
SOL9って何?
Solaris9??

488:デフォルトの名無しさん
09/03/22 02:34:23
>>487

URLリンク(home.att.ne.jp)

489:デフォルトの名無しさん
09/03/22 15:53:22
使いやすいのない?

490:デフォルトの名無しさん
09/05/20 19:07:36
ほしゅ

491:デフォルトの名無しさん
09/07/10 06:59:47
Qt LGPL版が出ました。

492:デフォルトの名無しさん
09/07/19 07:23:32
gtkmm一択

493:デフォルトの名無しさん
09/07/19 13:17:11
>>491
10 年前にその選択をしてればな…

494:デフォルトの名無しさん
09/08/04 21:50:27
マイナー用のこのスレで聞くのもどうかと思うけど、
OSSプロジェクトで一番使われているマルチプラットフォーム対応の
C++ GUIツールキットってどれでしょうか?

wxWidgetsとQtはどっちの方が使われてるのかな?

495:デフォルトの名無しさん
09/08/08 08:10:43
fltk

496:デフォルトの名無しさん
09/08/09 13:16:20
今からクロス開発するならQtのほうがよさげ。

497:デフォルトの名無しさん
09/08/09 13:31:27
>>496
できれば理由も聞きたい

498:デフォルトの名無しさん
09/08/09 14:18:48
Qtのほうが作りやすい。API綺麗だし開発ツールも充実してるから。この辺さすが商用は強い。

wxは古臭さ複雑さを隠し切れんな。元がMFCを参考にしているからな。もう限界だろ。

個人的にQPLか高い商用ライセンスがキライだっただけで
今QtをLGPLで使えるなら選択しない理由はあまりないな。

wxの強みはドマイナーなOS環境まで考慮されてることだけど、別にそこまで使わんしw

499:デフォルトの名無しさん
09/08/09 19:49:08
Qtは微妙な独自色がなければ最高なのに。qmakeとかLinguistとかWindowsのUIとか。

500:デフォルトの名無しさん
09/08/14 20:53:50
500

501:デフォルトの名無しさん
09/09/05 08:41:35
Lily C++ GUI Library
URLリンク(kengolab.net)
windows専用らしい

502:デフォルトの名無しさん
09/09/09 10:32:56
>windows専用らしい

イミネーwww

503:デフォルトの名無しさん
09/09/09 17:37:53
仮にただのMFCラッパーだとしても、使い勝手がよければそこに意味はあるはずだ

あとこのスレって別にマルチプラットフォーム限定ってわけでもないっしょ?

504:デフォルトの名無しさん
09/09/09 20:51:20
ぺたぺた貼れるなら、使い勝手うんぬん言えるが、できないじゃんwwwww

505:デフォルトの名無しさん
09/09/12 16:58:33
ペロッ
この味は・・・PHPer!

506:本田
09/09/26 17:53:33
Object Windows Library
Inprise/Borland
URLリンク(cc.codegear.com)
This release of the Object Windows Library is based on the OWL 5.4
release and is denoted as OWL 5.5.
It has been ported to Borland C++Builder 5 by Yura Bidus, author of OWLNExt.
It includes source code and debug and release libraries of, OWL, BIDS and OCF.

507:本田
09/09/27 12:40:46
>>506
~ OWLNext project home ~
URLリンク(owlnext.sourceforge.net)
~ About OWLNext ~
URLリンク(owlnext.sourceforge.net)
Advantages of using OWLNext:

* OWLNext is an object-oriented framework, built on top of the Windows API without adding much overhead.
* OWLNext is pure C++ library, which does not use any vendor- or compiler- specific extensions.
* OWLNext fully supports developing Unicode applications.
* OLE, OCX and ActiveX support (server and consumer)
* OWLNext can be used with wide range of C++ compilers. Currently it is tested with
o CodeGear Developer Studio 2007 and 2009
o Borland Developer Studio 2006
o Borland C++ Builder 6.0
o Borland Free C++ Compiler 5.5
o Borland C++ 5.01/5.02
o Microsoft Visual C++ 2003, 2005, 2008
o Microsoft Visual C++ 6.0
Also in the past it has been working with Borland C++ Builder 1.0-5.0, Microsoft Visual C++ 5.0 and GCC and has been ported to Linux using WINE
* OWLNext offers easy upgrade path for porting legacy OWL applications to modern compilers and operating systems.
* OWLNext is open-source project, it's based on contributions and directions from it's community


508:デフォルトの名無しさん
09/09/27 13:03:16
何だ、クロスプラットフォームじゃないのか…

509:デフォルトの名無しさん
09/09/27 13:47:44
クロスプラットフォームとかいらんだろ

510:デフォルトの名無しさん
09/09/27 16:06:52
クロスプラットフォームじゃなかったら何の意味が?

511:デフォルトの名無しさん
09/09/27 20:08:34
WINEで動けば充分
> has been ported to Linux using WINE

512:本田
09/09/27 20:39:01
>>508
Object Windows Library
URLリンク(en.wikipedia.org)

In 1993 Borland launched Borland C++ 2.0 for OS/2 which included a version of OWL 2.0.
OWL 2.0 used BIDS, the newer template library for 'container' or 'class library'.

In January 1994 Borland launched Borland C++ 4.0 for Windows which also included OWL 2.0.
It added Doc/View support, VBX controls, OLE. Win16, Win32s and Win32 was supported
(Windows 95, the Win32 successor of Windows 3.x appeared in August 1995).

Late in 1994, Novell CEO Raymond Noorda resigned.
Novell expansion plans were reconsidered,
AppWare development was stopped and so was OWL for AppWare.
In 1995 a group of original team members bought AppBuilder.
In the same year, Software UNO (www.uno.com) offered a commercial port for OWL 2.0,
to several platforms:
AIX 3.2.5, DEC Alpha OSF/1, HP-UX 9.03, Linux 1.2, Solaris 2.x, Sun OS 4.1.x, and SVR4 fox x86,
it was called WM_MOTIF.

513:デフォルトの名無しさん
09/09/27 20:46:20
>>512
引用するなら翻訳しろカス

514:デフォルトの名無しさん
09/09/27 20:46:37
10年以上昔の話とか、WINEでポーティングされているとか…

515:本田
09/09/27 20:58:13
>>514
【レビュー】
Linux版一太郎と新しいATOKを試す
URLリンク(journal.mycom.co.jp)
Windows版そのままの「一太郎 for Linux」
一太郎 for Linuxは、Win32 APIと互換のバイナリ実行環境をLinux上に実現する「WINE」を利用して動作する。
LinuxネイティブのELFバイナリではなく、
Windows PEバイナリの形で提供されるWindows用アプリケーションだ。
付属のインストーラ(シェルスクリプト)では隠蔽されていたが、
wineコマンドから直接インストーラ(SETUP.EXE)を起動したところ、
そのまま「一太郎2004のセットアップ」と題されたウィザード形式のダイアログが表示された。

516:デフォルトの名無しさん
09/09/27 21:00:40
4年以上昔の話とか、WINEでポーティングされているとか…

517:デフォルトの名無しさん
09/09/27 21:12:41
>>515
それもどうかと思うけど、完成品とライブラリを一緒くたにするとか…

518:デフォルトの名無しさん
09/10/02 16:39:07
Win32++
URLリンク(sourceforge.net)


519:デフォルトの名無しさん
09/10/23 12:27:33
Win32++について「GUIがむずかしすぎる」スレから引っ越してきたヨ

>66 名前: 60 Mail: sage 投稿日: 2009/10/21(水) 14:38:51
>Win32++の翻訳文書を公開した。
>
>・Win32++概要
> URLリンク(www.h6.dion.ne.jp)
>
>Windowsプログラミングは未経験なので、不適切だったり誤っている箇所があると思う。
>特に、リバーコントロール(Rebar Control)/メッセージの反射(Message Reflection)/
>CWndオブジェクト/WndProc関数に関連した部分は、無理矢理に訳した感がある。
>Win32 APIに詳しい住人さん達からのツッコミに期待。


520:デフォルトの名無しさん
09/10/26 07:36:35
>>519
なんか色々と乙。

wxばっか使っているのだけどちょっとこっちも使ってみようか…

ついでに保守あげ。

521:デフォルトの名無しさん
09/10/26 14:34:43
sage

522:デフォルトの名無しさん
09/11/03 18:15:47
GUI比較サイト
URLリンク(www.atai.org)

世の中にはたくさんのGUI Frameworkがあるね。

523:デフォルトの名無しさん
09/11/03 18:21:49
>>522
ちょっと情報が古い。

Qtとか、LGPLになったのにそうなっていない。

524:デフォルトの名無しさん
09/11/03 18:24:12
>>522
Last updated May 13, 2007

525:本田
09/11/04 00:38:57
>>507
OWL/OWLNext
URLリンク(www.jahanshahi.ws)

526:デフォルトの名無しさん
09/11/04 00:51:02
C++BuilderみたいにGUIでパーツを配置していけるライブラリって
何がありますか?

527:デフォルトの名無しさん
09/11/04 18:33:28
>>526
あなたが求めているのは,単なるGUIデザイナじゃなくて,IDEと一体になったいわゆるRADツールだよね?
(例えばフォームの上にボタンをGUIデザイナ上で配置しておいてダブルクリックすると,ボタンをクリックした
時のイベントルーチンのスケルトンが自動的に作成されて,後は中身を書けばいいってヤツ)

それだとWindows上のC++で俺の知ってる限りだと,QtとwxWidgets(両方ともマイナーじゃないけど)。
QtならQt CreatorというRADツールがあるし,wxWidgetsならCode::Blocks,DialogBlocks(有料),wxDev-C++,
VisualWxとRADツールはいろいろある。

WideStudioって日本製のもあるけど,デバッグがIDEのエディタ上ではできなくて(そもそもエディタは内蔵してなくて
外部エディタを使う),コマンドラインデバッガでやるってのが痛い。
あとUltimate++ってのもインストールしてみたけど,使い方がさっぱりわからなかった。
俺みたいな短気なアホには向いてないようだ。

どれがいいかは自分で評価するしかないと思うけど,俺はQt+Qt Creatorか,wxWidgets+Code::Blocksが
良いと思う。それぞれ別スレがあるので覗いてみたら?

俺もC++ Builderの将来に不安を抱いてて,いろいろ評価してるから気持ちはわかるなぁ。

528:デフォルトの名無しさん
09/11/04 20:17:00
GTK+のGladeは?

529:デフォルトの名無しさん
09/11/04 23:30:39
>>528
GTK+はまだ試してないんだけど、GladeってRADツールなの?
いろんなHPで見る限り、ただのGUIデザイナにしか見えないんだけど。

そりゃコードは吐くだろうけど、デバッガでデバッグする等の本格的なIDEの機能は持ってるのかな?
元のGUIのデザイン変更したら、以前に自分が書いたコードを壊さずにソースコードに反映してくれる?

それらができるんだったら、評価してみたいと思うんだけど。
それとC++じゃなくてCだと言う話なので、ちょっと尻込みしてる。

>>526は「C++ Builderみたいに」と言ってるわけだし....

530:デフォルトの名無しさん
09/11/05 00:35:35
>>527
詳しい情報ありがとうございます。
それぞれのスレを覗いてみます。

531:デフォルトの名無しさん
09/11/05 07:57:30
>>529
GTK+はC言語専用じゃないよ。
いろんな言語のバインディングがあって、C++用のもの(gtkmm)もある。

と言いつつ、GTK+とかGladeは興味があるだけでまだやってないから
GUIデザイナ/RADのことはわかんない。スマソ

532:デフォルトの名無しさん
09/11/05 13:27:42
>>529
wxWidgets (wxPython) + XRCed

533:527
09/11/05 14:48:06
>>532
wxPython+XRcedは面白そう。小さなアプリならいいかもね(何気にPython好きだったりする俺)。
出来上がったらpy2exeで実行ファイルにしてしまう手もありそうだし。

ただXRCedってXRCを出力するからC++にも使えるけど、C++ではRADツールにはなり
得ないんじゃないの? もう一つC::BみたいなIDEを組み合わせると似たようなことは出来るのかな...



534:デフォルトの名無しさん
09/11/05 15:26:07
>>533
CodeBlocks + wxWidgets + XRCed

535:からかわれてる?
09/11/05 16:05:41
>>534
だからそう書いたじゃん...できるってことねw

536:デフォルトの名無しさん
09/11/05 17:42:30
GTKの事情は知らんけど、フツーはRADの吐いたコードは手でいじらず、
継承するなりラップするなりで、実装とデザインを分離するのでわ。

537:デフォルトの名無しさん
09/11/05 18:35:20
そういうアプローチを取るツールもあるけど(Code::Blocks+wxFormBuilderとか),
一般的にRADツールといったら,実装とデザインを分離せず,マニュアルで書いたコード
を壊さずにGUIのデザインとコードの実装をシームレスにできるものを指すと思ってるんだが。

Visual Basic,C++ Builder/Delphi,VC++ .NET,wxDev-C++,CodeBlocks+wxSmith(内蔵),
Qt+Qt Creator...みんなそうだよ。
そうじゃないヤツはIDE+GUIデザイナだと思ってる。

なんか全然マイナーなGUIツールキットの話になってないな。
つーか,RADツールまで出来ると,メジャーになっていくんだろうな。

538:デフォルトの名無しさん
09/11/05 19:21:27
マイナーGUIツールキットって、Wikipediaにも載ってないようなものじゃないの?

539:デフォルトの名無しさん
09/11/05 20:59:54
eric4

540:デフォルトの名無しさん
09/11/05 22:54:33
マイナー杉るだろ……

541:デフォルトの名無しさん
09/11/06 01:17:20
むしろ未だにUIデザイナの吐いたコード直接弄るのタイプのはレガシーな感じがするんだが。
まあ一応GTK+系でもMonoDevelop + Stetic GUI Designerがその「RAD系」だった希ガス。

542:デフォルトの名無しさん
09/11/06 08:26:48
まぁ,どう思おうと勝手だが,歴史的にみるとそうじゃないな。

MicrosoftもVC++のMFCではできなかったものが,VC++ .NETやC#でできるようになったし,
QtなんかQt Designer(GUIデザイナ)しかなかったんだが,Qt Creatorが生まれたのは
今年のこと。

GUIデザイナの吐いたコードを直接弄ると,後でGUI変更したときにせっかく書いたコードが
上書きされると思ってるんじゃないの?

543:デフォルトの名無しさん
09/11/06 08:51:40
541じゃないけど
ボタンがあってそれのクリック時のコードを書いてたとき
そのボタンそのものを削除したらコードはどうなるの?

544:デフォルトの名無しさん
09/11/06 09:51:47
全部試したわけじゃないけど,少なくともC++ Builder,Qt Creator,Code::Blocks(wxSmith)だと
ボタンをクリックしたときのイベントハンドラの中味を記述した状態でボタンを削除しても,
コードはそのまま残るよ。ヘッダーファイル上では,ボタンのクラスのインスタンスポインタは
消えるけど,イベントハンドラ関数の宣言はそのまま残ってるし,.cppファイル上での
関数の実装もそのまま。

例えばボタンの種類を変えたいとき(文字だけのボタンからアイコンつきのボタンに代えた時)など
に配慮してるんだと思う。後で交換したボタンのクリックイベントルーチンとしてそのまま使える
ように。


545:本田
09/11/12 06:45:42
>>525
OWL/OWLNext (Programming)
URLリンク(www.luigibianchi.com)

546:デフォルトの名無しさん
09/11/20 00:50:23
URLリンク(www.assembla.com)

547:デフォルトの名無しさん
09/11/28 20:19:35
Visual Studio 2005 で使えて、swing のような感じでお手軽にGUI を作成できるライブラリィってないでしょうか?

548:デフォルトの名無しさん
09/11/30 04:34:12
.NET Framework

549:デフォルトの名無しさん
09/12/28 20:41:11
>>547
俺はVC8でwxWidgets使ってるよ。サイザーとか手軽だよ

550:デフォルトの名無しさん
10/01/08 16:01:11
保守

551:デフォルトの名無しさん
10/02/16 18:44:53
最近のFLTKは1.3の更新ばっかりで2.0は停滞しているなぁ
大きな問題に直面してるわけではないが
成熟もしていないのが・・・

552:デフォルトの名無しさん
10/03/06 16:18:00
fltk2はフォーラムでも「過去のバージョン」扱いだな
trunkなのにbranchとはこれいかに

1.3に移行するか
それとも1.3の修正を2.0にバックポート(?)するか
あるいはもう別のツールキットに乗り換えるか

553:デフォルトの名無しさん
10/03/07 06:14:16
うがー
fltk1.3をubuntu9.10で使おうとしたら日本語が入力できん。
ファイルから読み込んで表示はできるが、
ibus-anthyから入力しようとすると文字化けする。

せっかくパッケージにある1.1じゃなくて1.3を入れたのに。。。。

554:デフォルトの名無しさん
10/03/07 17:11:08
>>553
ibusがXIMで動いてないんじゃないかなぁ?
ibus-daemon -rdx
やってみてもダメ?

555:553
10/03/07 19:44:08
>>554
xtermにもfirefoxにも入力できるから、ximは動いてると思ってた。
やってみたけど駄目だった。

日本語入力がonにできないんじゃなくて文字化けするってのが、
どういう状況なのかわからない。
XIMプロトコルでは文字コードどうなってるの?

ibusが悪いのかとscim入れてそっちを使ってみたけど駄目。

fltk2.0いれてみたらdemoアプリでは入力できた。
が、APIが全然違うので目的のコードを動かすには相当な変更が必要そうだ。

fltk2.0 と fltk1.3 で、どこが違うのか比較するかな。

556:553
10/03/07 21:00:14
printfしてみたら、そもそもXから来る文字コードがUTF-8じゃなさげ。
setlocale関係かなと思ったけど、差はないっぽいな。うーむ。

557:553
10/03/09 23:53:34
fltk2.0も環境によっては入力できないみたい。
あんまり時間をかけられないので、俺は諦めます。
誰か解決してくれるとうれしいなぁ。

Fox-toolkitは日本語が入力できるんだろうか?

558:デフォルトの名無しさん
10/04/21 02:12:07
URLリンク(svn.boost.org)


559:デフォルトの名無しさん
10/05/15 00:10:23
質問です。
自作のプログラミング言語処理系に組み込むのに向いているGUIツールキットを探しています。
ただ、その言語処理系の制限上、コールバックをする事ができません。
つまり、[その言語]->[C or C++]->[その言語]という呼び出しは行えません。
この問題を回避できるツールキットをご存知の方はいらっしゃいませんか?


560:デフォルトの名無しさん
10/05/16 01:25:01
どういう使い方をしたいのかがさっぱり判らん

561:デフォルトの名無しさん
10/05/16 19:20:55
イベントループをその言語から呼んではいかんということだな。
その言語はイベントループ手前で一旦終了、
Cの方でイベントループを呼び出す。
コールバックは毎回君言語を実行する形。とするのかな。

562:559
10/05/19 23:12:46
一度終了して、後から呼ぶのも(不可能ではないですが)難しいです。
継続をサポートしているため、559の制限が発生していて、
一度終了し、イベント内で再開した場合も、同様に継続をサポートできません。

Windowsに話を絞ると、Windowsの標準メッセージループは次のようなのだと思います。
while (GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
この3つの関数呼び出しをまとめた、ProcessMessage関数を作り、
bool ProcessMessage(){
if(!GetMessage(&msg,NULL,0,0)) return false;
TranslateMessage(&msg); DispatchMessage(&msg); return true;
}
これを私の言語から、
while ProcessMessage() do
hogehoge()
end
のように使えば動くと思います。この場合、C側のイベントハンドラは発生したイベントをQueueに入れて、俺言語の中でそれを取り出して使う事になると思います。
Windows以外にも対応したいので、このような形を取れる、ツールキットはないでしょうか?

563:デフォルトの名無しさん
10/05/21 14:59:44
>>559
もし実装言語がCなら、標準ライブラリのsetjmp/longjmpを使って、
インタプリタ側とコールバック関数側をコルーチンの形式で
交互にジャンプさせることで、擬似的な並行処理を実現するんだろうね。
もちろんジャンプバッファ(jmp_buf)は2個必要になる。

Rubyのスレッド(平行処理)も、インタプリタ内部ではスレッド単位に
ジャンプバッファを持って、スレッドのコンテキストを管理してる。
以下は、RHG(Ruby Hacking Guide)の該当する章へのリンク。
URLリンク(www.loveruby.net)

もし仮想マシンで実行しているなら、(setjmp/longjmpに相当する)
実行コンテキストを保存/復帰させる命令を仮想マシンの仕様に追加する。
というか、開発中の言語処理系が「ホントウ」に継続(countinuation)を
サポートしているなら、継続で互いのコンテキストを切り替え続ければいいはずなんだが....

564:559
10/05/21 23:22:16
>>563
いやいやいや。継続をサポートしてるから駄目なんだよ。 てか、スレッドと継続を混ざってない?
[その言語part1]->[C or C++]->[その言語part2]
って呼び出しをしたとして、[その言語part2]から[その言語part1]に継続でジャンプすると、C 部分の関数は入って2度と出なくなる。
その時はデストラクタも呼ばれないし、それ以外もマズい事になる所がある。

で、今日、tcl/tkについて調べたら、Tk_MainLoop関数は、
void
Tk_MainLoop(void)
{
 while (Tk_GetNumMainWindows() > 0) {
  Tcl_DoOneEvent(0);
 }
}
ってなってた。
この関数を俺言語に移植して、イベントキューを作ればうまくいくかな?

565:デフォルトの名無しさん
10/05/22 02:27:44
中途半端な代物で「継続をサポートしてる」と名乗るあつかましさがそもそもの元凶では。

566:559
10/05/22 02:49:17
>>565
うぐう。
継続のサポート自体は中途半端じゃないよ。俺言語で書かれたプログラム内で閉じてればフルに継続が使えるから。
Javaはメモリ破壊に対して安全だけど、Cで書かれた拡張ライブラリにバグがあったらメモリは破壊される、みたいな物だと思いねぇ。

その言語用のライブラリをCで作るときの制限の大小の話はあるかもしれないけど、
Emacs lispだと、GCがある事を考慮に入れてプログラムを書かないといけないが、Rubyだといらないとか、
継続にしたって、Luaとかは俺言語と同じ制限がある、Rubyとかは努力して回避してる。
ただ、Rubyとかが使ってる方法は黒魔術なので、環境依存する。違うプロセッサで動くとは限らない。
もちろん、努力が足りないと言われればそれ以外ないけど。


567:デフォルトの名無しさん
10/05/22 12:31:34
うぐぅとか聞いたの10年ぶりぐらいだ

568:デフォルトの名無しさん
10/05/22 13:49:15
> 継続のサポート自体は中途半端じゃないよ。俺言語で書かれたプログラム内で閉じてればフルに継続が使えるから。

俺言語で閉じた利用だけを想定するならそういえるけど
しかし作者自身がその想定から外れた前提で質問した上で
そう言い張ってもなー

> Javaはメモリ破壊に対して安全だけど、Cで書かれた拡張ライブラリにバグがあったらメモリは破壊される、みたいな物だと思いねぇ。

それは違うだろ
たとえるならJNIでいうグローバル参照がないとかだな

> 継続にしたって、Luaとかは俺言語と同じ制限がある、Rubyとかは努力して回避してる。

LuaとRubyしか知らないの?

つか、この文を書けるなら当然LuaのGUIバインディングは調査済だと思うが
その結果はどうだったのさ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch