とにかくdat落ち必死なこの話題をどうかひとつ。
関連スレ:
【GUIライブラリ】wxWindowsでのひょーん
http://pc2.2ch.net/test/read.cgi/tech/1052186697/
探検
【C++】マイナーGUIツールキット
■ このスレッドは過去ログ倉庫に格納されています
NGNG
385デフォルトの名無しさん
2007/11/12(月) 19:57:14 Turbo C++ Explorerじゃ無理か。
386デフォルトの名無しさん
2007/12/12(水) 11:25:03 保守したほうがいい?
387デフォルトの名無しさん
2007/12/12(水) 23:03:56 頼んだ
388デフォルトの名無しさん
2007/12/13(木) 01:26:15 お前らの連携のよさと言ったら!
389デフォルトの名無しさん
2008/01/14(月) 12:44:24 めも
ttp://www.thefreecountry.com/sourcecode/gui.shtml
ttp://www.thefreecountry.com/sourcecode/gui.shtml
390デフォルトの名無しさん
2008/01/20(日) 23:06:16 どなたかOMGUIのサイトの行方を知りませんか?
ttp://www.omgui.org/
(参考:ttp://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostGUI)
昨年夏頃までは見れてたように思うのに、今はドメイン売り出し中って…。
ttp://www.omgui.org/
(参考:ttp://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostGUI)
昨年夏頃までは見れてたように思うのに、今はドメイン売り出し中って…。
391デフォルトの名無しさん
2008/01/22(火) 02:21:04 >>390
ttp://cia.vc/stats/project/omgui
ttp://cia.vc/stats/project/omgui
393デフォルトの名無しさん
2008/02/04(月) 20:09:28 ttp://dclib.sourceforge.net/api.html#gui_widgets
394デフォルトの名無しさん
2008/02/04(月) 23:33:39 こんな感じかあ
ttp://www.geocities.jp/mocchi_2003/soft_readme/dlib_patch/dlib_patch_sample1.png
ttp://www.geocities.jp/mocchi_2003/soft_readme/dlib_patch/dlib_patch_sample1.png
395デフォルトの名無しさん
2008/02/27(水) 23:42:49 マイナーじゃないけど
ttp://www.tcl.tk のtk見た目がだいぶましになったな
tclに依存してなければいいのに
ttp://www.tcl.tk のtk見た目がだいぶましになったな
tclに依存してなければいいのに
396デフォルトの名無しさん
2008/02/28(木) 05:14:11 スクリーンショットにたどり着きにくい
ttp://wiki.tcl.tk/13636
これか
ttp://wiki.tcl.tk/13636
これか
397デフォルトの名無しさん
2008/03/26(水) 21:10:53 FOX-Toolkitって使っている方いらっしゃいますか?
398デフォルトの名無しさん
2008/03/27(木) 11:17:17 使ってますよ。OpenGLも使ってます。
399デフォルトの名無しさん
2008/03/27(木) 22:39:58 このスレの住人なら知っていますね、あの糞開発ツールのことを
・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる
糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。
・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
バグレポートなどしてはいけません。改善要求などもってのほかです。
あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
なんて話が出たら力強く机を叩き、会議室を出ましょう。
あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。
糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる
糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。
・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
バグレポートなどしてはいけません。改善要求などもってのほかです。
あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
なんて話が出たら力強く机を叩き、会議室を出ましょう。
あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。
糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
400デフォルトの名無しさん
2008/05/11(日) 17:40:10 trixul
ttp://trixul.com/
使ったことはないけど、本屋で少し立ち読みしたら結構面白そうだったので。
ttp://trixul.com/
使ったことはないけど、本屋で少し立ち読みしたら結構面白そうだったので。
401デフォルトの名無しさん
2008/05/11(日) 22:31:26 >>400 書名キボンヌ
402デフォルトの名無しさん
2008/05/11(日) 22:31:46 XUL と違うんだね
403400
2008/05/12(月) 01:56:52 書名は「Cross-Platform Development in C++」
ttp://www.amazon.co.jp/Cross-Platform-Development-C%2B%2B-Building-Applications/dp/032124642X/ref=sr_1_1?ie=UTF8&s=english-books&qid=1210522918&sr=1-1
XULと.NETのWindowsForms(XAML?)の概念を組み合わせてJavaScript(SpiderMonkey)でイベントハンドリングできるようなことが書いてあったような気がする。
でもSourceForge(ttp://sourceforge.net/projects/trixul/)の方を見た感じではまだまだ発展途上なのかな。
ttp://www.amazon.co.jp/Cross-Platform-Development-C%2B%2B-Building-Applications/dp/032124642X/ref=sr_1_1?ie=UTF8&s=english-books&qid=1210522918&sr=1-1
XULと.NETのWindowsForms(XAML?)の概念を組み合わせてJavaScript(SpiderMonkey)でイベントハンドリングできるようなことが書いてあったような気がする。
でもSourceForge(ttp://sourceforge.net/projects/trixul/)の方を見た感じではまだまだ発展途上なのかな。
404デフォルトの名無しさん
2008/05/14(水) 08:19:51 Fox-ToolkitってIME制御ってできない?
コピペで漢字入力はできるんだけどね。
コピペで漢字入力はできるんだけどね。
405デフォルトの名無しさん
2008/05/22(木) 12:20:00 FoxToolkitの1.7の最新でIMEの制御もできて漢字入力もできるっぽい。
406本田
2008/05/25(日) 06:20:45 >>312
>C++/Tcl
http://cpptcl.sourceforge.net/
>A C++ library for interoperability between C++ and Tcl
>C++/Tk
http://cpptk.sourceforge.net/
>A complete C++ interface to the Tk GUI toolkit
>C++/Tcl
http://cpptcl.sourceforge.net/
>A C++ library for interoperability between C++ and Tcl
>C++/Tk
http://cpptk.sourceforge.net/
>A complete C++ interface to the Tk GUI toolkit
407デフォルトの名無しさん
2008/06/14(土) 21:46:52 GUIまったくわからないC++初心者が手を出しやすいGUIってありますか?
408デフォルトの名無しさん
2008/06/15(日) 00:03:43 とにかく標準のGUIツールを使え
マイナーなものは糞だからマイナーなんだ
マイナーなものは糞だからマイナーなんだ
409デフォルトの名無しさん
2008/06/15(日) 00:22:48 標準=Qt/wxWidgets?
410デフォルトの名無しさん
2008/06/15(日) 14:04:34411デフォルトの名無しさん
2008/06/16(月) 09:26:28 MFCみたいなこれって何語っていうようなカスもあるお。
412デフォルトの名無しさん
2008/06/16(月) 09:58:39 Windowsで初心者なら.NET一択じゃね
ウンコウンコ言われながらも、情報量が圧倒的過ぎる
ウンコウンコ言われながらも、情報量が圧倒的過ぎる
413デフォルトの名無しさん
2008/06/16(月) 10:06:46 情報量は圧倒だが、アウトプットのアプリは皆無。
414デフォルトの名無しさん
2008/06/16(月) 13:28:18415デフォルトの名無しさん
2008/06/16(月) 13:32:49416デフォルトの名無しさん
2008/06/16(月) 13:37:21 一番好きなプログラミング言語は?
http://itpro.nikkeibp.co.jp/article/OPINION/20080528/304478/
プログラマに対象を絞って聞いた「一番好きなプログラミング言語」は,「C/C++」(24%)が最も多く,
「Visual Basic(VB)」(20%),「COBOL」(13%)と続いた(図2)。企業の基幹システムに浸透しつつあるJavaや,
Webアプリケーション関連で使われることの多いスクリプト言語は,上位3位までに食い込むことができなかった。
C/C++ 24%
VB6.0 20%
COBOL 13%
Java 9%
Perl/PHP 7%
C# 2% ← m9(^Д^)プギャー
一番好きな言語と対比する格好で「最もよく使っているプログラミング言語」も聞いてみたが,
ここでは「C/C++」と「VB」の順位が逆転,「VB」が一位だった。
http://itpro.nikkeibp.co.jp/article/OPINION/20080528/304478/
プログラマに対象を絞って聞いた「一番好きなプログラミング言語」は,「C/C++」(24%)が最も多く,
「Visual Basic(VB)」(20%),「COBOL」(13%)と続いた(図2)。企業の基幹システムに浸透しつつあるJavaや,
Webアプリケーション関連で使われることの多いスクリプト言語は,上位3位までに食い込むことができなかった。
C/C++ 24%
VB6.0 20%
COBOL 13%
Java 9%
Perl/PHP 7%
C# 2% ← m9(^Д^)プギャー
一番好きな言語と対比する格好で「最もよく使っているプログラミング言語」も聞いてみたが,
ここでは「C/C++」と「VB」の順位が逆転,「VB」が一位だった。
417デフォルトの名無しさん
2008/06/16(月) 21:56:13 C#はいい言語だと思うんだがなぁ…
.NETじゃくネイティブコードコンパイラなければもっと使ってるのに…
COBOL(13%)ってのはITPro(というか日経)の読者層を反映しすぎてる気がする
.NETじゃくネイティブコードコンパイラなければもっと使ってるのに…
COBOL(13%)ってのはITPro(というか日経)の読者層を反映しすぎてる気がする
418デフォルトの名無しさん
2008/06/19(木) 23:55:15 ここにも貼っておく
ttp://torjo.com/egui/
ttp://torjo.com/egui/
419デフォルトの名無しさん
2008/08/10(日) 00:45:15 VB6.0にCOBOLが2〜3位って、時代に取り残されたおっさん確定だろ
そんな奴らにC#の良さが分かるとは思えないw
そんな奴らにC#の良さが分かるとは思えないw
420デフォルトの名無しさん
2008/08/10(日) 06:46:14 >>419
4番目にJavaはともかく、5番目にPerl/PHPだもんなw
4番目にJavaはともかく、5番目にPerl/PHPだもんなw
421デフォルトの名無しさん
2008/08/10(日) 08:56:54 GC.AddMemoryPressureが追加されるまでのC#は実用にならないゴミだったから仕方が無い
422デフォルトの名無しさん
2008/08/11(月) 04:31:35 >>417
海外だとC#で書いたものが多くなってますよね
日本じゃまだ目新しすぎてついて行けないだけじゃないかなぁ
C/C++が一番多いのは納得だけど、VB6が20%なのは厨房SE/PGが多い日本ならでわかと。
海外だとC#で書いたものが多くなってますよね
日本じゃまだ目新しすぎてついて行けないだけじゃないかなぁ
C/C++が一番多いのは納得だけど、VB6が20%なのは厨房SE/PGが多い日本ならでわかと。
423デフォルトの名無しさん
2008/08/11(月) 07:57:16 Delphiがその他のどのくらいの割合なのかが気になる上に
VB6.0て分けるぐらいならC/C++も分けるべきだったろに。
VB6.0て分けるぐらいならC/C++も分けるべきだったろに。
424デフォルトの名無しさん
2008/08/11(月) 20:01:01 >>422
厨房がVB6なんて知ってるわけねえだろ。
厨房がVB6なんて知ってるわけねえだろ。
425デフォルトの名無しさん
2008/08/12(火) 08:25:15426デフォルトの名無しさん
2008/08/12(火) 10:38:25427デフォルトの名無しさん
2008/08/24(日) 00:05:28 gtkmm
428デフォルトの名無しさん
2008/08/25(月) 00:03:40 だれか、使いやすいのを作ってくれ
429デフォルトの名無しさん
2008/09/05(金) 22:59:18430デフォルトの名無しさん
2008/09/06(土) 00:25:07 >>429
> でも20代なんてカネ稼いでない層だろ。
え?
現役で「プログラマ」をやってるのは圧倒的に20〜30代が多い、でしょ?
少なくとも日本では。
業界にもよるが、基本的にプログラマは下っ端の兵隊で、高級なデベロッパが
ほとんど存在しないという文化だからね。
> でも20代なんてカネ稼いでない層だろ。
え?
現役で「プログラマ」をやってるのは圧倒的に20〜30代が多い、でしょ?
少なくとも日本では。
業界にもよるが、基本的にプログラマは下っ端の兵隊で、高級なデベロッパが
ほとんど存在しないという文化だからね。
431デフォルトの名無しさん
2008/09/06(土) 02:22:15432デフォルトの名無しさん
2008/09/06(土) 02:59:58 脱しようと今起業しているがなかなかプログラムだと稼げないね
今年入った収入は1万8千円
受注仕事やるといいんだろうが、起業している意味ないしなあ
今年入った収入は1万8千円
受注仕事やるといいんだろうが、起業している意味ないしなあ
433デフォルトの名無しさん
2008/09/06(土) 03:16:16 1万8千円って俺の月収より低いな
434デフォルトの名無しさん
2008/09/06(土) 10:49:21 携帯ゲームあたりだろうか
435デフォルトの名無しさん
2008/09/06(土) 23:25:16 WTL
436デフォルトの名無しさん
2008/11/07(金) 23:19:54 自作してみたいんだが、どうすればいい?
環境は WindowsXP で VC2008EE
環境は WindowsXP で VC2008EE
437デフォルトの名無しさん
2008/11/08(土) 01:28:14 既存APIのラッパーを作ることから始めてはどうか
438デフォルトの名無しさん
2008/11/08(土) 01:31:14 質問する段階なら、APIの薄いラップのみでいいんじゃない
物足りなくなったら、他のツールキットがどういうアーキテクチャになってるか
調べて取り入れるとか
あと、オレオレライブラリの類は、演習と割り切って作らないと前に進むのが遅くなるよ
結局、既存のツールキットを使ったほうが便利な場面も多いし
ってこのスレで言うことじゃないなw
物足りなくなったら、他のツールキットがどういうアーキテクチャになってるか
調べて取り入れるとか
あと、オレオレライブラリの類は、演習と割り切って作らないと前に進むのが遅くなるよ
結局、既存のツールキットを使ったほうが便利な場面も多いし
ってこのスレで言うことじゃないなw
439デフォルトの名無しさん
2008/11/08(土) 01:33:29 ボタンもリストも基本はWindow。その辺はググれば出てくる。
多くの人間が通る道として、それらをC++でラップしたコントロールを作る。
そしてメソッドで対応するのが面倒になり、GetHwnd()とか作ってごまかして終了する。
VC2008EEで生産性を追及してGUIを自作したいなら、個人的には
ResEditとかフリーのリソース作成ツールが吐き出したソースを
サポートする形にするのが良いかと。
多くの人間が通る道として、それらをC++でラップしたコントロールを作る。
そしてメソッドで対応するのが面倒になり、GetHwnd()とか作ってごまかして終了する。
VC2008EEで生産性を追及してGUIを自作したいなら、個人的には
ResEditとかフリーのリソース作成ツールが吐き出したソースを
サポートする形にするのが良いかと。
440デフォルトの名無しさん
2008/11/08(土) 17:29:15 ふむ、アドバイスdクス
まず、ラッパからやってみるよ。
できたら晒しにくるよ。
まず、ラッパからやってみるよ。
できたら晒しにくるよ。
441デフォルトの名無しさん
2008/11/08(土) 22:08:18442デフォルトの名無しさん
2008/11/08(土) 22:30:22 メンバ関数名にまでWindowは付けなくていい。
あとメッセージループもメンバ関数にしたらどうだろう。
エラーの原因はポインタの扱いだから、
その辺復習しながら作るといいよ。
あとメッセージループもメンバ関数にしたらどうだろう。
エラーの原因はポインタの扱いだから、
その辺復習しながら作るといいよ。
443デフォルトの名無しさん
2008/11/08(土) 23:43:45 久しぶりにネット繋いだらVC++6.0に怒濤のごとく更新入った
444デフォルトの名無しさん
2008/11/08(土) 23:53:16 >>442
アドバイス有難う。
うまく表示できた。
さて、ウィンドウの表示はできた。
次は、
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
の中でしているのをどうするかだ。。。
ここで、メッセージループをしているのをどうにかしたい。
じゃないと、ラッパを作る意味がないきがする。
アドバイス有難う。
うまく表示できた。
さて、ウィンドウの表示はできた。
次は、
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
の中でしているのをどうするかだ。。。
ここで、メッセージループをしているのをどうにかしたい。
じゃないと、ラッパを作る意味がないきがする。
445デフォルトの名無しさん
2008/11/09(日) 00:13:01 >>444
WindowインスタンスごとにVirtualAllocで確保した領域に
ECXにthisを入れてメンバのWndProcに飛ぶコードを動的生成して
それをRegisterClassExでコールバックとして渡しておく。
そうすればWindowsが直接メンバ関数を呼んでくれるようになる。
あとはそれをOnXXXとかのvirtualなハンドラに飛ばして、
必要に応じて外部に委譲させておけばおk。
WindowインスタンスごとにVirtualAllocで確保した領域に
ECXにthisを入れてメンバのWndProcに飛ぶコードを動的生成して
それをRegisterClassExでコールバックとして渡しておく。
そうすればWindowsが直接メンバ関数を呼んでくれるようになる。
あとはそれをOnXXXとかのvirtualなハンドラに飛ばして、
必要に応じて外部に委譲させておけばおk。
446デフォルトの名無しさん
2008/11/09(日) 01:47:00447デフォルトの名無しさん
2008/11/09(日) 02:04:48 とりあえず他でやって欲しい。
448デフォルトの名無しさん
2008/11/09(日) 02:05:45 マイナーGUI(ラッパか・・・)作ってるからいいんじゃね?
449デフォルトの名無しさん
2008/11/09(日) 02:27:18450デフォルトの名無しさん
2008/11/09(日) 02:41:11 私のレベルは、簡単なものならAPIをガリガリでモノを作れる。
MFCは使ったことなし。
>stdcallとcdeclは知っている?
これは名前は知っている。
>clのABIはthiscallでECXにthisが入るのは知っている?
これは、知らない。
cl・・・コンパイラ?
ABI・・・アプリケーション・バイナリー・インターフェイス?
thiscall ≒ cdecl?
ECX・・・アセンブリは全く知らない
つまり、アセンブリを知らないとできないってこと?orz
MFCは使ったことなし。
>stdcallとcdeclは知っている?
これは名前は知っている。
>clのABIはthiscallでECXにthisが入るのは知っている?
これは、知らない。
cl・・・コンパイラ?
ABI・・・アプリケーション・バイナリー・インターフェイス?
thiscall ≒ cdecl?
ECX・・・アセンブリは全く知らない
つまり、アセンブリを知らないとできないってこと?orz
451デフォルトの名無しさん
2008/11/09(日) 03:14:18 >>450
アセンブリと言っても別に難しい知識は必要ない。
C言語が使えるんなら、レジスタとスタックの操作、
つまりmovとpushくらいは3分でわかるはず。
そして引数がスタックに積まれることが理解できれば良い。
そのスタックをどこで戻すかの違いがstdcallとcdecl。
インスタンスメソッドに対してはインスタンスが引数として扱われる。
それがcl(VC++のコンパイラ)ではECXで渡されるということ。
ちなみにgccだと第一引数としてスタックに積まれる。
こういう呼び出し規約のことをABIと呼ぶ。
なぜこんな知識が必要か?
それはインスタンスメソッドに対してコールバックさせるため。
実際にATLではこの方法が使われている。
ハッシュで済ませるんなら必要ないんだけど、
外部に委譲させるときに悩むことになる。
アセンブリと言っても別に難しい知識は必要ない。
C言語が使えるんなら、レジスタとスタックの操作、
つまりmovとpushくらいは3分でわかるはず。
そして引数がスタックに積まれることが理解できれば良い。
そのスタックをどこで戻すかの違いがstdcallとcdecl。
インスタンスメソッドに対してはインスタンスが引数として扱われる。
それがcl(VC++のコンパイラ)ではECXで渡されるということ。
ちなみにgccだと第一引数としてスタックに積まれる。
こういう呼び出し規約のことをABIと呼ぶ。
なぜこんな知識が必要か?
それはインスタンスメソッドに対してコールバックさせるため。
実際にATLではこの方法が使われている。
ハッシュで済ませるんなら必要ないんだけど、
外部に委譲させるときに悩むことになる。
452デフォルトの名無しさん
2008/11/09(日) 03:23:19 ふと疑問に思って昔作ったGUIクラスをひっぱりだして覗いてみたら
SetWindowLong( hWnd, GWL_USERDATA, (int)this );
みたいな感じのを使ってた。ハンドルと32bitデータを関連付けられるらしい。
で、Windowプロシージャで
GetWindowLong( hWnd, GWL_USERDATA );
を使って、ハンドルから対応クラスのポインタをひっぱってきて
Window別のイベントを処理してた。なつかすぃ。
SetWindowLong( hWnd, GWL_USERDATA, (int)this );
みたいな感じのを使ってた。ハンドルと32bitデータを関連付けられるらしい。
で、Windowプロシージャで
GetWindowLong( hWnd, GWL_USERDATA );
を使って、ハンドルから対応クラスのポインタをひっぱってきて
Window別のイベントを処理してた。なつかすぃ。
453デフォルトの名無しさん
2008/11/09(日) 03:33:48 >>452
その方法だとたとえばウィンドウ上でIMEの入力をしているときに
候補の上でホイール回したりしてIMEが作ったhWndが飛んでくると
不正なポインタに飛ばすことになって落ちるよ。
結局、登録されたhWndかどうかチェックするとハッシュになってしまう。
その方法だとたとえばウィンドウ上でIMEの入力をしているときに
候補の上でホイール回したりしてIMEが作ったhWndが飛んでくると
不正なポインタに飛ばすことになって落ちるよ。
結局、登録されたhWndかどうかチェックするとハッシュになってしまう。
454デフォルトの名無しさん
2008/11/09(日) 07:15:09455デフォルトの名無しさん
2008/11/09(日) 09:30:36 同じくで、サンク作る方法は自分でも書いたことあったけども>>454の意味はちまちまわからんとこが。
ATLのソースか、エディタのGreenPadがそんな方法使ってたから見てみてもいいかも。
わかりにくい上に機械語直接埋め込むから試しに自分でラッパ書いてみる、って段階ではどうかと思うが、早いし。
ウィンドウハンドルとthisを関連づける方法はGWL_USERDATAの他にSetProp/GetPropAPIもある。
ttp://hp.vector.co.jp/authors/VA022575/c/msgmap.html
ttp://hilbert.elcom.nitech.ac.jp/~taki/program.html
一応この辺がその辺の話。
ATLのソースか、エディタのGreenPadがそんな方法使ってたから見てみてもいいかも。
わかりにくい上に機械語直接埋め込むから試しに自分でラッパ書いてみる、って段階ではどうかと思うが、早いし。
ウィンドウハンドルとthisを関連づける方法はGWL_USERDATAの他にSetProp/GetPropAPIもある。
ttp://hp.vector.co.jp/authors/VA022575/c/msgmap.html
ttp://hilbert.elcom.nitech.ac.jp/~taki/program.html
一応この辺がその辺の話。
456デフォルトの名無しさん
2008/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も含む
あと、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デフォルトの名無しさん
2008/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
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デフォルトの名無しさん
2008/11/09(日) 13:50:14 >>454
インスタンスごとにクラスを登録しているのはWindows Formsだね。
インスタンスごとにクラスを登録しているのはWindows Formsだね。
459デフォルトの名無しさん
2008/11/09(日) 18:40:07 この流れを見てるとこのスレの住人はやっぱり結構自分ラッパを書いてしまっているんだなあと感じて親近感がw
しかし>>450は付いてきているのか。周りが凄い盛り上がってしまってるけど。
しかし>>450は付いてきているのか。周りが凄い盛り上がってしまってるけど。
460デフォルトの名無しさん
2008/11/09(日) 21:38:28 >>450は単語一個一個調べたり、根が真面目そうなんで、
今、大量の情報がドカドカ出てきたので知らん部分をググってる最中じゃない?
期待がプレッシャーにならない程度にマターリ待つのが良いかと。
俺もラッパ作ちゃった1人なんだが、結局デザイナーツールの作成が面倒で
活用には至らなかった。
その辺までしっかり作った人っているの?
今、大量の情報がドカドカ出てきたので知らん部分をググってる最中じゃない?
期待がプレッシャーにならない程度にマターリ待つのが良いかと。
俺もラッパ作ちゃった1人なんだが、結局デザイナーツールの作成が面倒で
活用には至らなかった。
その辺までしっかり作った人っているの?
461デフォルトの名無しさん
2008/11/10(月) 00:28:53 なぁ、>445 の方法って、ネットで探しても情報ないのな。
ATLのソース読んでみようと思ったけど、どこから読んだらいいのかわかんねw
>450 は初心者っぽいしきつい気がするのは俺だけか?
そういや、昔、CマガでGUIライブラリを作るってのがあったが
あれは参考にならないか?
もう、手に入らないけど。
ATLのソース読んでみようと思ったけど、どこから読んだらいいのかわかんねw
>450 は初心者っぽいしきつい気がするのは俺だけか?
そういや、昔、CマガでGUIライブラリを作るってのがあったが
あれは参考にならないか?
もう、手に入らないけど。
462デフォルトの名無しさん
2008/11/10(月) 02:05:47463デフォルトの名無しさん
2008/11/10(月) 06:11:25464デフォルトの名無しさん
2008/11/10(月) 07:58:51 『組み込みGUI(ウィンドウ・システム)環境の設計と実装』って本
読んだことある人います? おもしろい?
読んだことある人います? おもしろい?
465デフォルトの名無しさん
2008/11/10(月) 08:11:08466デフォルトの名無しさん
2008/11/10(月) 13:35:58467デフォルトの名無しさん
2008/11/10(月) 15:47:24 >>464
フレームバッファ直描きでウィンドウシステムを作る本だよ。
OSを作ったりとか、LinuxでXを使わないGUIを作ったりとか、
そういうことに興味がある人には面白いと思う。
Windowsアプリを作るのにはほとんど参考にならない。
フレームバッファ直描きでウィンドウシステムを作る本だよ。
OSを作ったりとか、LinuxでXを使わないGUIを作ったりとか、
そういうことに興味がある人には面白いと思う。
Windowsアプリを作るのにはほとんど参考にならない。
468デフォルトの名無しさん
2008/11/10(月) 21:28:35 一つずつ
>>451
>つまりmovとpushくらいは3分でわかるはず。
mov・・・ジスタやメモリに、データの転送を行う
push・・・スタックにデータを積む
>そのスタックをどこで戻すかの違いがstdcallとcdecl。
このことでいいのかな?
ttp://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-055.html
>ECX
レジストリと
こんな場所がある、程度でいいのかな?
>>451
>つまりmovとpushくらいは3分でわかるはず。
mov・・・ジスタやメモリに、データの転送を行う
push・・・スタックにデータを積む
>そのスタックをどこで戻すかの違いがstdcallとcdecl。
このことでいいのかな?
ttp://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-055.html
>ECX
レジストリと
こんな場所がある、程度でいいのかな?
469デフォルトの名無しさん
2008/11/10(月) 21:32:35470デフォルトの名無しさん
2008/11/10(月) 21:34:28471デフォルトの名無しさん
2008/11/10(月) 22:41:30472デフォルトの名無しさん
2008/11/11(火) 17:08:05 WindowsXP SP2のDEPでATLのThunkが問題になってたような気がするんだけど、
あれは何でなんだろ?
あれは何でなんだろ?
473デフォルトの名無しさん
2008/11/11(火) 17:22:32 >>472
ウィルス等がバッファオーバーフローでヒープに不正コードを埋め込むことの対策として
ヒープのコードを実行できなくしたのがDEP。
ATLではサンクをHeapAlloc領域でやっていたため引っ掛かることになった。
今のATLはVirtualAllocでPAGE_EXECUTE_READWRITEで確保するため問題ない。
ウィルス等がバッファオーバーフローでヒープに不正コードを埋め込むことの対策として
ヒープのコードを実行できなくしたのがDEP。
ATLではサンクをHeapAlloc領域でやっていたため引っ掛かることになった。
今のATLはVirtualAllocでPAGE_EXECUTE_READWRITEで確保するため問題ない。
475デフォルトの名無しさん
2008/11/13(木) 03:52:36 おまえら!
言いたいのをガマンしてるなら、代わり俺が言ってやるよ!
あくまでもおまえらの代弁だからな!俺が言いたいワケじゃないんだからな!
なるほど、わかりやすい説明Thunkです。
言いたいのをガマンしてるなら、代わり俺が言ってやるよ!
あくまでもおまえらの代弁だからな!俺が言いたいワケじゃないんだからな!
なるほど、わかりやすい説明Thunkです。
476デフォルトの名無しさん
2008/11/13(木) 07:05:21 さみぃw
477デフォルトの名無しさん
2008/11/17(月) 23:11:46 こんな方法どうやって勉強しました?
478デフォルトの名無しさん
2008/11/18(火) 22:33:44 >>477
Windows 3.1の頃(15年前)からプログラム作ってたら嫌でも身に付く
Windows 3.1の頃(15年前)からプログラム作ってたら嫌でも身に付く
479デフォルトの名無しさん
2008/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);
}
かなりふざけた方法だけど...
俺はこんな感じでやってる...
{
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デフォルトの名無しさん
2008/12/01(月) 20:53:23 何となく、自分も昔作ったGUIを晒してみようとサンプル動かしてみたら、
リストビューを拡張して作ろうとしたらしいGridViewがいきなりバグってた。
出直してきます。orz
リストビューを拡張して作ろうとしたらしいGridViewがいきなりバグってた。
出直してきます。orz
481デフォルトの名無しさん
2009/01/12(月) 01:32:46482デフォルトの名無しさん
2009/01/28(水) 13:05:32 保守あげ
483デフォルトの名無しさん
2009/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());
}
};
使い方は↓のようなかんじです。
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デフォルトの名無しさん
2009/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では使えないのか?
>c:\usr\include\sol\window.h(68) : error C2664: 'GetClassNameW' : 2 番目の引数を 'char *' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
(面倒だから全部は乗せない)
こんなエラーが大量に出てきた。
これって、VC++2008SP1では使えないのか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 ★5 [お断り★]
- 伊東市長選、田久保氏の落選確実 元市議の杉本氏と元市長の小野氏が激しく競り合う [蚤の市★]
- サナエノミクスについて力説 積極的な財政出動で「所得増える 消費マインド上がる 税収増える」片山さつき財務大臣 ★2 [少考さん★]
- 中国軍機のレーダー照射1週間 駆け引き続く 中国、米のレッドライン模索 日本、米以外の同志国とも連携探る 米は対立から距離置く [ぐれ★]
- B’z東京ドーム公演で後ろの客が大熱唱…「B’zの歌声に集中できない」注意すると笑いながら反論されモヤモヤ [muffin★]
- 【ボクシング】井上尚弥vsピカソ 約5000円のPPV料金を巡って賛否 「払うかなあ」「見どころ多い」 [冬月記者★]
- 【実況】博衣こよりのえちえちボンバーマン大会🧪★4
- 兵庫の銭湯の入浴料金、490円から570円に値上げ!😱♨🧴🐒🚿 [718678614]
- 【実況】博衣こよりのえちえちボンバーマン大会🧪★3
- イオンの急速充電器、5倍に値上げ!30分300円👉1485円! [838847604]
- 【悲報】『山に上る』などの隠悟、ガチで取り締まりか!?wwwwwwWWwwwwwwWw [793833473]
- 【画像】兵庫県民「立花さんの動画を見て真実を知った。斎藤さん頑張れ!」→立花、デマと正式に認定され逮捕 [732289945]
