トップページ⇒tech
1001コメント259KB

ATL/WTL Part6

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/12/27(木) 21:19:13
ATLとWTLについて語り合って下さい。

WTL配布元
http://wtl.sourceforge.net/

過去ログ
■(Part1) ATL/WTL
http://piza.2ch.net/test/read.cgi/tech/978029639/l50
■(Part2-1) ATL 相談室
http://pc5.2ch.net/test/read.cgi/tech/1029029882/l50
■(Part2-2) WTLお勉強スレッド
http://pc5.2ch.net/test/read.cgi/tech/1078150663/l50
■ATL/WTL Part3
http://pc8.2ch.net/test/read.cgi/tech/1095442366/l50
■ATL/WTL Part4
http://pc8.2ch.net/test/read.cgi/tech/1134388951/l50
■ATL/WTL Part5
http://pc11.2ch.net/test/read.cgi/tech/1155951708/
0153ヽ・´∀`・,,)っ━━━━━━┓2008/04/06(日) 17:54:54
全部使えよ
0154デフォルトの名無しさん2008/04/06(日) 18:27:43
さすがダンゴさん胴体着陸してもなんともないぜ!
0155デフォルトの名無しさん2008/04/06(日) 19:47:53
154 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
0156デフォルトの名無しさん2008/04/06(日) 20:35:46
>>152 MS-PL
0157デフォルトの名無しさん2008/04/12(土) 16:43:58
Implってなんの略ですか?
0158ヽ・´∀`・,,)っ━━━━━━┓2008/04/12(土) 17:50:07
Implementation(実装)
0159デフォルトの名無しさん2008/04/12(土) 21:13:41
implication long
二つの64ビット値をビット毎に包含演算した結果を返す
0160デフォルトの名無しさん2008/04/12(土) 23:27:03
Implementation(実装) だと思ってた。
159 すげーな
0161デフォルトの名無しさん2008/04/13(日) 13:44:55
2008EEだけ落とすとATLついてないんだけど2005もインストールしなきゃだめ?
どっかにATLだけ単体で落っこちてないかな
0162ヽ・´∀`・,,)っ━━━━━━┓2008/04/13(日) 13:53:20
2005EE入れても同じだ
たしかDDKに3.xのヘッダが付いてた。






てかStdくらいけちるなよ。
実はアップグレードでおkなので実質2万
0163デフォルトの名無しさん2008/04/13(日) 13:57:07
>>161
Platform SDK
http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB
0164デフォルトの名無しさん2008/04/14(月) 02:04:50
VC2005EE+PSDK2003+WTL のめんどうな設定を自動でおこなうvbsスクリプト
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=30239
0165デフォルトの名無しさん2008/04/17(木) 15:42:19
Windows Driver Kitには入ってないの?
0166ヽ・´∀`・,,)っ━━━━━━┓2008/04/17(木) 16:40:22
入ってる
0167デフォルトの名無しさん2008/04/17(木) 22:48:49
それよりも2008 TeamSystemやProfessionalの体験版でも入れたほうがいいかもしれない。
0168デフォルトの名無しさん2008/04/18(金) 00:07:02
>>166 >>167
ありがとう。
0169デフォルトの名無しさん2008/04/18(金) 19:59:56
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
0170デフォルトの名無しさん2008/04/18(金) 20:06:11
なんで直前のスレの流れさえ読まないのか不思議
0171デフォルトの名無しさん2008/04/18(金) 21:23:45
ごめん,直前の話は ATL3.x だと思ってた…

Visual Studio 2005 Professional Edition 90 日間評価版

てのをちょっと入れてみます.
0172デフォルトの名無しさん2008/04/18(金) 22:05:44
>>169DDKに入っとるよ
0173デフォルトの名無しさん2008/04/19(土) 01:01:34
>>172
Windows Server 2003 SP1 DDK ダウンロードしてみたけど ATL3.0 だった (´・ω・`)

評価版まだ落ちてこない…
0174デフォルトの名無しさん2008/04/19(土) 08:19:05
>>173
内の環境では
C:\WinDDK\6001.17121\inc\crt\atl71
に入ってる
0175ヽ・´∀`・,,)っ━━━━━━┓2008/04/24(木) 19:04:04
WTLの開発2ヶ月くらい停まってるな。

Vista完全対応はあきらめるしかないのか?
0176デフォルトの名無しさん2008/04/24(木) 21:51:44
たしかViksoe氏がVS2008とvista
0177デフォルトの名無しさん2008/04/24(木) 21:53:05
途中で送信してもた・・
逝ってくる
0178デフォルトの名無しさん2008/04/25(金) 00:09:38
つか全体的にネタないよな。
本家もそうだしviksoe.dkもSoさんとこも最近は。
0179デフォルトの名無しさん2008/05/04(日) 22:56:22
質問です。CWindow::Create()で
::CreateWindow(..., CW_USEDEFAULT, CW_USEDEFAULT, w, h, ...)
と同等のことやりたい場合、RECTはどう設定すれば良いですか?

単純に{ CW_USEDEFAULT, CW_USEDEFAULT, w, h }と設定した場合、
うまく反映されないようです(非常に小さなウィンドウが出ます)
01801792008/05/04(日) 22:58:28
補足、少々言葉足らずでした。
要は幅、高さのみ指定でウィンドウ位置は
システムデフォルトにしたかっただけです。

どうかご指導いただければ幸いです。
0181ヽ・´∀`・,,)っ━━━━━━┓2008/05/04(日) 23:11:28
http://msdn.microsoft.com/ja-jp/library/kzah5bad(VS.80).aspx
0182デフォルトの名無しさん2008/05/04(日) 23:14:14
RECT rc = CWindow::rcDefault;
rc.right = rc.left + w;
rc.bottom = rc.top + h;
Create(NULL, rc);

俺はこうしてるが、正解かどうかは知らん
0183デフォルトの名無しさん2008/05/04(日) 23:19:18
ソース見ると幅と高さをright-left, bottom-topで求めてるな。
0184デフォルトの名無しさん2008/05/04(日) 23:23:02
だったら
{ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT + w, CW_USEDEFAULT + h }
にしたらいいんじゃね?
0185デフォルトの名無しさん2008/05/04(日) 23:30:42
...,CRect( rcDefault ) + CRect(0,0,w,h),...
というのは如何
01861792008/05/04(日) 23:56:48
>>184でうまくできました。
皆様ありがとうございます。
0187デフォルトの名無しさん2008/05/23(金) 03:54:44
WTLのappwizは、なんでFrameWndのスタイルに、
WS_CLIPCHILDRENを指定してないんだ?
ツールバーがちらつくじゃん。

まぁ、付ければいいんだけどさあ。
0188デフォルトの名無しさん2008/05/23(金) 06:55:21
今まで知らなくてずっとWS_EX_COMPOSIT付けてたよ・・・
0189デフォルトの名無しさん2008/05/23(金) 13:47:03
Win32のウィザードでも指定されないから、
MSの方針で、知らん奴はリサイズで点滅するアプリ作っとけって事だろうな。
0190デフォルトの名無しさん2008/05/23(金) 20:47:02
>>187
それどこのことよ
うちのはSvn最新だけど
0191デフォルトの名無しさん2008/05/23(金) 22:50:28
CFrameWindowImplに余計な指定しなければATL::CFrameWinTraitsが
適用されてWS_CLIPCHILDRENで作成されるはずだが。
0192デフォルトの名無しさん2008/06/02(月) 22:30:53
CAxDialogImpl を使って ダイアログに WebBrowser を貼り付けるといますが
表示しているHTMLにTABを押しても次のコントロールへ移動してくれません。

対応するにはどうしたらよいでしょうか?
0193デフォルトの名無しさん2008/06/03(火) 01:38:09
TAB押していったらHTMLのリンクを移動して
最後のリンクまできたら次のコントロールに移動するんじゃなかったっけ
0194デフォルトの名無しさん2008/06/06(金) 09:59:15
ATLのシンプルオブジェクトウィザードで、スレッドモデルを選択しますが、
シングルとアパートメントの違いってなんですか?
両方ともSTAですよね。
シングルはCOM初期化のプライマリスレッドでのみ実行されるとあるので、
アパートメントの方は、プライマリスレッド以外に作られるのかと思いました。
でも、両者のウィザードが生成するコードに違いが見あたりません。
FinalContruct()で、GetCurrentThreadId()を呼んで、スレッドIDを見ましたが、
両方ともプライマリスレッドのIDでした。
違いはあるんでしょうか?
0195デフォルトの名無しさん2008/06/06(金) 19:56:04
アパートメントだと、オブジェクトを作成したスレッドとは別のスレッドからメソッドを呼ぶと、
メッセージキューを利用してマーシャリングされて呼ばれる事になるが、
シングルの場合は、作成したスレッド以外からの呼び出しは不可。
ただし、アパートメントの場合マーシャリング時は引数の生存期間が変わってくるため、
それを意識した実装をしておく必要がある。

って感じでいいんだっけ?
0196ヽ・´∀`・,,)っ━━━━━━┓2008/06/06(金) 20:05:05
新MFCのRibbonとかテーマ機能がWTLで使えるようになるのはいつですか?><
0197デフォルトの名無しさん2008/06/06(金) 20:06:14
もう少し待って!
0198デフォルトの名無しさん2008/06/06(金) 20:17:07
自分で作ってパッチを送ればいいんじゃね?
0199デフォルトの名無しさん2008/06/06(金) 20:58:50
>>194-195
シングルは一番最初に作られたSTA(メインSTA)にしか属せない。
アパートメントはどのSTAにも属せる。

クラスの静的メンバのようなインスタンス間で共有されるデータに対して
排他制御が必要かどうかという違いのはず。

http://msdn.microsoft.com/en-us/library/ms681753(VS.85).aspx
02001942008/06/07(土) 22:51:46
あれかな、シングルだと、COMサーバー自信がプライマリスレッドからしか作れない、ということだろうか??
クライアントから作ることはできないのかな。
0201デフォルトの名無しさん2008/06/09(月) 17:38:30
VS2003+WTL7.5で開発していたアプリケーションを
VS2008+WTL8.0でビルドし直したら、ビジュアルスタイルが
適用されないんだけど、何が原因だろう?

埋め込まれているマニフェストを確認すると、ちゃんと
Microsoft.Windows.Common-Controlsの項目が入っているんだが。
0202ヽ・´∀`・,,)っ━━━━━━┓2008/06/09(月) 19:28:49
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の該当行コピれ。
0203デフォルトの名無しさん2008/06/09(月) 19:47:30
IE8が出てくると、ATLの需要が増えるような希ガス。
まだまだ、ActiveX多いし。
0204ヽ・´∀`・,,)っ━━━━━━┓2008/06/09(月) 19:55:46
Vistaだとリバーの描画が崩れるのよね
たいがいやわ
0205デフォルトの名無しさん2008/06/09(月) 20:10:57
>>202
いや、それは自分で書いて追加してあるんだけど、駄目だった。

理由は分からないが、一応自己解決。
プロパティマネージャから「Upgrade From VC 7.1」を削除したら
何故かビジュアルスタイルが適用された。
その後、再現しようと思って古いプロジェクトファイルからもう一度
自動変換させたら、Upgrade From VC 7.1があっても適用される。
わけがわからんw

途中で一度PCを再起動したから、その影響?
Vistaだとマニフェストがキャッシュされるとかいう話があるから、
それが悪さしてたのかな?
0206デフォルトの名無しさん2008/06/16(月) 14:36:36
CCommandBarCtrlのボタンの無効化をしたいのですが、
MFCのUPDATE_COMMAND_UI
のような機能はあるのでしょうか?

EnableButtonだけではダメでした・・・
02072062008/06/16(月) 16:27:35
BEGIN_UPDATE_UI_MAPの後に
UPDATE_ELEMENT(ID_TEST, UPDUI_MENUPOPUP|UPDUI_TOOLBAR)

OnIdleで
UIEnable(ID_TEST,FALSE);

で出来ました。
0208デフォルトの名無しさん2008/06/16(月) 17:45:38
うん、それでできると思った。
0209デフォルトの名無しさん2008/06/16(月) 19:46:53
じゃあ俺もそう思った
0210デフォルトの名無しさん2008/06/17(火) 00:24:09
ツールバーのボタンをチェックスタイルにするには
どうすればできますか?

SetButtonInfoを試してみたのですが、
GetButtonInfoが失敗して撃沈。
TBUTTON系のAPIが失敗するのも妙
何でだろ・・・
02112102008/06/17(火) 17:31:18
UPDATE_ELEMENT(ID_TEST,UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
を追加
UISetCheck
で変更でできました。
0212デフォルトの名無しさん2008/06/17(火) 17:47:47
うん、それでできると思った。
0213デフォルトの名無しさん2008/06/17(火) 22:20:21
じゃあ俺もそう思った
0214デフォルトの名無しさん2008/06/17(火) 22:30:44
質問はしょぼいけど、ちゃんと解決方法も書くのはえらいな
0215デフォルトの名無しさん2008/06/18(水) 02:09:41
自己解決しました^^
0216デフォルトの名無しさん2008/06/18(水) 09:22:30
↑ぐぐりまくって、おお、ようやく求めてた質問みっけた!
で、このオチだと泣けるよな。
0217デフォルトの名無しさん2008/06/19(木) 00:25:48
http://msdn.microsoft.com/ja-jp/magazine/cc534994.aspx
WTLヲワタ
0218デフォルトの名無しさん2008/06/19(木) 01:12:28
eGUI++
エグイぷらぷら?
イヤン
0219デフォルトの名無しさん2008/06/19(木) 02:43:14
流行るとは思えん。
ポータブルじゃないのに、
わざわざまったく異なる思想のコードを書きたいとは思わんし、
あと、識別子の命名がやたらに省略しててキモい。


つーか今どきstd::stringを使っていて、
しかもWindowsネイティブ限定とか、ふざけているとしか思えん。
0220ヽ・´∀`・,,)っ━━━━━━┓2008/06/19(木) 13:18:00
Viksoe先生頼みじゃ先細りだしな
ATLはともかく
0221デフォルトの名無しさん2008/06/19(木) 14:46:43
>>219
一応、こんな記述になっているようだが。

#include <string>
#ifdef UNICODE
typedef std::wstring string;
#else
typedef std::string string;
#endif
0222ヽ・´∀`・,,)っ━━━━━━┓2008/06/19(木) 18:33:19
きたねぇ実装だな。
_tstringよかマシだが
0223デフォルトの名無しさん2008/06/19(木) 19:30:00
>>221
なんじゃそりゃ。
ひでぇな。
0224デフォルトの名無しさん2008/06/19(木) 20:47:16
そんなにCStringが好きか
0225デフォルトの名無しさん2008/06/19(木) 20:56:11
std::stringの仕様が嫌いなだけだ
0226ヽ・´∀`・,,)っ━━━━━━┓2008/06/19(木) 21:11:49
ATL::CStringAとATL::CStringWは好き。
ANSIとUNICODEの変換が楽すぎる
0227デフォルトの名無しさん2008/06/19(木) 21:32:47
昔はUSES_CONVERSIONでT2CWとか書いてたんだよなあ。
テンプレートベースになって、明示的にCStringAとCStringWが使い分けられるのが最強すぎる。
0228デフォルトの名無しさん2008/06/19(木) 22:59:02
そんな便利だとは知らなかった。
VC++6時代と同じ使い方しかしてなかった。
このスレ見てて良かった。
0229デフォルトの名無しさん2008/06/19(木) 23:18:28
つーかC++なんだから、TCHARなんて使わずオーバーロードしてくれりゃいいのに
MFC/ATL/WTLって手抜きだよな
0230デフォルトの名無しさん2008/06/19(木) 23:48:00
WTLはTCHARしかないんだよなあ
CStringも他のウィンドウ関連のAPIも

たまにANSIとUNICODE両方用意して欲しいと思うことがある
0231デフォルトの名無しさん2008/06/20(金) 06:53:26
は?
0232デフォルトの名無しさん2008/06/20(金) 07:54:27
std:exceptionってUNICODEないよね
0233デフォルトの名無しさん2008/06/20(金) 08:24:23
STLの質問はSTLスレで。
eGUI++の愚痴は作者の掲示板で。
0234ヽ・´∀`・,,)っ━━━━━━┓2008/06/20(金) 08:32:40
>>230
あるじゃん。

ま、ATL::CStringのほうが便利だな。
ATLに依存しないコピー実装もCode Projectあたりにあったと思うが。
0235デフォルトの名無しさん2008/06/20(金) 08:42:05
>>232
なかったはず。おかげで例外に文字列渡すときは、いちいちW->A変換してる。
02362302008/06/21(土) 20:39:45
>>234
atlmisc.h見てみたらTCHARしか使ってないように見えたけど…
0237ヽ・´∀`・,,)っ━━━━━━┓2008/06/21(土) 22:32:00
>>236
これマジでおすすめ
http://www.codeproject.com/KB/string/stringwa.aspx
0238デフォルトの名無しさん2008/06/21(土) 22:55:47
話がずれてねーか?
メソッドなりのインタフェースが基本的にTCHARベースしかないのが
アレだって話じゃねーの

APIはCリンケージだからWとAの二つがあってマクロで切り替えだが
明示的に指定することも常に可能
WTLはC++だからオーバーロードが本当はベストだけど
TCHAR版の「一つ」しかない点でCのAPIにすら劣るよなって話
0239ヽ・´∀`・,,)っ━━━━━━┓2008/06/21(土) 23:15:26
C++の標準規格策定より遙か前に出来たMFCの命名規則をそのまま引きずってるので
多くは求めない方が良いかと
0240デフォルトの名無しさん2008/06/21(土) 23:19:13
WTLぐらいうっすぃラッパーなら徹底的にオーバーロードメソッドこしらえるよりも
必要なとこだけAPI直呼びすりゃいいんじゃねーの? でまかり通りそうだがな。
0241デフォルトの名無しさん2008/06/21(土) 23:27:57
>>239
いや、テンプレートで型パラメータ化しろって言ってんじゃないよ
「オーバーロード」だぞ?

いつからあると思ってんだよ
0242デフォルトの名無しさん2008/06/21(土) 23:36:50
TCHARで困るって、今時Win9x系に対応するつもりか?
まあMSLU使えば、それなりに何とかできるかもしれんが。
0243デフォルトの名無しさん2008/06/21(土) 23:53:01
>>242
TCHARオンリーは、TCHAR強要してるのと同じだろ
さもなくば-DUNICODE前提、とかいうソースになる

LPCSTR, LPCWSTRのオーバーライドがありゃ、CStringだろうがCStringWだろうが
CStringAだろうがstd::stringだろうがstd::wstringだろうが何でもそのまま使える
「正しい」ソースとしてだ
そしてAPIプログラミングならそれは可能だ

TCHARオンリーでちゃんとやりたきゃ、CA2Tとかそういう下らない変換テンプレートを
いつもいつも使うことになる
どっちがいいか、わかりきってるじゃないか

MSは単にMFCやATLを手抜きして、ユーザに手間を押し付けてるだけなんだよ
02442422008/06/22(日) 01:08:36
CString()で囲むのがそんなに面倒なのかね。
その一手間を惜しむが故に、文字列絡みの全メソッドにオーバーロードを付けるのか?
それこそナンセンスじゃね?
0245デフォルトの名無しさん2008/06/22(日) 01:14:57
>>244
マイクロソフト製品のユーザ数を理解しろよ
それが「製品」であることもな
それがよくデザインされていればされていれば、皆が幸せになれる

CString()で囲むだって?
手間なだけでなく、それが必要でないとき(例えば実際にはW->W変換であるような
場合)でもコンストラクタとコピーが実行されて確実に効率が落ちるじゃないか
冗談だろ
0246デフォルトの名無しさん2008/06/22(日) 02:30:23
もう自前で何とかするのに慣れっこ。
0247ヽ・´∀`・,,)っ━━━━━━┓2008/06/22(日) 07:29:52
ここで不満言ってどうする
msdnフォーラムでぼやけ。
中の人が聞いてくれるかも知れないよ



ああWTLの場合はsf.netに参加すればコミットできるか
0248デフォルトの名無しさん2008/06/22(日) 08:25:15
必然性が分からんな
0249デフォルトの名無しさん2008/06/22(日) 14:57:06
ダイアログに貼り付けたツリーコントロールに
WM_LBUTTONDOWNハンドラを追加するにはどうすればよいのでしょうか?

ダイアログにWM_LBUTTONDOWNを追加してみたのですが、
ツリーコントロールをクリックしても
ハンドラが呼ばれません。(その外だと呼ばれるのです)
0250ヽ・´∀`・,,)っ━━━━━━┓2008/06/22(日) 15:03:40
手動でやれば?
コントロールIDとイベントID入れて自前でハンドラ作成。

まさかWindowsプログラム自体はじめて?
02512492008/06/22(日) 16:03:52
NOTIFY_HANDLER(IDC_TREE1, NM_CLICK, OnNMClickTree1)
を追加

LRESULT OnNMClickTree1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);
でできました。
0252デフォルトの名無しさん2008/06/22(日) 16:05:25
うん、それでできると思った。
じゃあ俺もそう思った
■ このスレッドは過去ログ倉庫に格納されています