1 :
デフォルトの名無しさん :
2007/12/27(木) 21:19:13
O2
おつ
>>1 乙
テンプレ細かいところがさりげなく整理されてるね
今まさにWTLのリポジトリがbviksoeたんによって更新されてるな。 atldlgs.hをいじってる模様。 CDialogBaseUnitsというクラスが追加されてる。
CStringがあるんだから CWにみしらてにもせりとかもWTL側で作ってしまえば。 EEとかでもヘッダ持ってくるだけで使えるんじゃないの?
最近流行りなの?わざとかな入力にするの。 オジサン、ついていけないよ(´・ω・`)
atl/wtlスレもついに6か
遅ればせながら
>>1 乙
あけましておめでとう〜
全然あけてねーよ
ネタくらいしか話題がないんだから仕方ないだろう
14 :
デフォルトの名無しさん :2007/12/30(日) 10:37:23
なんで過疎なんだよ
viksoeたんが頑張ってくれないから
もうやだ
みんなどうやってWTL覚えたの? 覚えようにも本とか出てないんだよなぁ
テンプレのサイトを読み書きすりゃそのうち手になじむよ。 とりあえずSo-SoとCodeProjectあたりをどぞー。
本はいいからまずは整理されたドキュメントが欲しいな
So-Soがあればドキュメントなんかほしいと思ったことはないな
WTLってなぜMFC(のスタティックリンク)と比べて圧倒的に バイナリサイズが小さくなるんでしょうか? 似たクラスが多いんで、そんなに変わらないような気がするのと、 ヘッダに全て記述することや、インライン・テンプレート化に そこまでの効果があるようには思えないですし…。
MFCはフローティングバーの実装だけで WTLの全てのコード量を超えると思われる
>>22 本当にMFCのコードなりクラスツリーなり見たか?
あれを見れば「WTLとそんなに変わらない」なんて言えないと思うんだが。
25 :
22 :2008/01/04(金) 17:17:18
>>23 >>24 すいません。MFCはコードを深く読んだことないです。
でも、クラスツリーというレベルでいうと、MSDNでざっとは目を
通してはいます。
ちなみに、スタティックリンクって、"アプリ側で使用していない
オブジェクトコード(未使用クラス等)はリンク時に除かれて、
バイナリコードに含まれない"と認識してるんですが、
合ってますでしょうか?
−−−−−−−−−−−−−−−−−−−−−−−−−− 俺様用・しおり ∧_∧ ( ・∀・)< 今日はここまで読んだ −−−−−−−−−−−−−−−−−−−−−−−−−−
>>25 そんなに変わらない気がするだの効果があるように思えないだの、ごたごた言うまえに
自分で試せば一発で分かる話じゃないの?
WTLのウィザードでスケルトンをビルドしてexeのファイルサイズを比較するなり
mapファイル出力して覗いてみるなりすればいいだけだと思うが。
28 :
25 :2008/01/04(金) 21:19:25
>>27 なるほど、mapファイルを見れば何か分かりそうですね。
ちょっと試してみます。ありがとうございます。
>>28 テンプレートの仕組みさえわかれば、なんてことないと思うけどなあ
30 :
28 :2008/01/05(土) 00:47:11
手持ちのVC6でSDIスケルトンで比較してみたところ、
MFCの場合、mapファイル内で大量の依存クラス(Array・
Exception・Thread・CmdTarget等)の呼び出し(nafxcw:*.obj)
が行われるのがサイズが肥大する原因のようです。
対してWTLはウィザードで生成された*.objからしか呼び出しが
行われていないので、圧倒的にサイズが小さくなると…。
>>28 テンプレートの仕組み(コンパイル時に展開)は、頭では
理解してたつもりだったのに…orz。
よかったね!
viksoe超がんばれ
WTLのCDialogImplを使ったダイアログクラスをモーダルダイアログとして開いた場合に、 OnIdleイベントハンドラを使う方法ってあります?
モーダルで......あり得ねえだろ。
質問です。 モーダルダイアログってありますが、アプリケーション全体でモーダルなダイアログが 作れなくて困ってます。 イメージとしては、タスクトレイから複数のウィンドウが開けるんだけど、 設定ダイアログを開くと、どのウィンドウをクリックしても、 タスクトレイを右クリックしても警告音?がして、 設定ダイアログがTopにくる感じです。 なんかいい方法があったら教えてください。
ウィンドウをディスエーブルして自力でエミュレートするしかないんじゃね?
atlfile.hってATLの3.0にはないの? 3.0以降をてにいれるにはVSを買うしかないのかなぁ
古いDDKに入ってなかったか?
>>40 思わずインストールして確認しちまったじゃねぇか
build 6001.17121にちゃんとatlfile.hも入ってたわ
CAppModule _Module;なくても動くけど何か弊害はないの
>>42 分かりやすい例をあげると、_ModuleなしでSplitterWindowとか使ってみ?落ちるから。
詳しくはヘッダ参照。
>>43 >詳しくはヘッダ参照。
WTLを使う時はこれが冗談じゃなくなるから困るw
いや別に冗談ではないだろ
WTL9.0っていつ出るの?
TCHAR用だけじゃなくてascii用とUnicode用、両方用意して欲しかったなあ・・・
std::basic_string<TCHAR>
CStringA → ATL CStringW → WTL
50 :
デフォルトの名無しさん :2008/01/16(水) 18:07:03
おー、これだ。翼の入ったやつ。これが、一番好きなんだ。ウイングガンダムだ。格好いいだろ。翼、がーっと広げてな。格好いいぞ
WTL8ってVS2008で動くの? 前試したら動かなかったんだが。
うご
け
ぽ
ま
CStringS → STL
class CMainWindow : public CWindowImpl<CMainWindow> こんなかんじで MSG_WM_SYSCOMMAND(OnSysCommand); void OnSysCommand(UINT nID, CPoint point); なんですけど void CMainWindow::OnSysCommand(UINT nID, CPoint point) { if(nID == SC_MAXIMIZE) { // 最大化ボタンなら無視する。 return; } } と書くと最大化ボタン以外も無視されるわけです。 ほかのボタンの場合通常の処理へ戻すにはどう書けばいいんでしょうか?
SetMsgHandled(FALSE) so-soあたりで CWindowImplのメッセージ処理の基本を勉強した方が良いと思う
あー思い出した。しばらくC#のにはまってたから。 ありがとん。
嘘だな
61 :
デフォルトの名無しさん :2008/01/19(土) 20:30:30
早 /::::l:::l::、:::::、:::::ヽ::、::::::::::::\:::\::::::::ヽヽ::::::ヽ 駄 .く /:::!::::i:::!:::ヽ:::ヽ::::::ヽ::ヽ、::::::::::\:::ヽ:::::::ヽヽ::::::', 目 な. /:l::::!::::ヽ!::ヽ:::::::ヽ:::::::\:::ヽ、::::::::ヽ:::ヽ::::::::!::i:::::::! だ ん ハ:::l:::::、::::ヽ::::\:::::\:::::::\:::`ヽ、:::ヽ::ヽ:::::!:::!:::::l と /:::::::l::::::!ヽ:ヽ::::、:::::ヽ:::、:\::::: \::::::\::::!::::ヽ:!:::i:::l:l こ か !:/!:::::!::::::!::ヽ:ヽ{:::\:::ヽ::::\:::\::ヽ:::::::ヽ!:::::::}!::::l::li| い し j/:::l:::::!:、:::!::ト、:、:ヽ:::::`ヽ{、::::::\::::\{、::::::::::::::::i::!::l:l ! つ な l:i:l::::i::i:、:l::lテ=-、:ヽ、_、::\_,≧ェュ、_、\:::::::::i::li::!::リ : い !ハト:{:!:i:トN{、ヒ_ラヘ、{ >、{ 'イ ヒ_ラ 》\::l::!:ト!!:l::l! : と ヽ i、ヽ:ト{、ヾ ̄"´ l!\ `" ̄"´ |::!:l::! j:ll:! : !::、::::i l u |:::/lj/l:!リ : ヾト、:!u j!/ j|:::リ ヾ! ヽ ‐ u /イ´lハ/ }ト.、 -、ー-- 、__ /' !::// リl::l゛、 `二¨´ / |/:/ rー''"´ト!::i{\ / / !:/ / ^ヽ ヾ! ヽ _,,、'´ / j/
証明不可能なことは書かないことだな。
おまえもな
if((nID & 0xfff0) == SC_MAXIMIZE)じゃね
もう答え出てるだろうが
C#でのGUI作成すげー楽だな… なんかいろいろショック受けた
C#が、じゃなくてWinFormsが、だろ
気持ちはわかる。
俺も初めて触ったときはびっくりしたな もう6年前になるのか
前から思ってたけど、ここの住人って.NETも使ってるって奴が意外と多いよな。
そりゃ、何を使うかは、時と場合によって選択するもの。 常にネイティブC++一本で行けば万事解決な訳ない。
>>70 C#でもperlでもjavaでもアセンブラでも
何でも使うよ、要求があれば
一度も使ったことなかったけどそれで覚えた言語とか結構あるしpythonとかphpとか
でも、一番泣けたのは2003年にvb5で作って欲しいといわれた事・・・
>>72 その案件はこのスレはともかく、VBスレの住人ですら泣きそうだな
>>73 開発環境が自社になくて、客から開発環境インストール済みPCを借りて開発した
ベースをこっちで作ってメンテはお客さんがやるという形だったから
担当者が使える言語という事でVB5が選ばれたんだけどね
せめてVB6だったら良かったが・・・
嫌がらせとしか思えないな。
CAtlExceptionは勝手に飛んでくることかあ゛るの?
マク゛ロで切り替えられるよ
むむ。絶滅危惧種?
throw()が付いた関数なのにAtlThrowを呼び出してるのって _ATL_CUSTOM_THROWで独自の例外をthrowする処理に入れ替えると m9(^Д^)プギャーーーッでは。
古いコンパイラだと例外指定はできても実装されてなくて 普通に例外投げれたりする。
VC6のATLなプロジェクトを2005でコンパイルすると エラーでまくりで、ためしにVC2005でATLプロジェクト作ってみたら 作成されるソースがまったく違ったんですが 古いプロジェクトをコンパイルするのに何か言い方法は ありませんでしょうか?
1カ所変な所を見つけたら、それと同じ箇所を一括して変更。
Microsoft、データ実行防止技術を推進する新APIを提供 : セキュリティ - Computerworld.jp
http://www.computerworld.jp/news/sec/97289.html > Howard氏によると、新しいAPIは多くの開発者、なかでもATL(Active Template Library)の旧バージョンを使っている開発者向けのもので、アプリケーションからDEPを呼び出すことを可能にするという。
>
> より具体的には、同APIを用いることで、アプリケーションが起動中であってもDEPを有効にすることが可能になるという。従来は、DEPを使ってアプリケーションを保護するかどうかを前もって決めておく必要があった。
>
> 「開発者がATLの旧バージョンを使っている場合でも、DEPによるアプリケーション保護が可能になる。DEPは、脆弱性を突く攻撃を防ぐ優れた技術であるため、われわれは開発者がこの技術をより簡単に使えるようにした」(Howard氏)
旧ATLで何故DEPが問題になるか良く分からないんですが、 Window制御にマシン語(thunk?)を使ってるからですか?
そういうこと。 動的に確保したメモリ上に、クラスの各オブジェクトへのメンバ関数に飛ぶコードを構築して、それをウインドウプロシージャにしている。 メモリを実行可能に設定してなかったんじゃない。 WindowsはDEPの例外をトラップして、ATLによって構築されたっぽいコードを検地した場合は、特別に処理している。 速度を考えた設計が、今は逆に遅くなっているわけだよね。 そんなことするぐらいだったら、mapでも使ったほうがどれほど早いか。
新ATLはthunk使わなくなる?
VC8にいてるATLのthunkはDEP対応だから、 いまさら使わなくなる事はないんじゃない。
>86 というか、旧ATLはふつーにLocalAllocだからねぇ。
>>86 ってことはATLで構築されたっぽい○ウェアを書けばおけ?
それは違うだろw
WTL9マダー?
1日前にまたちょっとだけ更新されてるけどまだかねぇ。
VS2008に合わせて開発して欲しいよな そうじゃないと日本語化されないし まあ個人でしてくれてる人いるけど
CDoubleBufferWindowImpl を継承して DoPaintで描画しているのですが、 ウィンドウが最初に表示されるときに 描画がされないのですが、なぜなのでしょうか?
だめだ、テンプレの解説サイト見てるが難しい、C++やりなおそう
ATL/WTL始めようと思ったけど良さそうな入門書見当たらねえ まずWinAPIやってからATL/WTL行こう…
soはかなりわかりやすいと思うけんども。
>>99 ごめんなさい
プロバイダのせいか特定サイト見てると回線がぶっつりいってしまって要モデム再起動になるんです
あそこもそれに引っかかってるようでorz
Wikiもたまにそうなりますしちょっとプロバイダの変更でも検討しときます
そういう症状聞いたことあるな、専門板に質問に行ってた頃だけど CATVか
>>100 そんなことで謝らんでもいいわい。
なんか面倒なんだな。
wikiってどこのwikiだ?
色々種類あるけど例えばWikipediaなんかでもまれに引っかかる 普通のサイトも然り、条件は何年も使っててさっぱりわからん
105 :
デフォルトの名無しさん :2008/02/26(火) 21:15:20
すみません質問です。 ダイアログのボタンIDOKをDisabled = FalseからTrueにしたいんですが WTL::Button idok = GetDlgItem( IDOK ); までは出来たのですがここから先が分かりません。 分かる方おしえていただけますか?
idok.EnableWindow(FALSE); でなくて?
109 :
96 :2008/02/28(木) 20:40:33
OnPaint以外で CPaintDC使ってたのが原因みたいでした。 CClientDCに変更したら直りました。
ATL/WTLをやるには情報の多いWinAPIをがっつりやってから入れと先輩から教わったのですが、そういうものなんでしょうか? がっつりWinAPIをやった後それを使わずATL/WTLに進むのはやはり開発効率の違うですか?
その質問はその先輩にすべきだと思うぞ
>>110 ATLの入ってない無料版を渡されたんだろ?
113 :
110 :2008/02/29(金) 00:06:48
>>111 ああ、やっぱりそれが正道ってわけじゃないんですね
>>112 ATLは入っていて、とりあえずWTLも使えるようにしました
WinAPIの仕組みを理解しておけって意味だと思う
WTLの場合ドキュメントがあんまないので、いきなり入るとわけわからなくなる WinAPI知ってれば想像がつくので楽
116 :
デフォルトの名無しさん :2008/02/29(金) 08:30:27
VisualStudio(2003)で付属PlatformSDKから 最新のPlatformSDKに移行したら それまで使ってたATL,MFC,Boost等 のlibに影響出ますか?(リビルドが必要? $(VCInstallDir)PlatformSDK\include\prerelease $(VCInstallDir)PlatformSDK\include
117 :
110 :2008/02/29(金) 10:01:46
>>114-
>>115 なるほど、何事も着実にですね、ありがとうございました
WTLを勉強してみたいんだけど、2008 Express Editionじゃダメなんだよね? フリー&一番新しいバージョンとなると、この組み合わせであってる? Visual C++ 2005 Express Edition (with SP1) Microsoft Windows Server 2003 R2 Platform SDK WTL 8.0
2005でも2008でもそう変わるとは思えないけど。
WTLに2008用セットアップスクリプトが付いていないはず 自分で8.0を9.0に書き換えれば良いだけだけどな
121 :
118 :2008/03/16(日) 12:37:08
>>119 ,120
ありがとう
今、2008使ってるんで、あとで試してみるよ
WTLは手にはいるけど、ATLが手に入らなく無い?
VSインスコしたらデフォで入ってますけど。
EEには入ってないでしょ
>Microsoft Windows Server 2003 R2 Platform SDK これにATL入ってたような 古いけど MSからのリンクは切れてるけどページ自体は残ってて ググるとMSのdownloadページが見つかったような気がする うろ憶え・・・
Visual Studio 2008のProとかTeamの体験版にはきっと入っているはず。 そこからファイルコピーなんて考えませんよ、DreamSpark待ちですから。
コンパイルは成功しても実行時にdepで落ちる悪寒。
質問ですが、WTLのエディットコントロールの背景色を変更したいのですが、どうすれば良いでしょうか? やりたいことは、エディット不可(READONLY)にしておいて、背景色は白にしておきたいだけなのですが。
>>129 MSG_OCM_CTLCOLORSTATICとかREFLECT_NOTIFICATIONSとか・・・
せっかくスレ主が参考になるサイトのURL貼ってくれてるんだから、自分で調べてから書きこしようね
131 :
129 :2008/03/20(木) 22:56:10
自分で調べた結果、分からなかったので質問しました。 MSG_OCM_CTLCOLORSTATICの具体的な説明とか、どこかに載っているのでしょうか? 申し訳ないですが私には見つけられませんでした。
WTL9.0っていつでんの?
>>129 BEGIN_MSG_MAP(CColoredEditImpl)
MESSAGE_HANDLER(WM_NCPAINT, OnNcPaint)
MESSAGE_HANDLER(OCM_CTLCOLOREDIT, OnCtlColorEdit)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
>>133 さあ。Vista周りの新機能の早期サポート期待したいならおとなしく2008のMFC使った方がいい。
最新のソースをSvnで追っかけてるが、ほとんどviksoe先生頼みだな。
何かMSがWTL開発してた方が良かった気がしてきた
WTLのsvnログ見ると2007/12/8に"Setup script for VC 9"と"ATL9.0 update"ってあるからsvn版だとOKなのかも。 でもログ見てると、あんまし活発じゃなさそうな気が…。
138 :
129 :2008/03/22(土) 14:33:28
どうもWTLというよりWindowsでのプログラムについて、もっと学ばねばならないようですね。
質問ばかりで申し訳ありませんが、お助け願います。
>>132 これを参考に背景色を変更することが出来ました。
MSG_OCM_CTLCOLOREDIT(OnCtlColorEdit)でメッセージを受けて、
変更したい背景色のブラシを返すようにしました。
しかしエディットボックスをREADONLYにすると、変更出来なくなりました。
CTRCOLOREDITをCTLCOLOR_STATICにしても同じでした。
何が行けないのでしょうか?
139 :
129 :2008/03/22(土) 19:53:04
自己解決しました。 CEditの継承の仕方が間違っていました…。
140 :
デフォルトの名無しさん :2008/04/04(金) 09:41:23
error C2061: 構文エラー : 識別子 'PICONINFOEX' ってのが出るんですが、これは一体何のエラーでしょうか。 あと、別のプロジェクトでは fatal error RC1015: cannot open include file 'atlres.h'. ってのが出てきて、これもコンパイルできません。
エスパー募集じゃないなら詳しく書かないと。
VistaのSDKのインクルードパスが入ってない落ち。 あとstdafx.hにこれ入れておけ #define _WIN32_WINNT 0x0600
その程度のレベルの奴がWTLを使うのか世w
>>143 そういうおまいはどの程度のレベルなんだ?
超スーパーハカーであったとしても人として終わってるは確実。
>>140 のエラー程度で一々質問するようじゃやっぱり駄目だろ。
まずネタ提供にしては稚拙過ぎるからありえないとして 推論思考に先天的な欠陥を抱えているとか色々可能性があるから 全く触らないならばまだしも弄るのは良くないと思うよ。
もう保守以外でこのライブラリは使ってやらない。
まあ確かに、Vistaでの描画がちと怪しいな
ダンゴさんの見識の広さには恐れ入るところがあるな
あぼーん
例えば、WTLのヘッダの中からCRectとかみたいな ATLの不要なものだけコピペして使ってもいいの?
全部使えよ
さすがダンゴさん胴体着陸してもなんともないぜ!
154 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
Implってなんの略ですか?
Implementation(実装)
implication long 二つの64ビット値をビット毎に包含演算した結果を返す
160 :
デフォルトの名無しさん :2008/04/12(土) 23:27:03
Implementation(実装) だと思ってた。 159 すげーな
2008EEだけ落とすとATLついてないんだけど2005もインストールしなきゃだめ? どっかにATLだけ単体で落っこちてないかな
2005EE入れても同じだ たしかDDKに3.xのヘッダが付いてた。 てかStdくらいけちるなよ。 実はアップグレードでおkなので実質2万
164 :
デフォルトの名無しさん :2008/04/14(月) 02:04:50
Windows Driver Kitには入ってないの?
入ってる
それよりも2008 TeamSystemやProfessionalの体験版でも入れたほうがいいかもしれない。
atlconv.h の CA2W を使いたいんだけど, error C3861: 'CA2W': 識別子が見つかりませんでした って怒られる.include フォルダ見たけど,これは WTL8.0 には無いよね? ATL7.0 以降みたいなんだけど,これはどこかで手に入るの?製品版? Window2000 Visual C++ 2005 express edition Microsoft Platform SDK for Windows Server 2003 R2
なんで直前のスレの流れさえ読まないのか不思議
ごめん,直前の話は ATL3.x だと思ってた… Visual Studio 2005 Professional Edition 90 日間評価版 てのをちょっと入れてみます.
>>172 Windows Server 2003 SP1 DDK ダウンロードしてみたけど ATL3.0 だった (´・ω・`)
評価版まだ落ちてこない…
>>173 内の環境では
C:\WinDDK\6001.17121\inc\crt\atl71
に入ってる
WTLの開発2ヶ月くらい停まってるな。 Vista完全対応はあきらめるしかないのか?
たしかViksoe氏がVS2008とvista
途中で送信してもた・・ 逝ってくる
つか全体的にネタないよな。 本家もそうだしviksoe.dkもSoさんとこも最近は。
質問です。CWindow::Create()で ::CreateWindow(..., CW_USEDEFAULT, CW_USEDEFAULT, w, h, ...) と同等のことやりたい場合、RECTはどう設定すれば良いですか? 単純に{ CW_USEDEFAULT, CW_USEDEFAULT, w, h }と設定した場合、 うまく反映されないようです(非常に小さなウィンドウが出ます)
180 :
179 :2008/05/04(日) 22:58:28
補足、少々言葉足らずでした。 要は幅、高さのみ指定でウィンドウ位置は システムデフォルトにしたかっただけです。 どうかご指導いただければ幸いです。
RECT rc = CWindow::rcDefault; rc.right = rc.left + w; rc.bottom = rc.top + h; Create(NULL, rc); 俺はこうしてるが、正解かどうかは知らん
ソース見ると幅と高さをright-left, bottom-topで求めてるな。
だったら { CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT + w, CW_USEDEFAULT + h } にしたらいいんじゃね?
...,CRect( rcDefault ) + CRect(0,0,w,h),... というのは如何
186 :
179 :2008/05/04(日) 23:56:48
>>184 でうまくできました。
皆様ありがとうございます。
WTLのappwizは、なんでFrameWndのスタイルに、 WS_CLIPCHILDRENを指定してないんだ? ツールバーがちらつくじゃん。 まぁ、付ければいいんだけどさあ。
今まで知らなくてずっとWS_EX_COMPOSIT付けてたよ・・・
Win32のウィザードでも指定されないから、 MSの方針で、知らん奴はリサイズで点滅するアプリ作っとけって事だろうな。
>>187 それどこのことよ
うちのはSvn最新だけど
CFrameWindowImplに余計な指定しなければATL::CFrameWinTraitsが 適用されてWS_CLIPCHILDRENで作成されるはずだが。
CAxDialogImpl を使って ダイアログに WebBrowser を貼り付けるといますが 表示しているHTMLにTABを押しても次のコントロールへ移動してくれません。 対応するにはどうしたらよいでしょうか?
TAB押していったらHTMLのリンクを移動して 最後のリンクまできたら次のコントロールに移動するんじゃなかったっけ
ATLのシンプルオブジェクトウィザードで、スレッドモデルを選択しますが、 シングルとアパートメントの違いってなんですか? 両方ともSTAですよね。 シングルはCOM初期化のプライマリスレッドでのみ実行されるとあるので、 アパートメントの方は、プライマリスレッド以外に作られるのかと思いました。 でも、両者のウィザードが生成するコードに違いが見あたりません。 FinalContruct()で、GetCurrentThreadId()を呼んで、スレッドIDを見ましたが、 両方ともプライマリスレッドのIDでした。 違いはあるんでしょうか?
アパートメントだと、オブジェクトを作成したスレッドとは別のスレッドからメソッドを呼ぶと、 メッセージキューを利用してマーシャリングされて呼ばれる事になるが、 シングルの場合は、作成したスレッド以外からの呼び出しは不可。 ただし、アパートメントの場合マーシャリング時は引数の生存期間が変わってくるため、 それを意識した実装をしておく必要がある。 って感じでいいんだっけ?
新MFCのRibbonとかテーマ機能がWTLで使えるようになるのはいつですか?><
もう少し待って!
自分で作ってパッチを送ればいいんじゃね?
200 :
194 :2008/06/07(土) 22:51:46
あれかな、シングルだと、COMサーバー自信がプライマリスレッドからしか作れない、ということだろうか?? クライアントから作ることはできないのかな。
VS2003+WTL7.5で開発していたアプリケーションを VS2008+WTL8.0でビルドし直したら、ビジュアルスタイルが 適用されないんだけど、何が原因だろう? 埋め込まれているマニフェストを確認すると、ちゃんと Microsoft.Windows.Common-Controlsの項目が入っているんだが。
VS2005からだと思うが、stdafx.hのpragmaで指定するようになった。 こういうやつ #if defined _M_IX86 #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='31BF3856AD364E35' language='*'\"") #elif defined _M_IA64 #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='31BF3856AD364E35' language='*'\"") #elif defined _M_X64 #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken=publicKeyToken='31BF3856AD364E35'language='*'\"") #else #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='31BF3856AD364E35' language='*'\"") #endif とりあえず空でWTLプロジェクト作ってstdafx.hの該当行コピれ。
IE8が出てくると、ATLの需要が増えるような希ガス。 まだまだ、ActiveX多いし。
Vistaだとリバーの描画が崩れるのよね たいがいやわ
>>202 いや、それは自分で書いて追加してあるんだけど、駄目だった。
理由は分からないが、一応自己解決。
プロパティマネージャから「Upgrade From VC 7.1」を削除したら
何故かビジュアルスタイルが適用された。
その後、再現しようと思って古いプロジェクトファイルからもう一度
自動変換させたら、Upgrade From VC 7.1があっても適用される。
わけがわからんw
途中で一度PCを再起動したから、その影響?
Vistaだとマニフェストがキャッシュされるとかいう話があるから、
それが悪さしてたのかな?
CCommandBarCtrlのボタンの無効化をしたいのですが、 MFCのUPDATE_COMMAND_UI のような機能はあるのでしょうか? EnableButtonだけではダメでした・・・
207 :
206 :2008/06/16(月) 16:27:35
BEGIN_UPDATE_UI_MAPの後に UPDATE_ELEMENT(ID_TEST, UPDUI_MENUPOPUP|UPDUI_TOOLBAR) OnIdleで UIEnable(ID_TEST,FALSE); で出来ました。
うん、それでできると思った。
じゃあ俺もそう思った
ツールバーのボタンをチェックスタイルにするには どうすればできますか? SetButtonInfoを試してみたのですが、 GetButtonInfoが失敗して撃沈。 TBUTTON系のAPIが失敗するのも妙 何でだろ・・・
211 :
210 :2008/06/17(火) 17:31:18
UPDATE_ELEMENT(ID_TEST,UPDUI_MENUPOPUP | UPDUI_TOOLBAR) を追加 UISetCheck で変更でできました。
うん、それでできると思った。
じゃあ俺もそう思った
質問はしょぼいけど、ちゃんと解決方法も書くのはえらいな
自己解決しました^^
↑ぐぐりまくって、おお、ようやく求めてた質問みっけた! で、このオチだと泣けるよな。
eGUI++ エグイぷらぷら? イヤン
流行るとは思えん。 ポータブルじゃないのに、 わざわざまったく異なる思想のコードを書きたいとは思わんし、 あと、識別子の命名がやたらに省略しててキモい。 つーか今どきstd::stringを使っていて、 しかもWindowsネイティブ限定とか、ふざけているとしか思えん。
Viksoe先生頼みじゃ先細りだしな ATLはともかく
>>219 一応、こんな記述になっているようだが。
#include <string>
#ifdef UNICODE
typedef std::wstring string;
#else
typedef std::string string;
#endif
きたねぇ実装だな。 _tstringよかマシだが
そんなにCStringが好きか
std::stringの仕様が嫌いなだけだ
ATL::CStringAとATL::CStringWは好き。 ANSIとUNICODEの変換が楽すぎる
昔はUSES_CONVERSIONでT2CWとか書いてたんだよなあ。 テンプレートベースになって、明示的にCStringAとCStringWが使い分けられるのが最強すぎる。
そんな便利だとは知らなかった。 VC++6時代と同じ使い方しかしてなかった。 このスレ見てて良かった。
つーかC++なんだから、TCHARなんて使わずオーバーロードしてくれりゃいいのに MFC/ATL/WTLって手抜きだよな
WTLはTCHARしかないんだよなあ CStringも他のウィンドウ関連のAPIも たまにANSIとUNICODE両方用意して欲しいと思うことがある
は?
std:exceptionってUNICODEないよね
STLの質問はSTLスレで。 eGUI++の愚痴は作者の掲示板で。
>>230 あるじゃん。
ま、ATL::CStringのほうが便利だな。
ATLに依存しないコピー実装もCode Projectあたりにあったと思うが。
>>232 なかったはず。おかげで例外に文字列渡すときは、いちいちW->A変換してる。
236 :
230 :2008/06/21(土) 20:39:45
>>234 atlmisc.h見てみたらTCHARしか使ってないように見えたけど…
話がずれてねーか? メソッドなりのインタフェースが基本的にTCHARベースしかないのが アレだって話じゃねーの APIはCリンケージだからWとAの二つがあってマクロで切り替えだが 明示的に指定することも常に可能 WTLはC++だからオーバーロードが本当はベストだけど TCHAR版の「一つ」しかない点でCのAPIにすら劣るよなって話
C++の標準規格策定より遙か前に出来たMFCの命名規則をそのまま引きずってるので 多くは求めない方が良いかと
WTLぐらいうっすぃラッパーなら徹底的にオーバーロードメソッドこしらえるよりも 必要なとこだけAPI直呼びすりゃいいんじゃねーの? でまかり通りそうだがな。
>>239 いや、テンプレートで型パラメータ化しろって言ってんじゃないよ
「オーバーロード」だぞ?
いつからあると思ってんだよ
TCHARで困るって、今時Win9x系に対応するつもりか? まあMSLU使えば、それなりに何とかできるかもしれんが。
>>242 TCHARオンリーは、TCHAR強要してるのと同じだろ
さもなくば-DUNICODE前提、とかいうソースになる
LPCSTR, LPCWSTRのオーバーライドがありゃ、CStringだろうがCStringWだろうが
CStringAだろうがstd::stringだろうがstd::wstringだろうが何でもそのまま使える
「正しい」ソースとしてだ
そしてAPIプログラミングならそれは可能だ
TCHARオンリーでちゃんとやりたきゃ、CA2Tとかそういう下らない変換テンプレートを
いつもいつも使うことになる
どっちがいいか、わかりきってるじゃないか
MSは単にMFCやATLを手抜きして、ユーザに手間を押し付けてるだけなんだよ
244 :
242 :2008/06/22(日) 01:08:36
CString()で囲むのがそんなに面倒なのかね。 その一手間を惜しむが故に、文字列絡みの全メソッドにオーバーロードを付けるのか? それこそナンセンスじゃね?
>>244 マイクロソフト製品のユーザ数を理解しろよ
それが「製品」であることもな
それがよくデザインされていればされていれば、皆が幸せになれる
CString()で囲むだって?
手間なだけでなく、それが必要でないとき(例えば実際にはW->W変換であるような
場合)でもコンストラクタとコピーが実行されて確実に効率が落ちるじゃないか
冗談だろ
もう自前で何とかするのに慣れっこ。
ここで不満言ってどうする msdnフォーラムでぼやけ。 中の人が聞いてくれるかも知れないよ ああWTLの場合はsf.netに参加すればコミットできるか
必然性が分からんな
ダイアログに貼り付けたツリーコントロールに WM_LBUTTONDOWNハンドラを追加するにはどうすればよいのでしょうか? ダイアログにWM_LBUTTONDOWNを追加してみたのですが、 ツリーコントロールをクリックしても ハンドラが呼ばれません。(その外だと呼ばれるのです)
手動でやれば? コントロールIDとイベントID入れて自前でハンドラ作成。 まさかWindowsプログラム自体はじめて?
251 :
249 :2008/06/22(日) 16:03:52
NOTIFY_HANDLER(IDC_TREE1, NM_CLICK, OnNMClickTree1) を追加 LRESULT OnNMClickTree1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/); でできました。
うん、それでできると思った。 じゃあ俺もそう思った
俺はサブクラス化だと思った
ATLらしくCContainedWindowもあり
MFCとWTLどっちが楽なんですか
使ってみれば分かる
WTLってかATLもだけど、ライブラリ化するときは割と気をつけないといけない。 内部的な仕組み理解せずにやってると、 リソースやメッセージポンプがEXEとDLLで違うとこを指したりして おかしくなってはまったり。 MFCはそういう心配はあまりない。
MFCが圧倒的に楽なのでは。WTLは仕事には使えないだろうし…。
2008でMFCがだいぶ進化してる。
で、またWinSxSにでかいDLLが追加と
WTL9.0まだー?
現状のリポジトリのバージョンでいいからとりあえず9.0版として出してほしいね
264 :
デフォルトの名無しさん :2008/07/10(木) 21:36:38
ATL9.0まだー? ただで配布しれ。金はびた一文出したくない
体験版インスコしてatlmfcだけコピーしてくればいいお
┌─────金・女 ────┐ │ .↓ - - - - - - - - - - -裏- - - - - - - - - - - - ┌──────┐ ┌──────┐ │ アンパンマン ├─攻撃→│ バイキンマン │ └──────┘ └───┬──┘ ↑ │ 感謝・金 攻撃 │ ↓ ┌─┴────────────────┐ │ 市 民 ..│ └──────────────────┘
ひさーーーーしぶりにリポジトリがちょっと更新されてるな。 でもbugfixか・・・
WindowsXP上のVS2005でWTL8.0、ATL7.0使って マルチスレッドSDIにしてCFileDialogなり自前でファイル選択ダイアログ表示させて 右クリックでコンテキストメニュー出したあとにダイアログ閉じると プログラム終了するときになってヒープメモリのエラーが出るんだけれどどうすりゃいいんでしょう? 普通のSDIやMFCだと出ないし_CrtSetDbgFlagと_CrtCheckMemory使っても検出されない。
>>268 うちは通常動作では問題はないけど、AppVerifierでBasicのテストをすると同様にヒープエラーが発生。
ただいま原因調査中。
ちなみに環境はVS2008Pro/WTL8.0ね。
WTLとboostとResEditインスコしたけど、他にコレ入れとけってのありますか
プロパティーシートを使っているのですが、ページからシートのメンバ変数に アクセスするには、どうするのがWTLらしい記述になりますか?
WTLあんま関係ないが、IPropertyPageを実装する
Google Chrome にWTLのコードがあるらしいじゃないか。
ATLかと思ったが
ATLだったらオープンソースにできないじゃない
ATLを使わないWTLってどこにあんの? あるなら欲しいな。
自分も欲しい。
GPLwwwwww クラステンプレートなんだからもっと緩いライセンスであるべきだろ
280 :
277 :2008/09/21(日) 21:41:35
>>278 サンクスです。ライセンスがGPLなのは、団子氏の指摘通りちょっと残念だけど、
ヘッダとライブラリを読むようにすれば、VC++2005EEでもビルドできるので、
完全フリーな開発が可能という点では、オープンソースプロジェクトなんかで
結構使えるかも。
使えねーよwwwwww GPLうぇpおpぽあqwせdrftghyじゅきぉpwwwww
ごめん・・・悪かった。
>>280 そのページにはGPL3ってかいてるけど、
wtl.zipダウンロードして中をみると
wtlなヘッダ.h全てに
// This is a part of the Windows Template Library Plus.
// All rights reserved.
// The code and information is provided "as-is" without
// warranty of any kind, either expressed or implied.
ってあって、ちょっとみたかぎりでは同梱物にGPLのような
記述なさそうな気がする. GPLなライセンステキスト無いし
(ただ、うちの環境ではsetup.exe実行したらハングして
動かなかったので、そちらで何かライセンス表示されてたら
スマソ)
GPL3にして変更が追いついてないだけなのかGPL3が誤記なのか
わかんないけど
>>283 その部分はWTLからのコピペな気がするw
というか全体的に(ry
もし、WTLからのコピペが一部でもあれば、CPLからGPLへのリライセンスで違法な気がする…。ちょっと危ないかも。
>>285 ATLからのコピペ改変もあるような。。。
288 :
デフォルトの名無しさん :2008/09/26(金) 14:38:27
I am WTL++'s father "All rights reserved." is removed from all header files
そもそもエキスプレスにATLが入っていれば何の問題もないんだが
そもそもエキスプレスにATLが入っていれば何の問題もないんだが
そもそもエキスプレスにATLが入っていれば何の問題もないんだが
三度も言うほど大事なことでもないぞ
warning C4996: '_vswprintf': This function or variable may be unsafe. Consider using vswprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\program files\microsoft visual studio 9.0\vc\include\wchar.h(773) : '_vswprintf' の宣言を確認してください。 このエラーは消えないの?
>>293 どうしたら消えるかそこに書いてあるだろ。
#ifndef _SECURE_ATL #define _SECURE_ATL 1 #endif // _SECURE_ATL
確かATL9では_SECURE_ATLは使われなくなったはず
>>293 『_vswprintf』 : この関数または変数はおそらく安全ではないです。代わりにvswprintf_sを使うことを検討してください。この警告を無視するには、_CTR_SECURE_NO_WARNINGSを使ってください。詳細はオンラインヘルプをご覧ください。
って書いてるように見える。 _SECURE_ATLの話は関係ない話?
>>297 問題部分のソース
#if _SECURE_ATL && !defined(_ATL_MIN_CRT) && !defined(_WIN32_WCE)
return _vstprintf_s(lpstrBuff, cchBuff, lpstrFormat, args);
#else
cchBuff; // Avoid unused argument warning
return _vstprintf(lpstrBuff, lpstrFormat, args);
#endif
いや293はwchar.hで発生してるのか。 298はatlapp.hのやつだ。 俺のとこじゃwchar.hでwarningは出ないな。
俺のとこだとwchar.hの問題のとこは、直前に #pragma warning(disable:4141 4996) があるから、C4996は出ないんだが。 ひょっとして293はSP1当ててないVS2008なのかな?
WTLのやつでしよ
302 :
デフォルトの名無しさん :2008/10/17(金) 15:07:08
wtl使いたいけど、express editionを使っていて、sdkについているatlが使いたくないという趣味的な理由で、 wtlを使うために、atlから必要な部分だけを引っこ抜いて、 wtlも、その引っこ抜いたやつを使うように修正した場合、 1. コンパイルしたexeファイルを配布したらライセンス上アウトなのか 2. 引っこ抜いたり、修正したソースコードを配布したらライセンス上アウトなのか 3. すでにそういう行為をした時点でライセンス上アウトなのか って、教えてもらえないですか。 手元にはatlから引っこ抜いてきたソースと、wtlをそれを使えるよう修正にしたソースと、 それをコンパイルしたexeがあるという仮定です。 大変な作業だけど。
WTL自体の修正はソース開示義務が発生するのでは? ATLはライセンス違反になりそう。
それで問題にならないのなら誰も苦労してないって
Ms-PLだと変更の公開義務は無いよ。
ATL依存箇所を、ソース見ずに一から作り直せば良いんかな。CWindowImplとか…。 ちなみに、ATL3時代のCSimpleArrayやCSimpleMapは結構好きだったんだけど、 msvcpxx.dll非依存で代替になるオープンソースのクラスってなんかあんだろか?
307 :
デフォルトの名無しさん :2008/10/18(土) 18:30:02
STL
>307 STLとは相性が悪かった記憶が…
309 :
デフォルトの名無しさん :2008/10/18(土) 20:07:42
stlベースにライブラリ作るとかありえないわ 気持ち悪すぎて
310 :
306 :2008/10/18(土) 20:58:18
VCでSTL使うと、msvcpxx.dll依存になってしまうんで…。 実際に使うのって、vectorとmapくらいだし、iteratorの仕組みも 個人的にはあまり好きになれないんで…。
依存になっちまうのは、お前がそう設定しているからだろ 静的リンクしろ
STLがダサイのは同意
STL=くさっとる WTL=おわっとる ATL=にあっとる
314 :
デフォルトの名無しさん :2008/10/18(土) 21:49:55
std::cout << "そんなことないよ。" << std::endl * * * ウソです + n ∧_∧ n + (ヨ(* ´∀`)E) Y Y *
STL使いまくりの自分は異端なんかね。 algorithm, functionalを中心にすべて必須だわ。
316 :
デフォルトの名無しさん :2008/10/18(土) 22:27:08
むしろ設計が異端
このスレ的には
>>315 は異端。
一般的にはこのスレが異端。
318 :
デフォルトの名無しさん :2008/10/18(土) 22:40:08
そうは言うけどMFCってSTLより古いんだぜ それと基本仕様を共有するATLはイケてるんじゃね?
>>314 iostreamはどちらかというとSTL関係ない。
勝手にスレの総意にするなよw STL無しなんてありえんわ
C++ライブラリのiostreamじゃない部分は全てSTLだと思ってるんだが vector<bool>を特殊扱いしてるのは言語処理系としての機能だっけ?
STLはオブジェクト指向的にアリエナイ
C++はマルチパラダイム言語だから。 オブジェクト指向を追求したCの派生言語はあくまでObjective-C
>>321 いや、言語規格として要求している。
そんなvector<bool>もコンテナの要件を満たしてイテレータが使えるんだからSTLの一部と言って差し支えないと思う。
>>323 後半
あるいはJavaも
stringはSTLじゃないよね
326 :
デフォルトの名無しさん :2008/10/19(日) 00:22:57
コンテナに入らないスマートポインタが平然と放置されてたり
でもCComPtrとCComQIPtrは入れられるよね?
328 :
デフォルトの名無しさん :2008/10/19(日) 01:17:43
fun^10×int^40=Ir2
auto_ptrはたまにreleaseが必要な時に使う
>>302 2だけがだめだろう
1はどうでもいいし、3などモラルの問題
てか、みんなやっとる
332 :
デフォルトの名無しさん :2008/10/20(月) 15:54:51
ATLもMS-PL?
だからStandardの3万くらい払え
Upgでいいんだから、19800円
いやだ、ソフトに金を払うという行為自体が気に食わない
犬糞でもつかってろ
337 :
デフォルトの名無しさん :2008/11/03(月) 09:27:37
wtl8.0でwin98サポートさせたいんだけど サクッっと変えられちゃうフラグあります?
338 :
デフォルトの名無しさん :2008/11/09(日) 02:25:53
Microsoft Windows Server 2003 R2 Platform SDK 落としてATL3.0ヘッダを探したけど、 atlwin.hとかatlctrls.hとかがどこにもない。 atlbase.hはあるけど・・・どこにあるの?
SDKに入っているわけないだろw DDKの方にあるんだよ
>>339 ごめんsrcフォルダばっか見てた・・・。
Includeフォルダインスコしてみたら、あったわ。
>>337 windows.hやatl,wtlのヘッダ読み込む前に
(コマンドラインで-Dするのもヘッダで#defineするのでも)
#define WINVER 0x0400
#define _WIN32_WINNT 0x0400
等のバージョン・マクロを定義して
win98にもある機能の範囲で使って作ってる分には動いたよ。
(どんなバージョンマクロがどれくらいあるのかは知らない)
wtl8.0よりむしろ、コンパイラ(ライブラリ、ランタイム)でwin98用の
exe作れるかが問題で、vs2003は大丈夫だったけど
vs2008はダメかも (少なくともスタンダードではダメだった)
_WIN32_WINDOWS _WIN32_IE も設定してみたら?
WTLなんとかしてVS2008ProfessionalEditionで使えるようになりませんか?
なる
普通に使える。 AppWizardなら2005用のスクリプトを数行書き換えるだけでそのままインスコ
あーWTLインスコに半日近くかかってしまった(´・д・`) ディレクトリ設定がどこにあるのかわからんでvsvars32.batとインスコスクリプトをずっと弄ってたという
VC2008 から ATL がWindows98でサポートされなくなった・・・ なんでだよおおおおおおおおおおおおおおおおおおおおおおおおおおおおお 「うにこーどで全部書けて素敵ね☆」 じゃねええええええええええ!!!!!!!!!!!!
ATL関係なく、VC2008自体がWindows 98で動くコードを出力できない。
VC2008の出力する実行ファイルに特に特殊な点は無いし 普通にWindows98で動きそうだが ランタイムライブラリなどは修正する必要があるかもしれないが
>>349 リンカの/SUBSYSTEMでの最低バージョンの省略時の値が5.0になっていて、
しかも5.0未満の値を指定するとエラーになる。
そのため、4.1であるWindows 98では実行できないというわけ。
VC2008 のコンパイラが勝手に埋め込んでるバージョンチェック処理って マクロとかでつぶせないもんかね あのメッセージさえ回避できれば動きそうじゃね? M$のマーケティングかも知れないけど。
バイナリエディタでそこを書き換えてみたが、たしか別のエラー吐いて駄目だった。 めんどくさくなって、それ以上原因追究しなかったけどさ。
CRTをスタティックリンクしたところで CRT自体が9x系サポートしてねえんじゃねえの そこまでして2008に9x系向けのコードを吐かせたい理由がわからんが MS自体が既にサポートしてねえOSなのに
サポート終わっても意外と98ユーザいるじゃねーか (開発としてはマジ迷惑な話だが) 98SEとかMeとかのユーザ向けにはVS2008はアウトか。 Meはさすがにいねーかww
MSDN会員ならダウングレード権があるから6.0でも使えよ でも.NET 2002は黒歴史な。Intelコンパイラも放置してる失敗作。パネェ
俺はずっとパネェ黒歴史を使ってきてたのか・・・or2
本当は 2003 相当のものを出したかったんだろうが、 あまりにも間が空きすぎるのを避けて、 無理に 2002 に出したんだろうなあって感じの代物。 C++ 規格準拠率低いし。
Vistaに似てるな
.NET 2003は/G6 /G7とかの最適化オプションがあった最後のバージョン
/Oa /Owもね!
ATL3.0で GetCurrentMessage()用のm_pCurrentMsgはどこで更新されてるの? ソース見るけどどこにもない
あとサンクをHeapAllocなりVirtualAllocで動的確保してるのはなぜ? インスタンスが増えるだけメモリ使用量増えるから?
>>362 CWindowImplBaseT< TBase, TWinTraits >::WindowProc
>>363 DEP対策
>>364 つまりProcessWindowMessage内でしか有効でないわけですね?
>DEP対策
それはHeapAllocからVirtualAllocへの置き換えでしょ
_stdcallthunkを静的ではなく動的にAllocしてるのは何故かなってことです
>>365 ウィンドウのインスタンスがどこに置かれてもいいようにじゃないの?
DEP以前でも、実行不可領域にインスタンス作られる可能性はあるし。
>>365 サンクはウィンドウごとに作らないといけないため。
サンクにはそれぞれthisが刻み込まれていて、他のウィンドウには使いまわせない。
>>366 なるほど。
このトリッキーさ(マシン語埋め込み)はまた将来的にDEPみたいな問題が起こることはないですかね
このサンクの部分をC++だけで実現できないものかな
>>367 いやそれはクラスのメンバであれば関係ないでしょ
>368 >このサンクの部分をC++だけで実現できないものかな 無理。 >いやそれはクラスのメンバであれば関係ないでしょ 意味不明。
>>369 > >いやそれはクラスのメンバであれば関係ないでしょ
> 意味不明。
ウィンドウクラスは何故_stdcallthunkを直接メンバにせず
_stdcallthunkを動的に作成するCDynamicStdCallThunkをメンバにしているのか
ってことだと思う。
少なくともATL3.0では、メンバに CWndProcThunkを直接持ってたヨ
dep!
>>371 CWndProcThunkは関係ないヨ
_stdcallthunkの話でしょ
メンバとして直接もってたATL3.0(CWndProcThunk._WndProcThunk がコード領域)がDEPに見事に引っかかるから、dyncamicに 持つようにしたんでそ
3ループ目突入か・・・
あえてループにつっこむ
>>374 DEP関係はHeapAlloc→VirtualAllocなんだって
1ヶ月ぶりに見に来てみましたよっと サンクの件でループとな サンクで一度はアタマこんがらがるのは、俺だけでいい。とか思ってたが そうでもなかったようだ
誰かまとめてくれよ。馬鹿にはついていけん。
基本的に馬鹿な質問ですが教えてください。 (クラスの)代替メッセージマップって意味あるの? どのようなときに使うのですか? 継承の利点が生かせてないような・・・?
>>380 そうですか。どうもです。
なんかそこのリンク先解説や、MSDNの解説などを見ていても
あえてCHAIN_MSG_MAP_ALTを使う利点が曖昧だなーっと思っていたので・・・
> CHAIN_MSG_MAP_ALT WTLのコントロールで使われてるような使い方をすると思う
テンプレートの縛りの中でポリモーフィズムもどきを実現するために必要
CMDIFrameWindowImplをメインウィンドウにしているときに子ウィンドウを最大化すると メインウィンドウのタイトルに " - [子ウィンドウのタイトル]" が自動的につくようですが、 これをやめさせるにはどうしたらいいんでしょうか?
Windowの上にDialogを表示したくて SetWindowPosを使ったのですが、 すぐにWindowの下にDialogが行ってしまいます。 WTL内部でZオーダーを自動更新しているのかな?
んなわけないと思うが
>>385 そのウインドウをオーナーにしたらまずいの?
Dialog::Createへ渡すハンドルを Viewから MainFrame に変更したらうまくいきました。
ドッキングウィンドウ実現するのって結構難しいんだな・・ 実装に苦戦中
viksoe氏の作りかけ版を参考にすればいいと思う
WTL使ってまともに完成したソフトってあるの?
その質問に何の意味があるのか
どのくらい使われてるのか知りたい
Donut
忘れたけどどこかの商用ソフトも使ってた
Windows Movie Makerとかもそうじゃなかったっけ。 あと、VMWareの画面がWTLっぽかった気がする。 (ウィンドウクラス名がそれっぽかった)
WTL8+VC2008EEのAppWizardで作ったSDI+リストビューのリストの表示が オーナーデータにしてもすげーレスポンス悪いんだけど何故かさっぱりわからねぇ サンプルのWTLExplorerをビルドしたリスト部分はサクサクなのに と思って弄ってたら SetFont(AtlGetDefaultGuiFont()); これが原因だった DEFAULT_GUI_FONTってデザインのどこのフォントだっけ?
どれにも該当しない盲腸。
400
>>399 何を今更
他プラットフォームに移植するの場合の盲腸だから
もうすぐGTKに取って代わられるって言うのに
GTK?w Windowsでの安定動作は絶望的だなオイ まだQtのほうがわかる ってKonquerorやんけ。
むしろGoogleがWTLを他プラットフォームに移植してくれ!w
アホの子のスレか
GoogleがGIMP for Win32を安定化してくれるんならそれはそれで歓迎したい。
現実にはこうじゃねーの?
Win32: WTL
Linuxその他: GTK
MacOS: Cocoa or Carbon
流石にGTKオンリーは無いと思うよ。
MacOSネイティブの(X11を介さない)GTKって無いからその時点で導入の敷居が高くなっちゃう。
Chromeはシンプルで取っつきやすいUIによってFirefoxとの差別化をはかってるのに
たとえOSXのディスクに入ってるオプションであるにしても、標準でインストールされないX11を
わざわざインストールさせる手間を煩わせたら元も子もない。
とりあえずマカーでごめんなさい。
>>403 俺がWTLで作ったアプリもWineでそこそこ動いてるらしいんで(画面の再描画周りが多少怪しいが)
いっそWineベースでいいんじゃないかなと思ってる。
そこなんで1と2で分かれてるの ほとんど内容一緒なんだからページを1つにして 注釈でこのバージョンではこう、ってやってくれたほうが・・・ そのほうが作りやすかったろうに1から作り直してるね
VC6.0版と、.NET以降のIDE+AppWizardに合わせた版だろ 書籍の改訂と同じ感覚だな。 逆に、プロだなと思った。
プログラマ的にはVCS上でブランチ切ったりする感覚
>>408 漏れは今の方がすっきりしてて好きだわ
今と昔の違いを知る必要がなければ,新規は2版見ればいいし,
昔通りやりたければ1版見るだけでいいし
各バージョンの変更点まで2つに分けてあるのはご愛嬌? ところでWTLで、ATLのNotifyHandlerのidCtrl引数が消えてるのは >This identifier is not guaranteed to be unique. by MSDN のため?
リストビューのちらつきが気になるのでCDoubleBufferWindowImplを基底クラスに指定しましたが改善されません。 何とかならないでしょうか・・・
最後の手段だが WS_EX_COMPOSITED
T *pT = static_cast<T*>(this); pT->メンバ関数; ↑これよくみるけどなんですか?普通に メンバ関数; だめなの?
だめ。仮想関数のオーバーヘッドを排除するためだし。
単純に親クラスのメンバにアクセスしても オーバーヘッドが起こるの?
何言ってるのか分からないけど、仮想関数を使わず派生クラスのメンバ関数呼んで貰う為のものだから。
たとえばCFrameWindowImplのUpdateLayoutなんかもこのやり方ですよね。(WTL7.5) これも仮想関数対策?
>>415 キャストする前のthisのクラスには、そのメンバ関数が存在しない。要するにこんな感じ。
class Foo {
void f() {
static_cast<Bar*>(this)->g();
}
};
class Bar : Foo {
void g() {}
};
Bar b;
b.f();
>>419 そのままだと基底クラスから派生クラスのメソッドは呼べねぇんだよ
まあ汚いコードではある。
しかし、CRTPという名前が付く程度には知られている。
みなさんありがとう。
>>416 >>418 >>420 >>421 >>422 >>423 仮想関数の代わりが出来るというのが理解できました
例えばCFrameWindowImpl::OnSizeのUpdateLayoutや
CFrameWindowImpl::CreateExのCreateなどなどは
自作の派生クラス(例えばMyWindow)でオーバーライド可能→
基底クラスCFrameWindowImplから派生クラスMyWindowのUpdateLayoutメソッドが呼べる
てことですね?でこれがCRTP
少し違う。 CFrameWindowImpl 自体は UpdateLayout などを持たない。 だからオーバーライドではない。 UpdateLayout が定義されていれば OnSize が呼べるし、 UpdateLayout が定義されていなければ OnSize が呼べない。
>>425 続いてありがとうございます。ということは
1.CFrameWindowImplBase::UpdateLayoutを
2.オーバーライドしたMyWindow::UpdateLayoutを
3.CFrameWindowImpl::OnSize内にて(自動で)呼び出せる機能
って解釈が正しい?
常にCFrameWindowImplBase::UpdateLayout使うだけならCRTPはイラナイと思うし・・・
CRTPを使って実現したい事は、仮想関数による多相とほぼ同じ。 違うのはCRTPが静的に(コンパイル時に)解決されるため 子クラスの型、内部型を扱える事。 その帰結として子クラスの関数呼び出しに仮想関数呼び出しの オーバーヘッドが掛からない利点がある。 欠点は当然ながら動的な(実行時の)多相性を得られない事だ。
CButtonTとかCStaticTとかに指定するTBaseはCWindow以外にありえるんですか?
自作
>430 CWindowの派生クラス。 CButtonTとかでオーバーライドしてる挙動は変えずに カスタムしたい場合に使ったり。
VS2005で、CA2WやCA2CTなどはコンパイル通るのに、 CA2CWやCW2CAだと「識別子が見つかりませんでした」と言われるんですけど、 なにか別途インクルードするものでもありますか?
AppWizardは入るけど、WTLHelperは2008では動かんのう。。。
viksoe
こやつめw
なるほど
so-soさんがモバイルコーナー始めてるよ みんな見てる?
WinMoでも使えるのか 機会があれば使ってみたいなぁ
うぃんもとか変な略し方するんじゃねえ
>>440 俺は439じゃないが、海外だとWinMoって略す事が多いんだよ。
ついでなので。
WindowsMobile でも普通に使える。
実際WTLで作って、アプリをリリースしたし。
442 :
デフォルトの名無しさん :2009/04/23(木) 01:06:42
WTL って、サポートされていないライブラリってだけで、 商用で使ってもかなり満足できる性能・機能なのに、 なかなか国内では率先して使ってる企業ないよな。 ATL はそこそこ知ってる奴いるけど、WTL って何?ばかり。
そうですね
WTL使ってるてどうやったら確かめられるの? MFCはDLL読むからわかるけど。
そうですね
まともに日本語化されたドキュメントが存在しない時点で終わってる気がする
ソース解読汁
448 :
デフォルトの名無しさん :2009/04/25(土) 23:52:22
WTL使おうにもexpressにATLがないのが致命的
450 :
デフォルトの名無しさん :2009/05/05(火) 16:52:15
ちょっと質問です。 frame と view の切り分けってどうしてる? view が超便利なのは、リソースの Dialog をそのまま拾えて、 さらに frame が使用する view を切り替えて1つのフレームで 複数のウィンドウを作れるところが魅力だけど、 view の上に TAB を置いたり、view で切り替えたくない固定の コントロールを frame 上におきたい場合、どういう考え方で重ねてる? frame の上に frame 、さらにその上に frame で view を乗せる、見たいにできるのか、 frame の上に複数の view を重ねたり並べたりするのが常套手段なのか、 メッセージの伝播をどうやるのかが分からなくて、暗礁に乗り上げています。 普通はこうやる、的なアドバイスをください。 駄文ですいません。
>>450 普通はどうやるかは知らないけど、frameの上のメインのviewに、複数の子viewを重ねたり並べたりしてます。
452 :
450 :2009/05/06(水) 09:31:50
>>451 なるほど、view は重ねて処理できるのか。
ちなみに、メッセージの受け渡しはどのようにやってますか?
frame→view のように PreTrancelateMessage を実装してもうまく動かないので、
なにかテクニックがあるかと思うのですが、どのようにやればいいんでしょうか。
>>452 メッセージの受け渡しは、viewの親子関係でツリー状にやってます。
PreTrancelateMessageは、親viewのクラスのから子viewのクラスのを呼び出すようになってます。
複雑なメッセージ処理はしてないので、役に立たなかったらスマソ
バージョン番号変えただけ・・・?
Changes: - changed version number - updated CPL link in headers - fixed warning for _vstprintf - added wizard setup programs for VS2008
- added wizard setup programs for VS2008 遅すぎるわw
CScrollWindowImplさんはどうやってスクロールバーを表示させてるのでしょうか WS_VSCROLLとか見当たらないですが
スタイルについてなくても SetScrollInfo(SB_HORZ, ... とかやれば表示される
>>461 そうなんだ!!
若干スレ違いでしたねアリガトウ
ちょっと細かいとこなんだけど、たまたま使ってて見てみたら CCustomWaitCursorって親でLoadCursorして子でLoadImageしてるけどいいの?
464 :
デフォルトの名無しさん :2009/05/27(水) 21:11:33
VS2003にてATLコントロールを作成してるんですが、 メソッド追加ウィザードのパラメータの属性のoutとretvalが無効になっていて 指定出来ない理由が全くわかりません。 どなたか教えてください。
465 :
デフォルトの名無しさん :2009/05/31(日) 00:52:50
>>463 システムカーソルをロードしてるだけだから問題ないと思う
クラス名 + T クラス名 + Impl この命名規則もしくは意味を誰か詳しい方教えてください・・・・
template implement
CFrameWindowImplを継承したクラスで、メンバーにスプリッタウィンドウを入れ、OnCreate()内で m_hWndClient = m_splitter.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS); m_splitter.SetSplitterExtendStyle(SPLIT_RIGHTALIGNED); m_splitter.SetSplitterPosPct(75); としてみたところ、ウィンドウ枠をドラッグしてサイズを変更した際に左ペインのサイズが突然最小になってしまいました。 何か対処法はありませんか?
UpdateLayoutをしないといけません
471 :
469 :2009/06/24(水) 14:34:08
UpdateLayoutを実行しましたがうまくいきませんでした。ただ、スプリッタウィンドウの初期位置が適当な値になれば良かったので、GetClientRect()を使ってクライアント領域サイズを取得し、SetSplitterPos()で設定することにしました。
むう、m_hWndClient に代入した後でUpdateLayoutすれば上手くいきそうな気がするけどなあ
他の場所に問題があるんだろう
ペインがスプリッタの子ウィンドウになっていないとか
UpdateLayout()を*呼んでから*SetSplitterPos()呼んでないんじゃね?
もっと!もっと!
477 :
デフォルトの名無しさん :2009/07/04(土) 07:04:23
WTL環境作り段階のものです VSC++ 9.0、WTL81_9127(setup90x)、Microsoft Windows Server 2003 R2 Platform SDK、 WDK SP1 for Windows Server 2008(6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso) をインスコしインクルード&ファイルパスへの関連付けもしました。いろんな場所を見てstdafx.hをいじったりしましたがお手上げです。 1>stdafx.obj : error LNK2001: 外部シンボル "__forceAtlDllManifest" は未解決です。 1>ok.obj : error LNK2001: 外部シンボル "__forceAtlDllManifest" は未解決です。 1>ok.obj : error LNK2019: 未解決の外部シンボル __imp__AtlCallTermFunc@4 が関数 "public: void __thiscall ATL::CAtlModule::Term(void)" (?Term@CAtlModule@ATL@@QAEXXZ) で参照されました。
478 :
デフォルトの名無しさん :2009/07/04(土) 07:05:28
1>ok.obj : error LNK2019: 未解決の外部シンボル __imp__AtlWinModuleAddCreateWndData@12 が関数 "public: void __thiscall ATL::CAtlWinModule::AddCreateWndData (struct ATL::_AtlCreateWndData *,void *)" (?AddCreateWndData@CAtlWinModule@ATL@@QAEXPAU_AtlCreateWndData@2@PAX@Z) で参照されました。 1>ok.obj : error LNK2019: 未解決の外部シンボル __imp__AtlWinModuleExtractCreateWndData@4 が関数 "public: void * __thiscall ATL::CAtlWinModule::ExtractCreateWndData(void)" (?ExtractCreateWndData@CAtlWinModule@ATL@@QAEPAXXZ) で参照されました。 1>ok.obj : error LNK2019: 未解決の外部シンボル __imp__AtlUpdateRegistryFromResourceD@20 が関数 "public: long __stdcall ATL::CAtlModule::UpdateRegistryFromResourceDHelper (wchar_t const *,int,struct ATL::_ATL_REGMAP_ENTRY *)" (?UpdateRegistryFromResourceDHelper@CAtlModule@ATL@@QAGJPB_WHPAU_ATL_REGMAP_ENTRY@2@@Z) で参照されました。 1>ok.obj : error LNK2019: 未解決の外部シンボル __imp__AtlCreateRegistrar@4 が関数 "public: long __stdcall ATL::CAtlModule::UpdateRegistryFromResourceDHelper (wchar_t const *,int,struct ATL::_ATL_REGMAP_ENTRY *)" (?UpdateRegistryFromResourceDHelper@CAtlModule@ATL@@QAGJPB_WHPAU_ATL_REGMAP_ENTRY@2@@Z) で参照されました。 1>Debug\ok.exe : fatal error LNK1120: 外部参照 6 が未解決です。 1>ok - エラー 8、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== 原因がわかられるのでしたらよろしくお願いします。
>>477 素直にSTD以上のエディションを買え。
Expの話だったのかよ
> VSC++ 9.0 ?
アップグレード版はインストール時の仕様が気になって仕方がない
>>478 ・プロジェクトのプロパティ「追加の依存ファイル」 atlthunk.lib
・stdafx.h 「#define _WTL_SUPPORT_SDK_ATL3」の行を削除
484 :
デフォルトの名無しさん :2009/07/07(火) 22:45:29
7/28のアップデートはATLを使っているプロジェクトに影響があるんだろうか
ATL9についてだと、
http://support.microsoft.com/kb/971092 によると atlcom.h と atlhost.h の更新が影響大きそう。
中身の違いはまだよく精査してないけど、リビルドする必要がありそうね。
変更されたファイルの一覧を見ると、ATLのバグ修正のはずなのに
なぜか libcmt.lib なんかも更新されているね。
Cランタイムの変更の方は、バージョン変更によるアセンブリの更新のようだけど。
なつかしフローチャート
class CHoge { private: CAtlMap<int, int> map ; }; int _tmain(int argc, _TCHAR* argv[]) { CAtlMap<int, CHoge> map ; CHoge hoge ; if ( map.Lookup( 0, hoge ) == false ) return 0; } こういうのは無理なんです?
>>489 CHogeの代入演算子は既定のものなのでpublicだが、
CAtlMap自体の代入演算子はprivateで宣言されているため、
CHoge間の代入時にアクセスできないのでエラーとなる。
クローンを手作業で作るかポインタで持つか、そこら辺は好みで。
なるほど今見たら CAtlMap& operator=( const CAtlMap& ) throw(); これが確かにprivateでした ポインタでやってみます、どもです
365MB・・だと・・・
WTL::CToolTipCtrl をオーナードローするにはどうすればいいの?
呼んだけどWTLではどうやるの?
なつやすみですね
,,・´∀`・,,)っ-○○○ 「・」と「´」どっちが目なの?
>>495 OwnerDrawは出来ない。
CustomDrawは出来るけど。
WDK 7.0.0のATL7.1ってバグ修正されてるのかな?
さあ? 一応atlcom.hには、PROP_ENTRY_TYPEとか追加されてるし、 atlcomcli.hのCComVariant::ReadFromStream()の引数も増えてるが・・・
Summer has gone.
新規作成 ATL/WTL Application Wizard、何もいじらずにfinishしてReleaseビルド 出来上がったexeのサイズ 2005 -> 76K 2008 -> 156K どちらもマルチスレッド/MT どうも2008はCランタイムをリンクしてるっぽい 2008で、CRTを使用しないって自動的になるんじゃないの? ちなみに新規作成のWin32プロジェクトではそんなことは起こらない
少し前のバージョンからそれ変更されてたような。 個人的にはCRTあり/MDだったんでsetup90.js書き換えてそのまま忘れた。
2008から_ATL_MIN_CRTが廃止されたって。 でいろいろコンパイルオプション変更してもだめだった /NODEFAULTLIB:libcmt.libで、グローバル変数破棄だと思うけど、_atexit使われてるし あきらめるしかないのか
最近はコンピュータの性能も上がってきたからもういいという判断なのかもね。 個人的には9x/NT4切り捨てが勘弁してほしかった<2008 2010まで待ってほしかった。
9x切り捨てか。もうTCHAR使うのやめようかな。
ああそうか、どっち9xで動かんのならTCHARとか使ってる意味無いんだよな。 何を律儀に使い続けてたんだろう、俺。
Meは忘れられた存在
>>510 大人なんだから、もう忘れろ。98SEとかも。
TCHAR とかほかの API とか最初からユニコード版でコード書くと ちょっとはコンパイル速度あがるのかな いちいち判断しなくていいから
テンプレートベースのライブラリにコンパイル速度求めるのは・・・
スプリッターウィンドウの片方のペインを途中で別の子ウィンドウに切り替えることはできないのでしょうか。 SetSplitterPaneでできるかと思ったらペイン内の描画が切り替わらないのです。
ソース嫁
ソース読んでますが ヒントだけでもplz
518 :
515 :2009/09/22(火) 02:00:51
ひょっとしてビュー切り替えのたびにDestroyWindowとCreateをしてやるのが 無難なのでしょうか?
切り替えようとするウインドウ、非表示のままだったりしてw あと、切り替えられる側、非表示にしてみては
切り離した側のウィンドウを非表示にしてみては?
かぶったorz
ペインが親ウインドウになってる? 裏に行ってない?
>508,509 安易にTCHARやめない方が良いと思うが。 UTF32/8なAPI群が追加されたりとかで、 またTCHARを使う意義が出てくる可能性は十分ある。
ティーチャー
おねがいTCHAR
ATLとは無関係だけど、 IWMWriter::SetOutputFilenameの引数がconst WCHAR*だったりして、 この時だけ、_TCHARを使うのを止めてみた。
で?
あー、確かにWindows Media Format SDKあたりは、WCHAR前提のが多かったな。
自分1人の場合、むしろATL使える環境だったら、ATL::CT2Wとかで簡単に変換できるから、両対応は割と諦めない。 複数人開発とかATLがないんだったらとっととUNICODEビルドしかできないように書くこともためらわないけど。
「UNICODEビルドしかできない」のは、T使ってるくせにwchar_tを仮定している 場合だけだと思うんだが、違うの? ATLとか使わないんなら、Tなんか捨ててwchar_tとW版API使えば どっちでビルドしても同じバイナリになるのでは 今T使われるのは、MFCやらATLやらWTLやらが使っているから仕方なく、 というケースが多いんだろうと思っていたよ
CScrollImplって使いにくくない? ScrollWindowEx使ってるからピクセル単位で扱わなならんし… 現在のスクロール位置もGetScrollPosとかで得ないといけないの?
532 :
デフォルトの名無しさん :2009/12/29(火) 02:13:41
WTLあげ
WTL世間は鬼ばかり
ATLそうですね
535 :
ゴロゴロ :2009/12/29(火) 22:45:10
WTL で作成したウィンドウ アプリケーションを、 そのまま ActiveX コントロールにすることはできないでしょうか?
できるんじゃね?
537 :
デフォルトの名無しさん :2010/02/05(金) 22:41:04
age
538 :
デフォルトの名無しさん :2010/02/05(金) 22:59:10
ATLやWTLは今後も生き残っていく余地ある? C++でプログラミングするときこれが一番いいんだけど
生き残っていくの定義は何? 自分が使い続けるのに周りは関係ないだろ
この先生きのこるWTL
>>538 消えたら困るところが多いから、当分消えないだろ
Safariとか普通にATL使ってるし
Chromeとかも使ってるんじゃない?こっちは知らんけど
#undef _WTL
543 :
デフォルトの名無しさん :2010/02/08(月) 22:15:11
AYL/WTLは生き残るでしょう お客様(笑)からお金貰って専用アプリ書くならc#でもいいですが 一般に配布するアプリを書くとなると.netではいろいろ不都合が多く C++で書くというのはまだまだ残ると思いますよ。 それにC++で書く場合はMFCはいまさらだしSDKも論外、c#の部品に 慣れてるとATL/WTLがないとかなりしんどい で、質問なんですがCSplitterWindowTって動的に縦割り横割りを切替できます? もしかしてCSplitterWindowTに乗ってる部品のインスタンスを全部管理してて 切替の際は前のCSplitterWindowTを破棄した後、新しい割りのCSplitterWindowT を作成して再配置とか・・・じゃないですよね?
AYL/WTL になってしもうた ATL/WTL
はいな
546 :
デフォルトの名無しさん :2010/02/08(月) 22:19:06
>>545 切替可能?
破棄して再配置?
どちらにかかってます?>そのはいな
548 :
デフォルトの名無しさん :2010/02/08(月) 23:14:26
>>547 ありがとうございます
標準のWTLなどではできなくてそのアドレスの方が
実現するクラスを作られてるということですね
>>547 のコードをそのままVC++2008EEで使おうとすると
BEGIN_MSG_MAP(CFlippableSplitterWindowT)
MSG_WM_SIZE(OnSize)
MSG_WM_ERASEBKGND(OnEraseBkgnd)
END_MSG_MAP()
この部分で
error C3861: 'SetMsgHandled': 識別子が見つかりませんでした
error C3861: 'IsMsgHandled': 識別子が見つかりませんでした
とでます
いろいろ調べたところ
BEGIN_MSG_MAP_EX(CFlippableSplitterWindowT)
MSG_WM_SIZE(OnSize)
MSG_WM_ERASEBKGND(OnEraseBkgnd)
END_MSG_MAP()
これでコンパイルは通るのですがBEGIN_MSG_MAP_EXは問題があるという
記事がちらほら見受けられます。
BEGIN_MSG_MAP_EXで行っていいのでしょうか?
それもとBEGIN_MSG_MAPを使う方がいいのでしょうか?
BEGIN_MSG_MAPを使う場合に上記のエラーを回避するにはどうすればいいのでしょうか?
551 :
デフォルトの名無しさん :2010/02/09(火) 14:54:52
c#のFlowLayoutPanelのようなテンプレートはありますか?
最近WTLで開発を始めたのですが>549と同じようなところではまってます。 BEGIN_MSG_MAPでエラーになる場合はBEGIN_MSG_MAP_EXで問題なくなるのですが BEGIN_SINK_MAPでIEのNavigate関連のイベントを拾うためのコードを書いても エラーになってしまいます。 サンプルはいくつかネットで見つかったので同じように書いてみましたがエラーになります プロジェクトごと配布されてるところの物を試しましたが同じ箇所でコンパイルできませんでした やはり最新の開発環境の影響とかがあるのでしょうか? 開発環境はVC++2008EE と WTLの最新です
EEにはATLが付いてない
>>554 その辺は理解してます。
EEでもATLとWTLを入れる方法を紹介されてるサイトがあったので
その手順に従い一応開発はできているのですがその過程で
>>552 のような問題にあたりました。
どうもマクロ関係でおかしくなるんですよね・・・
それ以外はまあおかしくなる要素がないというか
ATLはどのバージョンをどこから拾ってきたん?
うちの2008EE+WTL8+WinDDKのATL7で試してみたけどちょっと別の問題出たけどコンパイル&実行出来たよ
VC9+ATL3じゃ問題多そうだよな
>>559 うーむ
DDKの方は試して無かったです
>>560 ATL3関連は切ってるんでるけどね
最近のWTL8はATL3を切り離せるようになってるので
そうじゃないとatlthunk.libのリンクの問題がおきて先に進まないので
あとDDKとかSDKとかじゃなくてVSの評価版ありますけどあれの中からATLをいただくというのは まずいんですかね?
だめ。
expressなんて使っている乞食が ATL使いたがるなよw
今日VS持ってる知り合いのところでためさせてもらったら
WTLへのパスを設定してstdafx.hの中の#define _WTL_SUPPORT_SDK_ATL3を
コメントにしたところ一部標準関数について警告は出たもののあっさりコンパイルできました。
環境構築が失敗してたようです
>>564 VS2010のRCが出てる段階なのでタイミング的にどうしようか迷ってる段階なんですよ
VC6.0は持ってるのですがさすがにあの古臭いインターフェースではやりたくないし
stdは2010で廃止だからな
Express/Professional/Premium/Ultimate この4つだけなんですね どう買えばお得なんでしょうか? ネットで調べてみるとVL版(3ライセンス)がお買い得みたいなのも見受けられますし
Proの新規は確か9万以上したような
VS2010スレできいたほうがいいんじゃね
win32からWTL使ってみようかなと思ったけど WTLの情報少ないな まともなサイトがテンプレぐらいしかない
>>571 なんとか頑張るしかないですね
今c#ぽい部品を作ってる
C++ってset{}get{}ってできないんでしたっけ?(汗
VCなら __declspec property
>>573 ぼやいてみるものだ
ありがとうございます
575 :
デフォルトの名無しさん :2010/02/10(水) 23:49:36
どこかで.netライクなWTLを使ったクラスライブラリを やってるところはないのか? やってたらアホみたいだし
アホみたいだから誰もやってないんじゃない?
>>566 stdネームスペースのクラスたちが消えるの?
579 :
デフォルトの名無しさん :2010/03/06(土) 10:56:25
ATLのCComPtr::Releaseなのですが void Release() throw() { T* pTemp = p; //*1 if (pTemp) { p = NULL; pTemp->Release(); } } こういうコートです。 p->Release(); p = NULL; じゃだめなのでしょうか? マルチスレッドに関連したものかなと思ったけど、*1が走る直前に取得したポインタに対して操作を行う可能性を考えたら あまり意味のあるものではないような気もするのですが。
>>579 pがインスタンス変数とすると、
pTemp->Release()で例外が飛んでも
pを必ずNULLにしたいってことじゃないかな。
手元にあるモノだと IUnknown* pTemp = p; って書いてあるから、昔の名残っぽい予感。
VC9SP1でもVC10RCでも
>>579 になってるけど
if (p) //*1 { p->Release(); //*2 p = NULL; } は、マルチスレッドなら*1でp!=0でも、*2でp!=0の保証はないよ。 スタックにコピーすべき。
>>583 を
>>579 に書き直しただけじゃスレッドセーフにならないぞ。
CComPtrがスレッドセーフなのは、参照カウンタの処理をアトミックにしてるからだ。
>579 ATLインターナルによると、解放処理内でスマートポインタが再度参照されて 二重解放されてしまう事態を防ぐためらしい。 >579 のコードだと次のケースで問題が生ずる。以下引用 たとえば、スマートポインタがクラスAのメンバ変数で、オブジェクトBの参照を 保持しているとしよう。そして、スマートポインタの.Release メソッドを呼び出す。ス マートポインタは、オブジェクトBへの参照を解放する。今度は、オブジェクトBが、ス マートポインタを含んだクラスAのインスタンスを参照する。オブジェクトBは、クラ スAのインスタンスへの参照を解放することにする。クラスAのインスタンスはデスト ラクションを決意し、スマートポインタのメンバ変数のデストラクタを呼び出す。デスト ラクタはインターフェイスポインタがNULLでないことを検出し、インターフェイスを もう一度解放する。 - ATLインターナル(p.86)
なるほど
このスレでATL インターナルを持っていないやつがいるのか。
そこまでやっててあの致命的なバグだからなぁ
はじめまして、質問させてください。 以前VC6.0で作成したATLを、WinXPのローカルにANHTTPD+MySQL+PHPの環境を作り、 PHP(ブラウザ)からATLを呼び出して処理を行なっていました。 今回、OSをVistaに変更して動かそうと思っていますが、今までコールできてたATLのメソッドがコールできません。 phpのソースは全く同じものを使用しており、ATL(DLL)のCLASSIDも同じで、ソースの変更も行なっていません。 しかしWebサーバを今回 ANHTTPDからApacheに変更しています。ANHTTPDはVista対応となっていない為。 ブラウザの設定でスクリプトエラーごとに通知するにチェックしてみると、 「オブジェクトでサポートされていないプロパティまたはメソッドです」と表示されます。 試しにメソッド内部の先頭にメッセージボックスを入れてみましたが表示されないので、呼ばれていない様です。 何かこれらで原因が分かる方いらっしゃいますか?よろしくおねがいします。 スレ違いでしたらスミマセン。
>>590 管理者として実行でコマンドプロンプトを開く。
REGSVR32でDLLを再登録。
>>591 レスありがとうございます。
REGSVR32でDLLの登録は、スタートアップにバッチファイル入れて、成功しましたと出ています。
593 :
590 :2010/03/07(日) 23:26:50
それと、UACも無効にしています。 VC6.0は、Vista未サポートってのが原因でしょうか。 動かされた方いますか?
594 :
デフォルトの名無しさん :2010/03/28(日) 13:50:53
すいません、質問です。 Windows Vista Ultimate(32bit) SP1 VC++2008 Express Edition PlatformSDK 2003付属のATL3.0 WTL8.1 という環境で、ATL/WTLウィザードで作成したexeを実行すると DEPに引っかかって死んでしまいます。 いろいろ調べたんですが、 void * __stdcall __AllocStdCallThunk()の HeapAllocをVirtualAllocに変えるといいらしいと言う事がわかり、 それはそれでいいのですが、いまひとつ納得いかないのは、 Windows2000 VC++6.0 Enterprise Edition付属のATL3.0 WTL8.1 という環境で、同じようにウィザードを使って作成したexeを、 Vistaにコピーして実行してもDEPに引っかからない事です。 普通に実行できてしまいます。 同じATL3.0なのに、どうしてこういう違いが出るのでしょうか?
VC9で作ったexeは(/NXCOMPATが既定なので)VistaSP1以降DEPが自動で有効になる VC6で作ったexeはDEPが自動では有効にならない っていう話じゃないのかなあ
VC6+ATL3で生成されたと見られるコードに対してだけ、OS側で 特殊な処理をしているんだと思う。この組み合わせで作られた過去の プログラムが軒並みDEPに引っかかるとまずいから。 ちなみにVirtualAllocは64kb(正確にはSYSTEM_INFO::dwAllocationGranularity)単位で メモリを予約するので、HeapAllocから置き換える時は注意。
597 :
594 :2010/03/29(月) 20:43:52
回答いただきありがとうございます。
返事が遅くなってすいません。
>>595 オプションでDEPを無効にできるとは知りませんでした。
/NXCOMPAT:NOをしてビルドすると、VC2008で作成したexeも
DEPに引っかからず実行できました。
でもビルドオプションで無効にできるなら、
ウィルス対策としての意味がないような??
ちょっとよくわからない仕組みですね。
>>596 なるほど。/NXCOMPATが無効で、かつATL3.0で作られたexeの場合のみ、
ATLのthunkの部分に限ってDEPのチェック対象から外す、
みたいな事をOSがやってるんですかねえ。
VirtualAllocに関しては了解です。
確保した領域から必要サイズだけ切り出して使うようにしようと思います。
おとなしくVS2008のStdかProアップグレードを買えば済む話。
>>597 ウィルスというか、バッファオーバーフローとかの脆弱性対策だろ
>>597 DEPとは外部から送り込まれたマルウェア(データセグメントに置かれる)の実行を
防止する仕組みなので、データセグメントにコードを置かないプログラム(特殊な
プログラムを除いて大部分が該当する)にマークする仕組み、すなわち入り込ませ
ない仕組みなので、正しい。
WTLってクラス定義の中にメソッドの定義まで書き込んじゃってますけど みなさんは自分のコードもそんな風に書いてますか? それとも宣言と定義を.hと.cppに分けてますか?
インラインは.inlってファイルを個別に作ってるな ヘッダが長くなると読みにくい
テンプレートってそもそもそんなもんだ
605 :
601 :2010/04/02(金) 08:14:19
そうそう、長くなって読みにくいんですよね。 しばらくは.inlで試してみます。ありがとうございました。
C++の文法を一通り学んでこれからwindowsアプリを少しずつ作っていきたいのですが いきなりWTLやって大丈夫ですか? SDKやMFCを今からやるのは無駄ですか?
WTLを使いながらSDKは必ず身につく MFCはいらない子
SDKは必要 MFCを今からやるのは無駄
610 :
デフォルトの名無しさん :2010/05/01(土) 15:35:00
CFrameWindowImpl ベースのウィンドウを作成し、その上に 各種コントロールを配置してアプリケーションを構成しているのですが、 各コントロールに WS_TABSTOP を指定してもタブ遷移が一切 できません。。 Gooooogle先生にも聞いてみましたが、いまいちWTL(ATL)への応用方法が わかりませんでした。 教えてエロい人!!
PreTranslateMessageあたりでIsDialogMessageを呼ぶ
>>608 MFCの仕事は今でも新規であるけれど、ATLは一度話があったきり、WTLは聞いたこともね。
ATLもWTLも趣味でコネコネ楽しむものだと思ってた。
仕事で使えてる人っておられます?
DirectShowやらActiveXやら絡みの仕事でならあるんじゃないか。
>>612 MFCは使わんけど、ATL/WTLはがんがんに使っているよ。うちの会社の製品は。
>>612 >>606 は仕事で使うとは一言も言っていないのに
なぜMFCを仕事で使う云々言い出すんだ?
616 :
610 :2010/05/01(土) 22:59:16
>>611 置いてみたら見事TABが抜けることはできました!
ですが、ツールバーにフォーカスが当たり、そこから抜け出せません。
一応他のウィンドウは WS_TABSTOP を指定しています。
指定しているのは、ウィンドウ遷移してほしいコントロールだけですが。。
ツールバーより先のウィンドウへフォーカスを遷移させるにはどのように
したら良いでしょうか。
>>612 .NET使わないでC++でWinアプリ作るとしたら仕事ではMFCが第一選択肢になるって事?
612じゃないが C++であえてMSのものを使う案件ではMFCが多くATLはあまり(ほとんど)ない と言うこと で、今のC++WinアプリはQtが主流
C++でCOMの案件はATL必須。 ただATL技術者なんて単価高いし集まらないから普通はVBでCOM。
612です。
みなさんありがとう。
>>617 ウチの勤め先の傾向はまさにそういう傾向です。
>>618-619 たぶんウチの守備範囲が狭いってことでしょうね。
2002 の安定版が 2003? 2005 に安定版が 2008? ということで、 金のない俺は次のバージョンを待つほうがいいいのかな。 二年後に .NET 5 がでてくるとも思えないし。
まちがった ごめん
623 :
デフォルトの名無しさん :2010/05/02(日) 20:16:56
MFCは表面 ATLは裏方
WTLは張りぼて
それは否定しない。
仕事下さい
VBorJavaを習得すべし。
Vbor Java って言語が出来たのかとおもた
629 :
デフォルトの名無しさん :2010/05/06(木) 13:21:25
class A : public IUnknown {}; class B : public IUnknown {}; class C_ : public CComRootObject, public A, public B { BEGIN_COM_MAP(C_) COM_INTERFACE_ENTRY(A) COM_INTERFACE_ENTRY(B) END_COM_MAP() }; typedef CComObject<C_> C; CComPtr<C> p; C::CreateInstance(&p); CComPtr<C> q = p; // OK! CComPtr<C> r; r = p; // NG! 'IUnknown *' への変換はあいまいです。 static_cast<IUnknown*>(p) // NG! 'IUnknown *' への変換はあいまいです。 ATLを使うと、IUnknownの多重継承を解決してくれるものと思っていたのですが、そんな都合のいいことはなかったようです。 どこが間違っているのか、ご指摘いただけないでしょうか?
ソースの貼り方を間違えている
631 :
デフォルトの名無しさん :2010/05/06(木) 18:03:20
すみません、何が悪いのかわかりませんでした。 どこを直して張り直せばよろしいでしょうか?
632 :
デフォルトの名無しさん :2010/05/14(金) 09:56:46
WTL初心者です。以下の内容のDLLをWTLで作ろうかと考えています。 ・複数のツールで共通して使用するダイアログ(コモンコントロールのパレットみたいなもの) ・データはそのダイアログが保持し、非表示状態でも保持している。 ・ダイアログのクラスに対してデータの受け渡しや参照をツール側の好きなときにいつでも出来る。 ・モードレスダイアログ こういう物を作るのは可能、かつ簡単にできるでしょうか? 参考になるURLとかもあれば教えて頂きたいです。 WTLでツールを作成している場合、こういうものを作りたくなることは良くありそうですが、 もしももっと一般的なやり方があればそちらを教えて下さい。 それとも、WTLのプログラムは常時EXE一個のみなんでしょうか? 宜しくお願いします。
やってみりゃいいじゃん
>>632 pragma data_seg
参照カウンタ
636 :
デフォルトの名無しさん :2010/05/20(木) 22:37:12
すいませんが、教えてください WTLで以下のようなCStringのマップを扱おうとするとコンパイルエラーが出る んですけど、なぜでしょうか? (atlmisc.hの代わりにatlstr.hをインクルードするとこのエラーは出ません) #include <atlmisc.h> // for CString #include <atlcoll.h> // for CAtlMap func() { CAtlMap<CString,CString> str_map; str_map.SetMap(_T("aaaa"), _T("bbb")); →ココでエラーになっている模様 ... } コンパイルエラーの内容 \microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(128) : error C2440: '<function-style-cast>' : 'const WTL::CString' から 'ULONG_PTR' に変換できません。
atlmisc.hに、CElementTraitsの設定が無くて、 デフォルトのハッシュ計算(値そのもの)が使われるから。
638 :
デフォルトの名無しさん :2010/05/22(土) 02:50:28
640 :
デフォルトの名無しさん :2010/06/02(水) 18:55:31
どうせ怪しい事するなら評価版から抜くわ
Visual Studio 2010 ExpressにWTLインストールできた人いる? WTL公式からExpress対応版が出るのを待つか 自分で何とかするしかないのかな?
Scriptのパス書き換えるだけじゃろに
ATLが無くても動くWTLが欲しいです。
WTLから使っているATLの機能ってどのぐらいだろ。 CWindowImpl周りだけならまがい物も作れそうだけど。
もうちょっとモダンなGUIの実装があればなあ。 Windowsコモンコントロールは古臭すぎる。
たとえばどんなの?
少なくともレイアウトコンテナ機能がある物
このライブラリを使って作ったアプリってWindows NTで動く?
うごくものもあるしうごかないものもある
>>645-646 基本的なウィンドウ生成部分は全部ATL側だから
WTLだけの動作は絶対に無理な気がする
つか、それができたら多分ATLってもう使われて無いような
俺は逆にATLにWTLの必要な機能だけ移植して使ってるな。 WTLのFrameWindowは不満点多いし。
>>651 ありがとうございます。では、もう少し具体的に。
ダイアログにボタンとラベルがあって、ボタンを押したらAフォルダからBフォルダに
ファイルをコピーするぐらいの物なのですが、Windows NTで動きますでしょうか?
ATL以前に、Visual C++ 2008以降はWindowsNTをサポートしてないよ。
>>655 私が使っているVC++は2005なので、そこは確認済、大丈夫です。
実は、案件でWindows NTで動くちょっとしたプログラムを作らないといけなくなりまして、MFCかATL/WTLでやろうと考えています。
MFCは今更MFCやっても…という考えがあり、ATL/WTLでできるならそっちでやろうと思って質問させて頂いています。
まぁ、 WINVER=0x0400 _WIN32_WINNT=0x0400でコンパイルが通れば、普通は動くんじゃない? ちなみに、古いATLを使うのはセキュリティ上お薦め出来ないよ。
つーかNTの時点でセキュリティも何も無いなw
>>657 ありがとうございます。
複雑な事をしない単純な物なので、多分、イケるかと思います。
>>658 ですよねw
皆様、ありがとうございました。ATL/WTLの勉強に励むとします。
実行バイナリのヘッダにリンカが設定するバージョンも修正しないと起動時にエラーになるかも
>>660 ありがとうございます。その際はアドバイス通り対応致します。
誤爆スマソ
664 :
デフォルトの名無しさん :2010/06/13(日) 20:45:29
CPaneContainer で、SetTitle() すると出力される領域の高さを 調節することって可能? やっぱりヘッダファイル直修正しなきゃだめかなぁ。 可能な場合メソッド名教えてくだしあ><
>>664 CPaneContainerImplを継承したクラスを作って
UpdateLayoutをオーバーライトする
オーバーライト(笑)
>>664 ソース見たけど、高さを変えるだけなら CalcSize、フォントを変えるだけなら GetTitleFont を
再定義する方が、UpdateLayout よりも簡単そう。
どのメソッドも擬似継承できるように作られてる("pT->" 付きで呼ばれている)
669 :
デフォルトの名無しさん :2010/06/18(金) 16:20:43
CScrollWindowImplの派生クラスでテキストファイルを表示させたんですけど、 マウスのホイール回しでのスクロールが効いたり、効かなかったりします。 ・表示直後は効かない ・一回他のウインドウに切り替えた後、戻ってくると効くようになっている WM_MOUSEWHEELは常に来ているようなんですけど、原因は何が考えられるでしょうか?
フォーカス?
671 :
デフォルトの名無しさん :2010/06/18(金) 17:15:59
>>670 ご指摘どおり、原因はフォーカス設定だったようです。
WM_MOUSEACTIVATEでSetFocus()するようにして直ったみたいです。
ありがとうございます。
672 :
デフォルトの名無しさん :2010/06/20(日) 18:56:31
WTLのマウスムーブイベントで質問です。 ビュークラスでマウスムーブイベントを作り、wParamからshiftキーの押下状態も取得しているのですが挙動がおかしくなります。 トレース文で色々試した結果の動きです。 ・何も押さないマウスムーブ 大体2回くらいずつ全くの同一座標、同じキー押下状態なのにイベント発生する。 マウスを1フレーム?分動かすとトレースが2回でたりでなかったりする。 ・shiftを押して右ボタンドラッグのマウスムーブ 長時間Shiftを押してマウスを動かすと、両手を話してもしばらく延々とマウスムーブイベントが発生する。 カウンタを表示してみるとずらずらずらずらっと全くの同一座標で一切マウスを触ってないのにしばらくイベント発生が続く。 そしてそれを放出しきって初めてマウスボタンアップイベントが発生する。 ・SHIFTを押して少しだけマウスムーブ shiftONの状態で動かした分だけトレースが出る。トレースが止まりしばらく放置していると、 数秒後あたりに思い出したようにズラズラズラッとShiftを押して無い状態で座標同一のマウスムーブイベントが十数回連続発生する。 プログラム側の処理遅延では無いと思います。(たいしたことしてない) 何故このようなことになるのでしょうか? また正しくイベントを受け取るにはどうすればよいのでしょうか?
TRACEじゃなくてテキストにでも書き出してみ
674 :
デフォルトの名無しさん :2010/06/20(日) 20:27:10
>>673 テキストに書きだすと何か変わるのでしょうか?
一応このマウスムーブに連動した描画処理を見ても、確かにこのトレース結果の通りの
動きをしています。
ぶっちゃけるとマウスムーブで3D図形を回転させているんですが、Shiftを押しながらだと
長時間やるとボタンを離してもしばらくはマウスボタンアップを認識しませんが追従した動きだけはします。
考えてみれば溜まった処理吐き出しとはちょっと違いますね。
しばらくマウスボタンアップイベント発生がお預けになってマウスムーブが割り込みまくっている感じかも。
675 :
672 :2010/06/21(月) 13:27:14
原因がわかりました。 マウスクリックの音ですら近所から苦情がくるので、テンキーマウスを使用してテンキーをマウスボタンのように使い、 Keypointerというフリーソフトを使って操作していたのですが、このKeyPointerが原因のようです。 常駐を外して実際のマウスボタンとキーボードで操作すると問題は発生しませんでした。 しかしまともなサイレントマウスはどこも発売しないし、KeyPointerに変わるソフトも見当たらないので、 操作方法を見直すしかないようです。
ワロタw 引っ越せよw
酷い環境だw ゲームパッドをマウス代わりにするソフトでも同じようなことあるかな?
678 :
672 :2010/06/21(月) 14:37:30
追記です。 GetAsyncKeyStateを使って現時点のSHIFT押下状態取得すると正確な値がとれるようです。 これでとった値と、Wparamからとった値を同時表示してみると、 wparamの方はずらずらずらっと遅れた情報送ってるのに対して、GetAsyncKeyStateのほうは機敏に最新状態を反映しています。 サイレントマウスはほんとにマトモなものがないです。 マウスボタンをテンキーマウスのペナペナのテンキーに置き換えればいいだけなのにどこも作りません。 マウスホイールも何も工夫しなければ無音なのに・・・。 マウス作ってる業界では「カチッ!!カチッ!! カリカリカリカリ!!」 という高らかな音を響かせないとそれはマウスと言えないようです。
679 :
672 :2010/06/21(月) 14:43:50
さらに追記。 マウス位置もLparamからとらずに、 GetCursorPos); // 現在位置取得 ScreenToClient(); // クライアント座標変換 を使った方がいいかもしれません。 結局マウスムーブイベントで分かる情報は「なにやらマウス動かしたらしい」 程度しか正確なものは無いっぽいです。
そろそろスレ違いに気づいてもいい頃だと思うんだが
WTLのマウスムーブイベント、とかなんとか書いてるけど要はWM_MOUSEMOVEのことでしょ 初めからATL/WTL関係なし
682 :
デフォルトの名無しさん :2010/06/21(月) 18:39:47
その異常者が引っ越すべきだろ
とある隣人のムーブイベント
同棲しているだけだろう くそっ爆発しろっ!
どかーん
教えてー>< CWindow の上に CSplitWindow を配置して、 その上に CPaneContainer と CListViewCtrl を重ねるコードを1つのヘッダファイルに書いていたんですが、 CPaneContainer > CListViewCtrl の時はうまく表示されてたのに、 CPaneContainer > CTabCtrl > CListViewCtrl の構成に変えたら CListViewCtrl が描画されなくなってしまいました。 たぶんメッセージ系の扱いがうまく行ってないと思うのですが、 考えられる問題がありましたらご指摘ください!!!
どういう風に重ねてるのかは知らんが CTabCtrlよりもCTabViewの方がいいんじゃね
688 :
名無しさん@そうだ選挙に行こう :2010/07/10(土) 19:48:38
xpパソコンのxpスタイルでシンプルリバーをつけたら描画がおかしいけど (上部横一線が透過されて背景が・・・) これってwtlのせいじゃなくて開発環境のせい? だれかおしえてください。
689 :
688 :2010/07/13(火) 11:51:37
ws_borderをなくしたら解決しました。
なるほど
691 :
デフォルトの名無しさん :2010/07/27(火) 18:02:24
ダイアログバーのOnPaint(WM_PAINTイベント)について教えてください。 これを追加するとそのダイアログバーを開いた瞬間にダイアログが真っ白になってコントロールが表示されなくなります。 実態はなぜかOnPaintが永久に呼ばれているみたいです。(デバッグコメントで確認しました。) 最初はOnPaint契機でピクチャーボックス内に描画する処理があり、その描画の結果再びOnPaintが発生する無限ループかと疑っていたのですが、 描画処理をコメントアウトし、OnPaint関数内ではreturn 0;しかない状態にしても状況が変わりませんでした。 一体なぜこうなってしまうのでしょうか? またダイアロブが描画されるたびにピクチャーボックス内に画像を書き込む処理を入れないといけないのですが、 別な手段があるのでしょうか? MFCを使ったアプリケーションでも似たような処理をしていますがこっちでは発生しませんでした。 WTLを使った方でのみ発生します。 ご存じの方がいれば教えてください。 よろしくお願いします。
OnPaint内でInvalidateRect呼んでるとか
>>691 >OnPaint関数内ではreturn 0;しかない状態にしても
いやこれをやっちゃダメだろう。
BeginPaint〜EndPaint呼ぶなりValidateRect呼ぶなりCPaintDC置くなりしないと
永久に無効領域が有効化されないぞ。
694 :
デフォルトの名無しさん :2010/07/27(火) 19:52:25
WM_PAINTでなにもしないとなにも描かれないだろwww
>>691 >>693 にもあるけど、WM_PAINTをトラップしたら、たとえ何も描画しないとしても
必ずCPaintDCのインスタンスを置く事
じゃないと領域が無効のままになって、WM_PAINTが永遠に発行され続ける
WTLの更新はまだですかviksoeさん
>>691 ttp://bygzam.seesaa.net/article/157672929.html >通常、WM_PAINTのハンドラではBeginPaint/EndPaintやValidateRect等を呼んで、
>無効領域のクリアをしないといけません。しかし、このサンプルではWM_PAINTで何もしていないので、
>無効領域がクリアされず永遠にWM_PAINTが発生し続けます。
>普通はWindowsプログラマがやってはいけないことのタブーを、このサンプルプログラムでは
>画面更新のトリガーに使っています。私の感覚では、気持ち悪いですね。
上の回答レスと全く同じこと言ってるな、まあ当然だが それにしてもWTL関係ないな
700 :
691 :2010/07/29(木) 06:06:02
ゴタゴタしててレス遅れました。すいません。 695でのご指摘の通りでした。 OnPaint関数に CPaintDC dc(m_hWnd); を付け加えただけで解決しましたが、正直一見して何もしない無駄な行にしか見えず、 いまいち理解しきっていません。 自分なりに色々調べてみます。ありがとうございました。
701 :
691 :2010/07/29(木) 06:09:15
ちなみにMFCのほうではこの行が入っていましたが、 dcを使わないならコメントアウトしてもいいけど面倒だから放置している程度の認識で、 まさかこの行が関係あるとは、必須だとは思いもしていませんでした。
>>700 WTLのソース見れば簡単に分かることだが、
CPaintDCのコンストラクタ/デストラクタ内で、
>>693 に書いてる
> BeginPaint〜EndPaint呼ぶなり
をやってくれているだけだ。MFC版のも一緒。atlgdi.hを読んでみ
そもそもWIN32の常識なんで基礎から勉強しなおせって感じ? 猫でもわかる〜あたりを通して読んどけば? WIN32よくしらんでWTL使うのは無謀すぎると思うケドナー。
WTLは、所詮win32使いの道具だからな。 win32知らないのにわざわざWTL使うなんてメリットないよ。
CSplitterWindowで、垂直のボーダー区切りを水平のボーダーに変換するというか、 CSplitterWindowをCHorSplitterWindowのように変換するにはどのようにすればよいですか?
水平垂直の区別ってテンプレート引数で与えてたのか こりゃめんどくさそうだな
二つ作っておいて 切り替えればいいんじゃね?
SetParentでいけそう
Set Parentってある意味すごい名前だな
710 :
705 :2010/08/16(月) 22:00:57
遅ればせながら。ご指摘の通り、SetParentを使用してみました。 CSplitterWindowとCHorSplitterWindowの変数を予め定義し、 CSplitterWindowのみ初期化しておき、変更時に ・CSplitterWindowの削除 (DestroyWindow) ・CHorSplitterWindowの作成 (Create) ・スプリッター表示領域の再設定 (m_hWndClient) ・内側のコントロールの親を再設定 (SetParent) ・内側のコントロールの配置設定 (SetSplitterPane) のような作業をすることで、解決できました。どうもありがとうございました。
別にスプリッタ作り直すまでしなくても 単に一方を非表示にするとかZオーダー変えて裏に隠すとかするだけでいいのでは
それだとまたスレ違いになるじゃん
タブコントロールに子ウィンドウくっつけて、 サブクラス化して、WM_SIZEが来たときに子ウィンドウのサイズをタブにあわせて変更しているんですが、 その後本来のコールバック関数を呼ぶと、 タブの位置関係が変わった際にタブウィンドウが再描画された上に、 子ウィンドウが再描画されず隠れてしまいます。 タブコントロール自体のサイズ変更を WTLのCDialogResizeで行っているため、 タブコントロールをサイズ変更した後にWM_SIZEを捕まえられないのですが、 何か上手い解決方法はありませんでしょうか? (CDialogResize使わないというのは置いといて…)
714 :
713 :2010/08/23(月) 03:40:06
補足なのですが、 タブコントロールのWM_PAINTひろって、子ウィンドウにInvalidate投げても、 子ウィンドウのスクロールバーだけ描画されません。
WS_CLIPCHILDREN
つかタブページのウィンドウって普通タブの子じゃなくてタブの兄弟ウィンドウとして
作るんじゃなかったっけ?
>>714 スクロールバーはクライアント領域に含まれないので
再描画を強制したいならInvalidateじゃなくRDW_FRAMEを指定してRedrawWindowを呼ぶ
717 :
713 :2010/08/24(火) 04:57:59
>>715 !!!
WS_CLIPCHILDRENとかWS_CLIPSIBLINGSの存在忘れてました!
…なぜにリソースエディタのプロパティのところで選択できないのか…
>>716 確かにだいたいのサンプルではタブの兄弟ウィンドウで書いてあるのですが…
タブが親ウィンドウいっぱいいっぱいでない場合は、
AdjustRectした後、タブのクライアント座標から、親ウィンドウのクライアント座標に変換しなきゃなので
めんどくさいような…?
いじっていて気づいたのですが、
OnSizeオーバーライドできないので、CDialogResize継承して
bHandled=FASLEでOnSize抜けるものを作るのは無理だと勝手に勘違いしてましたが、
(BEGIN_MSG_MAPのところの)ProcessWindowMessage関数はCDialogResize内から呼ばれないので、
ここを継承クラスで書き換えれば、CDialogResizeにチェインした後WM_SIZE捕まえられますね…
そんなことせんでも、WS_CLIPCHILDRENですべて解決ですが。
よく分からんが解決しましたありがとうございましたってことなん?
719 :
713 :2010/08/24(火) 05:42:08
>>718 !
一番大事なこと書いてませんでした!
解決しました、ありがとうございました!!
もう更新はないのかなあ・・・
オープンソースなんだから おまえが更新してパッチを送ればいいんじゃね?
糞酢を混入させるな
じゃあviksoeさんに任せとけばいいと思うよ
ほしゅ
725 :
デフォルトの名無しさん :2010/10/16(土) 15:58:05
Visual Studio Express 2008/2010 Expressで WDKのATL7.1とWTL8.1を使用しているのですが WTLのウィザードで生成したコードで プロパティのATLの使用の項目が「ATLに動的にリンク」 になっているプロジェクトが生成された場合 stdafx.obj : error LNK2001: 外部シンボル "__forceAtlDllManifest" は未解決です。 というエラーが出てビルドできません。 どうすればATLに動的にリンクした状態でビルドできますか? ちなみに、生成されたプロジェクトで プロパティのATLの使用の項目が「ATLを使用しない」 となっている場合はビルドできます。
不正利用してるからじゃないの?
WDKのATLをVSから使うのはライセンス的には問題ない
サンプルをビルドする以外には使ってはだめだっつうの
WDK付属のlicense.rtfのどこにそんな記述があるのか具体的によろしく
さて、728の言い分を聞こうか。
ソースが法律家じゃないようなパンピーのブログとは恐れ入るな
733 :
725 :2010/10/17(日) 14:56:59
いろいろ調べてみても、ほとんど情報が無くて分からない・・・ Expressだから駄目なんだろうか
むしろソースが無でふんぞり返れるのに恐れ入るわw
馬鹿にレスするのやめろっての
それは正規のライセンス文書じゃないし どう頑張っても「サンプルをビルドする以外には使ってはだめ」とは読めない
もう相手にしてあげなくていいよ。
739 :
デフォルトの名無しさん :2010/10/19(火) 07:11:59
ドライバ作りに使ってくれと書いてあるだけで サンプル以外ビルドするなとは書いてない。
つーかWindowsがバージョンアップした際の追加APIなんて 大概COMで提供してんだから、いい加減ATLくらいWindows SDKに 最新の入れとけよって思うわ
なぜ入れてないかを考えろ 金儲けの道具だからだ
>732,737 ブログ(>639)に「MSが御社製品のexeやdllをビルドしていただけます、と返答してきた」と 書いてあるじゃないか。 法律専門家もクソも無い。 と激しく遅レス
743 :
737 :2010/10/31(日) 05:42:58
そのblogの内容は最初から知ってるし、オリジナルのライセンス文書を確認した上で 「サンプルのビルド以外での使用禁止」とかいうアホな主張に突っ込んでたんだが・・・
たぶんレス番間違えたとみた。
WTLはATLないと使えないんですか?
使えません
747 :
デフォルトの名無しさん :2010/11/04(木) 00:59:24
.NETがあるじゃないか!
VB6 で使用する ActiveX を 2010 の ATL10.0 で作った方はおられますか? 2010のATLウィザードが吐き出しただけのものをビルド・regsvr32で登録には成功しますが、 VB6 のコンポーネントダイアログからそのActiveXを追加しようとすると、 「"〜\testATL2.dll"を読み込めません」と表示されてしまい追加できません。 2005(ATL8.0)のATLウィザードが吐き出したものでは問題なくVB6に追加できていますし、 そのプロジェクトを2010にアップグレード・ビルドし直したものでも問題ありません。 とりあえず、最後の「2005で作成→プロジェクトを2010にアップグレード」の方法で一応事足りるのですが、 できれば 2010 だけで閉じて開発できれば…と考えています。 このあたりの事情をご存知の方はおられないでしょうか…。
750 :
749 :2010/12/16(木) 20:28:59
開発環境の情報がなくてすみません。 VisualStudio2005 Standard と VisualStudio2010 Professional を使用しています。
まずVB6を捨てます
VB6ってIE1の頃か
753 :
749 :2010/12/17(金) 13:00:04
>>750 VB6で動くこと、というのはお客さんから提示された条件なので無理です(><)。
>>751 98年リリースらしいのでIE4はあったはず…。
「2005のATLウィザードが吐き出したものを2010にアップグレードしたもの」と 「2010のATLウィザードが吐き出しただけのもの」を比較してみては?
それにしても、WTLが一切更新されないな これは、オープンソースにして逆に失敗したパターンだな マイクロソフトの管理下だったらVisualStudioと共に 毎回更新されていたはず 何でもオープンソースにすりゃ良いってもんじゃないね
オープンソースになった直後に溜まりに溜まってたバグが一気に修正されたじゃん
バグが溜まってきたらオープンソースで無料修正おいしいですってことか
バグって言ってもいずれは修正されただろうし ずっと更新が無い方が問題だわな
リポジトリの方はリボンとか追加されてるんだけどねー
WTLはもう完成されてしまったんだよ! ってまあオープンソースだと意見し辛くなるのはあるかもね。 文句があるならお前がやれって言われそうで。
んじゃ、具体的に、どんな機能を追加してほしいの?
viksoeスレでやれ
>>755 WTLニュースグループで更新予定はあると明言されてる
予定はみt
>>763 あの記事がポストされてからワクテカで待ってるんだが
全然出る気配がねぇ
実際に出せる段階になったら発表しろ
Expressバージョンで使えないから出ても使ってあげられませんね
なんとなく思ったんだけどBEGIN_MSG_MAPマクロの引数って必要? おまじない?
今は不要だね
てことは互換性のためてことかな。 個人的にはコピペするとき楽だからなくなってほしいけど…
自分で定義すればいいじゃん
マクロの引数自体は無意味だけど、あの書式に則っておくと、 リソースエディタでイベントハンドラを追加した時、あそこへ メッセージハンドラ用マクロを差し込んでくれる。
下手にスニーキングするより開き直った方が楽だなw
リストボックスやダイアログに対して、以下のように DWM_BLURBEHIND blur = { DWM_BB_ENABLE | DWM_BB_BLURREGION, TRUE, nullptr, FALSE }; DwmEnableBlurBehindWindow(listBox_, &blur); // リストビューに対して適用 DwmEnableBlurBehindWindow(m_hWnd, &blur); // ダイアログに対して適用 と DwmEnableBlurBehindWindow を適用してみましたが、やはりリストボックスに 項目を追加すると、背景が黒くなってしまいます。 何かいい方法はないでしょうか?
DWM_BB_BLURREGION 入れてるのに region ねー
NULLを入れると全体が対象になるので、問題ないと思います
リストのアイテムにも設定しないといけないんじゃない?
リストの各アイテムにウィンドウハンドルがあって、それにも DwmEnableBlurBehindWindow をするってことでしょうか?
WTLでRibbonなUIは作れますか
リポジトリのだと実装されてるね。ちゃんと動くか知らんけど
CPLとはいえRibbonはMSの特許が絡むから完全に自由には使えないぞ 詳細はOfficeの開発者ライセンスを参照のこと
Windows 7 には Ribbon の API あるし、 Vista も Platform Update で使えるようになるんじゃなかったかな。 もしそれを利用してるのなら問題ないはず。 Vista より前のOSは動作対象外になるけど。
785 :
デフォルトの名無しさん :2011/03/27(日) 21:42:18.91
_beginthread の引数(スレッド関数の引数)に、CSimpleArray* 渡しても 何か問題が起きたりしないよね??
フレームウインドウから子ウインドウを作成すると、 「0xC000001E: 無効なロック シーケンスを実行しようとしました」 というメッセージが出てウインドウを作成できない。 子ウインドウは普通のCWindowImpl。
だがC言語の基礎ではスレッドについて学べないな
しかし、ネタが無いね。
790 :
忍法帖【Lv=8,xxxP】 :2011/04/18(月) 02:24:36.51
790
791 :
デフォルトの名無しさん :2011/04/18(月) 03:24:40.24
韓国、被災企業の工場移転打診=部品・素材産業の高度化狙い
東日本大震災後、韓国政府が被災で操業停止などに追い込まれた日本企業の工場を
韓国に移転するよう促す案を、日本政府に非公式に打診していたことが17日、明らかになった。
韓国では、主力企業のサムスン電子や現代自動車などを生産面で支える部品・素材産業の
高度化が課題となっており、日本企業誘致のため造成した工業団地への進出を改めて訴えている。
(2011/04/18-02:34)
http://www.jiji.com/jc/eqa?g=eqa&k=2011041700165
792 :
片山博文MZ :2011/04/19(火) 09:15:52.86
フリーでATL風のライブラリ、ない?
意味不明。
ATL使えよ・・・
こういう奴に限って COM じゃなくて CSimpleArray が使いたいだけとか 言い出すんだよな。 まぁ ATL 使えよ。金払え。
>>797 まぁ子供のお遊びレベルだからな
活性化しないム板に子供用砂場が1つくらいあっても誰も文句言うまい
799 :
片山博文MZ :2011/04/25(月) 12:39:09.27
800 :
片山博文MZ :2011/04/25(月) 13:22:25.37
ATLに代わるライブラリが存在しないということですか。。。 残念です。
いや代わりに出したのが.netなんだが。
wtlは開発終了してるのか
>>802 今は viksoe たんを見守るステータスになってる
805 :
デフォルトの名無しさん :2011/04/26(火) 12:07:04.97
MS自身はWTL使ってるプロジェクトないの?
XPからできたSetWindowSubclass系を使えば、 サンクいらなくなる? つかこれdwRefDataはどうやって管理してんだろ?
いいえ。必要です。
CDialogResizeでつけたGripの背景色はどうやれば変更できるんでしょうか? WM_CTLCOLORSCROLLBARは通知されないみたいです
WTLにはレイアウトマネージャーないの?
CDialogResizeじゃだめなん?
CWindowImplを継承したビューの中に CWindowImplを継承した他のビューを表示してるサンプルがあったら教えてくれ。
CATLMapで Lookupして最初の一つが見つかった後、続けて同じキーを探す方法がわからんです どうやったらいいですか?
1つのキーでは1つの値しか管理できないんじゃないの
すみません根本的に物凄い勘違いしたかもです>< 基本的なとこから見直してきます
816 :
デフォルトの名無しさん :2011/06/12(日) 19:37:49.52
日本語抜平仮名無問題会話施行。
817 :
デフォルトの名無しさん :2011/06/12(日) 19:53:30.40
てst
819 :
デフォルトの名無しさん :2011/07/03(日) 15:13:17.68
保守
保守
821 :
デフォルトの名無しさん :2011/07/28(木) 10:53:16.80
WTLってもう終了なのか? 頼みのnenadstefanovicたんも1年以上コミットないし。 bugfixもあるから新版出して欲しいんだけど、見込なしかな?
822 :
デフォルトの名無しさん :2011/07/28(木) 17:39:38.32
みんなレイアウトマネージャなしでどうやって書いてるんだ。 リサイズするたびにウィンドウ内の配置変えてるの?
ダイアログリサイズとか
WTLはもう十分な気もする。
今でもまだWTLでゴリゴリ書いてるが、あんまり不便を感じない。
ラピッドデベロップメントではない分、自由だからまだ好き。
>>822 毎回計算してMoveWindow()
面倒な時はスプリッタ
825 :
822 :2011/07/28(木) 23:50:54.14
そんな感じなのかー ありがと。
レイアウトマネージャって内部的にはどういう処理してんの? 設定した領域が変化した時に内側のコントロールを調整する役割を持つ感じ?
メタクラス
828 :
忍法帖【Lv=40,xxxPT】 :2011/08/03(水) 22:23:43.26
Vc++ 2010 express で、wtlを使用した ダイアログアプリを作成しようと 思うのですが Atlがないので無理ということ なのでしょうか? また、 他にダイアログアプリを作る 方法があれば、教えて頂けませんか?
Win32で書けばよろし。
Vc++ 2010 express なら ATL/WTL は諦めれ
分かりました。
Dxライブラリなるもので やってみます。
wdkに付いてるのは使っちゃいけなかったんだっけ
Vc++ 2010 express で フリーのリソースエディタを 使うという話がありますが あれは、vc 2008 standardなどの Atlを使うということですか?
837 :
忍法帖【Lv=40,xxxPT】 :2011/08/04(木) 23:30:12.22
リソースエディタって何のために 使うのかな?と思いまして。
それっぽい単語を適当に並べてみて、質問っぽいことを書いてみました、ってことでOK?
たんぱく質ばかり食べてると屁が腐る
かけない?
>>836 解決した。
ダイアログは、win32で作ることですが、
できるのですね。
復帰
なにが?
WTL Helperの2010版はないんでしょうか
WTLで作ってるとWPFが使いたくなる。 WPFで作ってるとWTLが使いたくなる。
846 :
デフォルトの名無しさん :2011/09/18(日) 21:49:34.98
グループボックスって、専用のクラスはないのでしょうか? CGroupBox みたいな名前であるかと思ったのですが、ありませんでした。
グループボックスって専用クラス作ってまで操作することあったっけ?
CScrollContainerの縦スクロールだけ使いたいんだけどいい方法ある? CScrollContainerのリサイズに合わせて子ウィンドウをリサイズするだけだと 一瞬横スクロールバーが見えてしまう。
試してないけどソース見たら SCRL_DISABLENOSCROLLH なるフラグがあったけど これは試した?
ああごめん、これはスクロールバーを常に表示するフラグか 全く逆だった
WS_VSCROLLで表示したスクロールバーをオーナードローする方法ない? 最終的には全てのコントロールをオーナードローしたいんだが。
無い
いつの間にかWTL8.1出てたんだ
新バージョン出たのか?と思って見に行ったら2年以上前の話じゃねーか
WTL最新版でリボン使えるっていうから試してみたけどXPじゃつかえないのか。 MFCなら行けなかったっけ。
856 :
デフォルトの名無しさん :2011/09/22(木) 22:06:55.57
CReBarCtrlを使わないで CCommandBarCtrlをメニューとして表示してるサンプルない? CReBarCtrlのバグっぽい動作によってグリッパーを消せないでいる。
857 :
デフォルトの名無しさん :2011/10/15(土) 23:05:41.57
WTLで大きめのプログラム作るときどんな設計にしてる? MVP?MVVM?
858 :
デフォルトの名無しさん :2011/10/18(火) 19:46:45.04
過疎すぎ。 みんなどこいったんだ。 .NETか?WPFか?Qtか?
ブラウザに埋め込むActiveXコントロールを作るのに、 C++とATL/WTLを使いたいと思っているのですが、 WTLって上記の用途に使えます? 画面自体は簡単なダイアログレベルのものなのですが…。
>>860 activeXならATLだけでいいんじゃないのかなあ?
作ったことないからよーしらんけど。
自作のWTLソフト、win7までは素直にさくさく動くんだけど
win8dpに入れたら起動が妙にとろい。
まあ、同じWTLのDonutはまあまあだったから
別の問題かもしれないけど。
Atom Z初期型マシンに入れる自分も自分だがw
>>861 、862
回答有難うございます。
簡単なダイアログ程度ならATLだけでも十分そうですが、
もう少し調べて、判断することに致します。
864 :
デフォルトの名無しさん :2011/10/21(金) 23:47:23.39
CDoubleBufferWindowImplって子ウィンドウまで含めてダブルバッファリングしてくれる?
してくれるわけがない
ありがと
WTLの開発もう完全に詰んでるだろ はやく開発をMSに戻せ
はい
ATLはMSでも開発が滞っていますが
詰んでるというか完成されたというか あと何が必要だよ
>>870 人によってはリボンじゃね?
自分は別にいらんけど。
ぶっちゃけドキュメントもいらない気がした。
グリッドも欲しくないか?
完成されてるとか何の冗談だ まだバグだらけけじゃねーか
875 :
デフォルトの名無しさん :2011/11/10(木) 21:11:24.51
ウィンドウのサイズを変更してもステータスバーのサイズが自動で変更されないんだけど、 自分でMoveWindowしないといけないの?
フレームウィンドウのメンバにいれてれば自動 それ以外の普通のステータスバーなら自分で移動
メニュー系のメッセージハンドラでDestroyMenuが呼ばれるってバグを 1ヶ月ほど前に報告していて人がいたけど、よく今まで気付かれなかったな。
WTL 8.1.11324
879 :
デフォルトの名無しさん :2011/11/24(木) 23:03:40.36
WTL 8.1.11324 のAppWizardをインストールしたけど 「文字が正しくありません」というスクリプトエラーでプロジェクトファイル作られない・・・
何変わったんだろ
何となくC#触ってみたらあまりにも細部まで充実していて泣けてきた でC++なんて捨ててやろうと思ってWPF勉強してみたけど糞すぎて戻ってきたよ
細部まで充実ってどんなこと?
インテリセンスが一番落差があるな あとはコード内外にしっかりドキュメントがあったり
WPFじゃなくてWinFormじゃだめだったの?
WinFormってもうMSから見捨てられてるんでしょ?
ユーザからは逆にWPFが見放されている。 いつものごとくMSは軌道修正するよ。
WPFってWinFormのラッパーみたいなもんじゃないの?
WinFormsはWin32のラッパーだけど WPFはだいぶ違うよ。
WPFだと動的にコントロールを生成したりするところで面倒になって投げ出した
大昔のVBで聞いたような話だな
so-software見てもWTLのデフォルトテンプレート見ても、 どうもヘッダファイルにロジックをゴリゴリ書いているように見えるんだけど WTLの流儀ってこういうもん? なんでこんなところにロジック書くのかよくわからないんだけど
テンプレートだから。
yes
慣れるとcppファイルを使いたくなくなるんだよなぁ。俺だけ?w
テンプレートクラス作ったことない人なのかな
C++/CLIの生成するスケルトンもヘッダに実装書いてるぜ
すげぇこのスレが動いた!! って、テンプレートクラスって普通ヘッダに実装書くんだ。しらなかった。 なんのためにそんなことしてるんだ? ロジックを追加するときにどこに書いたらいいかわからないんだ
898 :
デフォルトの名無しさん :2011/12/24(土) 01:32:06.38
そこでexportがなんたらかんたら
コンパイラの都合なんざ無視だぜ!
でも直接テンプレートになってないあたりは cppに書くとコンパイル加速装置だお。 ...慣れないままいきなり書いたら中途半端な分け方になっちまったぜorz
今回誰も日本語化しないな もはや使っている人間がいないのか まあダウンロード数見ても日本で使ってるの 数十人くらいに思えるw
*.hの最後辺りで、*.cppをinclude
俺はロジックは全部ヘッダーに書く派だわ
逆に1ファイル内でしか使わない使い捨てのテンプレートならcpp側に書いちゃうけどね俺は namespace { template <int ..> struct hogehoge {...} };
複数ファイルで共有しないものはヘッダに書かないってのは基本だろ。
ヘッダー実装は最近の流行だよ
悪い流れを断ち切りたい
何故ヘッダー実装が悪いのか分からん
C言語を引きずってるとヘッダー実装は悪く感じない?
>>911 依存度が必要以上に増えちゃうから
インクルードするインターフェースに依存するだけですむはずのところが
実装にも依存してしまうから
でしょう
914 :
デフォルトの名無しさん :2011/12/26(月) 23:07:59.71
でも最近の言語ってヘッダと実装わかれてないよね
もともとコンパイラが馬鹿なのを人間に押し付けただけだから
言語仕様でいうならCの時代から別れてなんてないよ
おい誰か早く最新版を日本語化してくれよ!
>>911 だってコンパイル重いじゃん。。。
別に10分かかるわけじゃないけど。
昔はヘッダファイル開けば、実装されてる関数の定義が羅列されてるだけだったから 関数の名前と引数見れば一瞬でどんなのが用意されていてどう使えばいいかが分かったけど 今はヘッダーに実装までされてるから一覧として見難いんだよな。他人のソース見る ときはそれが嫌。cppに実装してくれと思う。 自分で実装するときはヘッダーにゴリゴリ書くがなwww
>>919 逆にhとcppの2つのファイルを巡るのがダルイ
ま、一覧としては見づらいのは確かにある
>>921 そのサイト毎日チェックしてたのに
よりによって今日出したのかwww
そことRaptは毎日チェックしてたが
これでその仕事から解放されるおwww
WTLでリボン使えるようになってたのか 幅が広がるのはありがたいが、いらねーw
プログラマなのにRSS購読知らない奴おるん?
RSS購読とか情弱しか使わんて
ねっとさーふぃんが楽しいのだ
俺も情弱だからRSSとか使わないな IDEの各種機能もほぼ使わない。VSだとクラスとか関数一覧からじゃなくて、ファイル一覧からソース開いてるしw
今でもprintfデバッグが主力です。
俺もRSSって一度も使ったことがないな 周りでも使ってる人見たこと無いんだが、どこで使われてるのか ところで、ATLを使用しないWTLって開発されてたと思うんだが 今どうなってるか分かる人いる? もしくは、どこで開発情報を手に入れられる?
俺もRSSって一度も使ったことがない
WTLのGetSystemSettingsってのは何をしているのか教えてくれないか?
937 :
デフォルトの名無しさん :2012/01/01(日) 13:12:34.52
ソース読め。全部書いてあるんだから。
>>937 お前も不親切な奴だなー。知ってるなら教えてやれよw
俺が見つけたところのGetSystemSettingsはレイアウト調整用にGetSystemMetrics呼び出してメンバーに値いれてる。
詳しくはソース読めwww
GetSystemSettingsなんて名前だからシステム設定を呼び出せるようにラッパーしてある関数だと思ったけど何にも使え
なさそうだな
win32知らないのにWTL使うメリットなんてなかろう。
4,5年ぶりに昔書いたコードみたら全然読めなくなっててわろた 久々に作りかけのアプリ開発再開しようと思ったが挫折しそうになったが 一カ月ほど掛かったがやっとカンを取り戻せてきた
>>940 > 4,5年ぶりに昔書いたコードみたら全然読めなくなっててわろた
そんなん滅茶苦茶あたりまえ
自分のコードが他人のコードに思えるのには6ヶ月で十分
>>941 読み始めたときは昔のオレすげーて思て衰えを感じたが
読めるようになってくると、なぜもっとコメント書かぬのだと憤慨する
>>942 それ、ものっ凄い普通
つまり、ものっ凄い普通
30歳台かの?
>>943 はい
ただやっぱり色々考えるようになったが、開発スピードは落ちたのは実感する
悲しいことに部品作ってるときが今一番しあわせかも
>>944 スピード落ちたような気がするのは色々なことに気が回るからじゃ
総合的にかかる時間つまりスピードは向上しておる
部品作りは楽しいものじゃ
外的要因が少なく理想に近付けるから
午前の4時間は20歳台のアホを育成することに努力し
何れはあ自分が好きなことをできるように
午後の4時間は(午前の部が完璧にこなせれば)好きなことに努力
これが理想だがのう。
>>942 >読み始めたときは昔のオレすげーて思て衰えを感じたが
あるあるw
俺も久々にWTLさわったら昔ながらのハンガリアン記法にうっ!となったわ。
>>945 仕事でやる開発は何故こんなにもツマラナイものなのか
外部要因が多すぎて、調整と説明説得で精神が削り取られるだけ
昔は自分が作ったものを使ってもらえる喜びがあったが
今じゃ、そんなこと手でやれよと思うぐらいつまらない
自作の便利なテンプレートクラス/ライブラリの評論会やろうよ
言い出しっぺの
実が出た
HTMLページビューでアプリケーション内で作成したhtmlドキュメントを 表示させたいのですがそういう方法ってあるのでしょうか? それとも一度ローカルにファイル保存しないとだめでしょうか
QueryControlでIWebBrowser2を取得して IWebBrowser2からget_DocumentでIHTMLDocument2を取得して IHTMLDocument2.writeでhtmlを流し込む
ありがとうございます!
955 :
デフォルトの名無しさん :2012/02/07(火) 06:58:13.53
すみませんまだだめでした get_DocumentでIHTMLDocument2を取得する際に必ず失敗します なにか手順とかあるんでしょうか
CComPtr<IDispatch> pDisp; IWebBrowser2->get_Document(&pDisp); CComQIPtr<IHTMLDocument2> spDocument(pDisp);
957 :
デフォルトの名無しさん :2012/02/07(火) 18:45:08.09
>>956 なんどもすみません
そのコードだとget_DocumentがS_FAILEになってしまいます。
書いたコードは以下のとおりです
INT_PTR CAddToMyListWindow::OnCreate(LPCREATESTRUCT lpCreateStruct){
LRESULT lRet = DefWindowProc();
HRESULT hRet = QueryControl(&m_pWB2);
if(SUCCEEDED(hRet)){
DispEventAdvise(m_pWB2, &DIID_DWebBrowserEvents2);
}
CComPtr<IDispatch> pDisp;
HRESULT dRet = m_pWB2->get_Document(&pDisp); //<-S_FAILEになる
CComQIPtr<IHTMLDocument2> spDocument(pDisp);
return lRet;
}
>>957 IEコントロールが作成された時点ではまだドキュメントは作られてないんだから当たり前
DocumentCompleteまで待たないと
960 :
デフォルトの名無しさん :2012/02/07(火) 19:07:26.19
>>958 どこにもアクセスしていない状態でやるなら
一度ダミーのURLかhtmlファイルにアクセスしないといけないということでしょうか。
なんとなく無駄な処理をしているような気がして腑に落ちない気もしますが・・・
>>959 簡単な方法はない
自分ででコマンドバー弄れ
>>960 about:blank開けばいい
>>960 ダミーURLとかabout:blankアクセスしたときもDocumentCompleteまたないとダメ
面倒だけどそういうもんだと思って割り切らないとIEはいじれない
963 :
デフォルトの名無しさん :2012/02/07(火) 19:39:28.51
964 :
デフォルトの名無しさん :2012/02/07(火) 22:50:02.08
Webで公開されている、javascriptで開けれる小窓をCookie指定してあげて 開きたいのですが、出来ますでしょうか? 厄介なのはIEコンポーネントが元から持っているCookieの値を消して新たに独自で定義したCookieを指定してあげたいのですが、 どうもNavigateやOnBeforeNavigateのリファレンスを見てもヘッダーをいじれるのは自分でついかしたもののみみたいなんです。 コンポーネントが元から持ってきたヘッダ情報をいじるのは無理なんでしょうか。
マルチするようなやつには無理
966 :
959 :2012/02/07(火) 23:15:18.62
>>961 具体的にはどういう処理が必要になるのでしょうか?
>>966 CCommandBarCtrlImplを継承したクラスを作成して
DrawItemをオーバーライドする
969 :
959 :2012/02/08(水) 00:08:57.58
>>968 レスありがとうです
ちょっとチャレンジしてきます
>>969 ごめんDrawItemじゃ無理だった
直接CCommandBarCtrlImplのOnParentCustomDrawを書き換えればいける
それか
NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, OnParentCustomDraw)
をコメントアウトするだけでも大丈夫かも
971 :
959 :2012/02/08(水) 00:58:41.67
>>970 レスありがとうです
CustomDrawに入り込む寸前でヘッダとにらめっこしてみた所、
m_bFlatMeusという怪しい変数を見つけまして
m_CmdBar.Create(....)の次の行に
m_CmdBar.m_bFlatMenus = false;
と追加した所、すんなりと目的を達成することができました。
良かったら
>>970 さんも試してみて下さい。
一緒に奮闘してくれてありがとうございました。
前任者がWTLで作ったプログラムがあるんだが 見た目をかっこ良くしろと言われた。 なんか簡単にかっこ良くする方法ない?
>>972 たまにこういうこといい出すやついるよな。ご愁傷さま。
がんばってオーナードローしてもやればやるほどダサくなるしwww
>>973 マジで困ってる。
結構巨大なプログラムなんで全部オーナードローは厳しい。
最初はXPスタイルも適用されてなかったから適用して見せたんだが
「エクセルみたいにならない?」
つまりリボンインターフェイスにしろって事?
リボンだとしたら最新のWTLでプロジェクト作ってそこに既存のコードコピペでやれば簡単にできるよな。 面倒だが・・・ どうしてかっこ良くする必要が生じたのかわからないが、気分的に見た目がーっていうなら、作業する ことで新たなバグを生み出す危険性を言って諦めてもらうのがいいと思うな
でもリボンにするだけなら簡単だから それですむならまだマシじゃね?
>>974 エクセルがかっこ良いってのも凄い感性だw
ああもうリボン対応してたのか。 とりあえずリボンにしてみるわ。 サンクス。
WTLのリボンサポートってVista以降専用じゃなかったっけ
まじかようちまだ90%以上がXPだよ
なんでVista以降なんだろうな。 OfficeはXPでもリボンだよな?
Vista以降に搭載されてるOSのリボンサポート使ってるから
ってことはMFCのほうは独自でリボン持ってるのか。
おつ
>>984 MFCのリボンは、Office Fluent UI ライセンスだった気がする
989 :
デフォルトの名無しさん :2012/02/23(木) 13:07:24.30
-
=
≡
#
丼
ウィザードからタブベースを選択して作っただけのプロジェクトがあります。 多段タブにしたいと思い、(CTabView)m_viewのCreate時にTCS_MULTILINEを指定したのですが、何の変化もありませんでした。 ちなみに、指定したフラグです→ TCS_MULTILINE | TCS_RIGHTJUSTIFY | TCS_TABS | WS_CHILD | WS_CLIPSIBLINGS | WS_OVERLAPPED | WS_VISIBLE 次の行にm_view.ModifyStyle(0, TCS_MULTILINE);とかやっても変わりませんでした。 CTabViewを多段にする方法を教えてください。
>>994 m_view.m_tabが実際のタブコントロールだからそっちにスタイル指定しなきゃだめ。
2段になるとビューサイズ位置の調整とかが必要になる?からCTabView派生のクラス作ってやらないと
うまく動かないと思う。
>>995 ありがとうございます。
m_view.m_tabに指定したら多段になりました。
しかし、Viewの領域が多段に対応してないようなので、もう少し粘ってみます。
つまづいたらまたよろしくです。
>>996 atlctrlx.h見てみたけど、m_tab.Create が呼ばれてるのは CreateTabControl() で、
これは OnCreate から pT->CreateTabControl() と呼ばれているから派生クラスで再定義できる
あとクライアントの位置調整は CalcTabHeight() で実装されていて
これも再定義できるみたいだから上手くやればいけるかも知れない
もうちょっと見てみたけどどうやら CalcTabHeight は最初に一度しか呼ばれないらしく 動的な変化には対応してないっぽい UpdateLayout() あたりを再定義すればやれるかも知れないけど ある程度ロジックの追加が必要になりそう
ソース見てたのですが頭がこんがらがってきてしまいました… 本当に凄いんですね…
1000 :
デフォルトの名無しさん :2012/02/23(木) 21:24:24.82
〈 ̄ヽ | ,、____| |____,、 | 〈 _________ ヽ, | / ヽ | | | |. |、 .り l ヽ' 〈^ー―――^ 〉 |/ dく\ しl ノ ,、二二二二二_、 | \ン⌒⌒⌒i 〈__ _ __〉 r-、/ l | | | |. (⌒ ,.イ l / / | | |\. ~|~ ノ l ___/ / | |___| ヽ. | ̄ノ l \__/ ヽ_____) | ( l | (______) ───────────────-┘ l ヾ ,イ ̄ l ヾ〜/)\ ,,〜ー、 l ハ `l\
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。