1 :
デフォルトの名無しさん :
04/09/18 02:32:46
ATLやWTLが何かしらないけど、とにかく2ゲット
重複乙
#include <Stdio.h>
>>6 いきなり意味不明な荒らしが来たと思ったが、
自分がstudioをstdioと誤記したことを、ほのめかしてたわけだな。
そんなわけで訂正。
The So-Software Stdio
↓
The So-Software Studio
9 :
デフォルトの名無しさん :04/09/18 03:38:11
どうせなら動くプロジェクトつけてほしい
いまだにこんなの使ってるヴァカっているの?
前に使ってみたけど理解できなかったのか。よちよち。
12 :
デフォルトの名無しさん :04/09/18 13:51:49
.NETでも使えるの?
変なのが釣れるから上げるな
頻出はこんなもんかな
>>17 なんつーかソース公開されてるならともかくそれだけ見せられても・・・
19 :
デフォルトの名無しさん :04/09/18 17:57:24
どうして未だにDonutの名が出ないんだ!
21 :
デフォルトの名無しさん :04/09/18 21:38:05
Donut ぉるんだ!
そこは常識だよぅ。サイト名変わってて一瞬新しいところかと思ったけど。
>>19 URLがエロサイトっぽいから敬遠してたよ。
ラムーといえば伝説の…
知らなくてよし!
ヴァカだ ヴァカがいっぱいおる
ももちんらぶ
結局微妙に荒れるのか・・・
33 :
デフォルトの名無しさん :04/09/21 23:17:38
そりゃどっちもatlcrack.hを元にしてるからな
そういや今は無きwikiでも作ろうとしてたけどほとんど放置されたまま消えたな・・・
WTLは誰も使ってないしな
・「APIに慣れていてMFCは使いたくないけど、今さら基礎クラスを作ってられるかよ。」 ・「MFCに慣れていてAPIあまり知らないけど、MFCから離脱してみたい。」 WTL使いは、この2つのグループに分けられます。 あなたはどっち?
>>38 ・「MFCもAPIも慣れてるけど、APIより楽できてMFCより軽量なのが欲しい。」
前者かな
・「自分のツールキットにいいところをパクりたい」、、、けど、なんだかWTLクローンっぽくなって(ry
ATLクローンできないかな。sopport listで話してたWTLのATL非依存化の件ってどうなったんだろ。
仕事でMFCのコードメンテするほど無意味で悲しい事はないからな
>>44 ぶっちゃけ、メンテじゃない。
不具合箇所を発見しても手が入れられない。実に虚しい。
プログラマが止むに止まれずMFCコードをAPIラッパへと移植する哀しい作業が待っているのである。
そんなにMFCに不具合箇所がたくさんあるかね?
MS謹製のライブラリだからとりあえずそんな発言しとけばいいし。
>>47 たくさんあったらそもそも使ってない。極、稀に見かけるだけだよ。
WinInetとか。こういう場合、使わないという解決策しかない。
結局WTLの話題はさっぱり出てこないな。 誰も使ってないんだろうな。
あぁ、WinInetとかSocket周りのクラスは確かに使えないな。 でもATLのHttp系クラス(名前忘れた)にもバグがあったんじゃなかったっけ? とWTL方向に話を戻してみる。
UNICODEビルドではCSocketAddrが2000やXPでエラーを起こす。 原因はGetAddrInfoW()を呼び出すから。 これが原因でCSocketAddrを使用するCSocket等もエラーを起こす。 MSに文句を言ったら修正版を送ってきた。VC7.1の話。
53 :
デフォルトの名無しさん :04/09/23 21:08:41
おい、猛者ども!ちょっと教えていただけませんでしょうか?
http://www.viksoe.dk/code/imagelistbox.htm ここにあるImageListBoxコントロールをダイアログに貼り付けて
みました。表示までできたけどもクリックしたときの
メッセージハンドラのつけかたがわからんのです。
BEGIN_MSG_MAP_EX( CMainDlg )
NOTIFY_HANDLER( IDC_MENU_LIST, LBN_SETFOCUS, OnMenuSelect)
・・
ではだめなのかなぁ?
あ、あとイメージの下のテキストに日本語使うと化けるんだけど どうすれば直せるのかわからんです・・。orz すまん、知恵くれ。たのむ。
ひとつ自己解決。 COMMAND_HANDLER_EX( IDC_MENU_LIST, LBN_SELCHANGE, OnMenuSelect) ってことでした。
>>54 日本語フォントをSetFontすればいいんでねーか?
57 :
デフォルトの名無しさん :04/09/23 22:43:07
SHIFTJIS_CHARSET
DrawTextしてるCDCHandleでSelectFontかましたら うまくいった。thanx
>>52 修正版が送られてきたってことは、
VC開発陣が不具合を既に知ってて修正コードも作ってたってことだね。
>>59 いや。ウィザードが吐いたWebサービスにアクセスするためのクラスを使うと
エラーを起こすから俺がMSに文句を言ったんだけど、
最初はなかなか原因が判明せず、何回かやりとりしてやっと原因が明らかになった。
だから修正コードを作ってくれたのはその後。
WTLの新規プロジェクトを作るとき、Generate .CPP filesにデフォルトでチェックが入っていません。 実装は全てヘッダに書いて、インライン展開するかどうかコンパイラに任せるのが ナウなヤングにバカウケなのでしょうか?
sonotouri
ヤングにバカウケなのは、. N E T 。
64 :
デフォルトの名無しさん :04/09/25 17:20:07
別に判断を聞いてるんじゃなくて ナウなヤングにバカウケなのかを聞いてるだけだろ。
イタリアーノ
ポルサリーノ
あらかじめ信頼できるソースコードなら、 即座にヘッダーにコピペしてプロジェクトに導入できると思うが、 試行錯誤して頻繁に内容を変更するコードの場合、 ヘッダーで全部済ますのはかなり不便だね。
サンマリーノで愛し合ってた二人って誰だっけ?
これは漏れの想像だが、デフォルトで .cpp を作らないようになってるのは ちょろっと試す時のお気楽さのためなんじゃないかと思う。 ちょっとしたテストではない規模のプログラムでは、 末端のクラスまですべてがヘッダだけから出来ているとどんなメリットがあるのだろう。
>これは漏れの想像だが、デフォルトで .cpp を作らないようになってるのは >ちょろっと試す時のお気楽さのためなんじゃないかと思う。 馬鹿再来だな。
ちょろっと「試す」のにヘッダー記述は向いてないと思うが、まぁ人それぞれかな。
ヘッダで全部済ませるなんて正気の沙汰じゃない。
クラス定義と実装を分けると修正が二度出間になるから ちょっと試すのにヘッダだけで完結してる方がよさそうに見えるけど。 コンパイル負荷が問題になるほど大きなプログラムを ちょっと試す程度で書けるの?
仮にもtemplateだからちゃいますのん
1番leafのクラスまで全部テンプレートにしないと気がすまないの?
なんか文句ありますか?
いやいや、愛してる。
俺も愛してるけどアホだと思う。
84 :
デフォルトの名無しさん :04/09/30 19:47:48
細かいところの質問なんだけど、WTLサンプルについてくるWTLExplorerのShellMgr.cppの30行目付近。 UINT cb1 = 0; if (pidl1 != NULL) // May be NULL cb1 = GetSize(pidl1) - sizeof(pidl1->mkid.cb); で、ITEMIDLISTの最後の2バイトNULLを引くためなら単純に2を引けばいいと思うんだけど、 わざわざsizeof(pidl1->mkid.cb)としてるのはなぜ?
>>85 それはわかるんだけど、なぜcbを指定してるの?
ITEMIDLISTの最後はcbのサイズ分だけNULLで埋める、って決まりある?
それともたまたまcbがUSHORTで2バイトだってだけの理由で使ってるの?
ソース良く読め。 ITEMIDLISTはmkid.cbが0のデータがあればそれを終端子とみなしてる。 つまり、ITEMIDLISTの最後のデータはmkid.cbの2byteだけかつ0の値。 で、pidl1とpidl2両方GetSizeしてるが、GetSizeは終端子2byteのサイズを含めて計算する。 pidl1とpidl2二つ分の終端子は必要ないから、前者の終端子分サイズを詰めてる。 つまり、 cb1 = GetSize(pidl1) - sizeof(pidl1->mkid.cb); // ( pidl1のサイズ + 終端子サイズ ) - 終端子サイズ cb2 = GetSize(pidl2); // ( pidl2のサイズ + 終端子サイズ ) ::CoTaskMemAlloc(cb1 + cb2); // (pidl1のサイズ + pidl2のサイズ + 終端子サイズ
89 :
デフォルトの名無しさん :04/10/01 00:27:18
>>86 , 87
MSDN の The Shell Namespace ていうやつを読んでみてください。
真ん中くらいに図があるんだけど、それが「2Byte-NULL」で終わってる
その下の辺りに2 Byte の NULL で埋めろって書いてあるよ
以下引用
PIDLs
For the Shell application programming interface (API),
namespace objects are usually identified by a pointer to their
ITEMIDLIST structure, or pointer to an item identifier list (PIDL).
For convenience, the term PIDL will generally refer in this
documentation to the structure itself rather than the pointer to it.
The PIDL shown in the preceding illustration is referred to as a full,
or absolute, PIDL. A full PIDL starts from the desktop, and contains
the item IDs of all intermediate folders in the path. It ends with
the object's item ID followed by a terminating two-byte NULL. A full
PIDL is similar to a fully qualified path and uniquely identifies
the object in the Shell namespace.
ITEMIDLISTが連続してるところに突然2byte-NULLが出てくる ってのも変な気がする。 cb==0でabIDが無い(サイズ0)のITEMIDLISTで終わる というのが素直な考え方だと思う。
>>88-89 いや、ITEMIDLISTの終端は2バイトのNULLだってのもわかってるし、
>>84 がその2バイト(cb=USHORT=2バイト)のNULLを省くコードだってのもわかってる。
>つまり、ITEMIDLISTの最後のデータはmkid.cbの2byteだけかつ0の値。
MSDNに書いてるのは「2バイトNULL」であって、「cbの分」とは書いてないと思うんだけど?
MSDNに「cbと同じサイズのNULL」とでも書いてあればわかるんだけど、
読む限り終端の2バイトNULLとcbの関係については書いてないと思う。
で、改めてソース見てると
while (pidl->mkid.cb != NULL){
cbTotal += pidl->mkid.cb;
pidl = Next(pidl);
}
とかあるので、ポインタが終端の2バイトNULLの部分にいっても
SHITEMIDと同じように扱うためかなと思った。
つまり
>>90 が書いてるように
ITEMIDLISTの終端NULL = abIDがないSHITEMID
として扱うために終端はcbと同じサイズなのかなと。
これ正式にMSDNには書いてないよね?ただのtwo-byte NULLだけで。
仕様策定時に突然謎の2バイト0が出てくるわけもないし。 cb のサイズが2バイトだったからというほうが自然だろうな。
>>87 の二番目のページにUnicodeだから2バイト?みたいなことが書いてあるけど、答えはcbを判定するためってことだね。
94 :
デフォルトの名無しさん :04/10/03 16:17:35
96 :
デフォルトの名無しさん :04/10/03 18:15:19
>>95 さん
ありがとうございました。
試してみたいと思います。
他の人たちはこまってないのかな。
犯罪者・・・
とうとうこの板からタイーホ者が・・・
ATLソースの頒布権が95にはない。 つまり、やってることは著作権保護法違反ってやつだ。 ま、自己責任で使う分にはMSも黙認してくれるだろーが。
ニュー速から記念かきこ。 タイーホはまだですか?
記念まきこ
WTLからDirextXを使うサンプルはありませんか?
>>102 どのような条件の下で>95がqfeを貰ったのにかによるし、その条件が
わからんので何とも言えんな。
ただ、ファイル名からすると、プライベートHotfixではないので、タイーホされることは
ないから、>95よ、安心しろ。
KBページからはダウンロードできないので、恐らく、必要時にMSに言えばすぐに貰えるものだろう。
結構、言語製品には、この手のものが多いからな。
107 :
95 :04/10/04 21:56:16
>>106 なるほど。
MSから貰ったときには頒布に関する制限は特に課されなかったように思うが
気分が悪いので引っ込めることにするよ。
108 :
デフォルトの名無しさん :04/10/05 00:04:41
95氏、今日にもタイ━━━━||Φ|(|゚|∀|゚|)|Φ||━━━━ホ!!!!
賞味期限の切れたネタでいつまで引っ張る気だ
今月末くらいかな。
WTLに挫折なんてあるのか?
WTL自体が挫折
>>114 そんなに「挫折」という言葉が珍しいかい? w
↑本人登場
賞味期限の切れたWTLでいつまで引っ張る気だ
>>117 WTLを味わう前に挫折したくせにね。 ( ´,_ゝ`)プッ・・
煽りにいちいち反応するな
煽り位しか話題がないのかこのスレ
ネ、ネタをくれぇ・・・
122 :
デフォルトの名無しさん :04/10/06 08:44:22
やっぱATL/WTL使用者は上級者が多いから 質問は少ないよね。
そういう見方もあるか。 活発なスレは裏を返せば自分で調べることもできない 薄らハゲの集まりということか……
いや、単にWTLユーザーが少ないからだろ。 つーかWTL使ってるくらいで自分を上級者って言うの恥かしくないか・・・
と、WTLを理解できない初心者の
>>124 が申しております。
また始まったよ。
まぁ、WTLは難しい=自分は上級者だからできる、と思い込んでるから挫折とか素人は手を出すなとか言ってるんだろうけど。
はっきり言ってWTLを使うだけなら難しくもないし上級者である必要もない。
見てるこっちが恥ずかしくなるから、WTL使ってるだけであんまり自分を上級者だと思わない方がいいぞ。
質問が少ないのはユーザーが少ないだけだ。WTLの前スレの
>>1 が作ったML見りゃわかるだろ。
14人て。しかも立てた
>>1 もやる気ねーし。やる気無いのが見てわかるから新規に参加する奴もほとんどいねーし。
本家のサポートリストのようにユーザーが多ければ普通に質問も話題も出てくるっつーの。
馬鹿、あの1だから少なかったんだよ
あの1はいつまで放置する気なのかな。 放置してればいつかは活発になると思ってるのかな。今でも。
wikiも1が自分で閉めたというよりは、放置しすぎて削除されたという方が正しい?
結局誰も使ってないから誰も1の跡を継げないんだけどな
継ぐって何をだ。
.NETが何だ。
俺たちにはWTLしかないんだ。
>>127 自分がヘタレだからって、他人も同じだと思うなよ。 w
必死すぎ
てかWTL使ってる香具師って空気が読めてないだけだろ。 どう考えてもMFC以上に先が無いのに。
OLEDrag&Drop 楽にできなかったっけ?
MySQLにMSのオープンソースプロジェクトが採用されるというニュース、 WTLかと思ったらWiXの方だった・・・
144 :
デフォルトの名無しさん :04/10/16 02:49:34
久々に趣味でアプリケーションを作ろうかと思った。 CCmdBarを継承してクールなメニューを作ったんだが。 2Kだとメニューの枠が立体的でかっちょ悪い。 XPなら勝手にフラット&影になってくれるけど。 メニューウィンドウの作成をフックするんだっけ? メンドクサイからいいや・・・。
独り言なのかCodeProjectに誘導してほしいのかはっきりしる。
ATLと分離してくれれば、MFCよりユーザ増えると思うんだけどなぁ
ATL非依存化はサポートリストでもしばしば話題になるよな
>MFCより
ATLに依存していて、なにか困るか?
誰も困るなんて話はしてないわけだが。
うーんどっかで見たような文章だな
>>150 困らないのに、何でATLと分離する需要があるの?
>>149 WTL開発者がATLのバージョン毎にソースを用意する必要がある。
つまりVCのバージョン毎に用意しなければならなくなる。
もし、純粋なAPIラッパーであれば従来のSDKヘッダーと同様に、
Unicode/MBSCと_WIN32_WINNT、WINVER、_WIN32_IEあたりで
切り分ければ良かったはず。あと、_WIN32と_WIN64があるか。
これでも十分煩雑だけど・・・。
atltypes が namespace に入ってなくて気持ち悪い・・・。
>>152 ExpressEditionやVC++Toolkitユーザ<需要
なんだ、厨房向けか
そんな捨て台詞吐くくらいならレスしなきゃいいのに。
support listでbccやgccも挙がってなかったっけ。 SDKが無償ならクラスライブラリも無償で欲しいと思っても別におかしくないわな。 俺はVC++Pro使ってるけど。
ATLと分離なんてほとんど不可能だろ。 ATLに依存しまくってんだから。
ATLも配布してくれればいいんだよ
WTLの根幹のCWindowがATLなんだからもうどうしようもない。
ATLがオープンソースになるか、CWindowなどと同等のクラスをWTLに追加するか。 なんか必死な奴いるけど、単に非依存になればいいなって話だろ。 何ムキになってんだか。
Visual Studio 買えないだけだろ
ATLに非依存になっても、大してメリットはないって話だろ。 何ムキになってんだか。
貧乏人はこんなスレ見てないで働け
>>167-168 お前のレスはずっと説得力ないんだが、
非依存になったら何か困るのか?
ここでVC++持ってることをアピールして何か意味あんのか?
正直、このスレ見てる奴はみんな持ってると思うんだが。
ATLに依存っていうより、VC依存症の奴がいるなw 離れられないんでちゅねー
WTLスレで何を。
MSのもっとも優れたアプリケーションは皮肉な事にVisualStudioであると思う。
そうか? WindowsとかDirectXとかWMPのほうがよっぽど。
だれもVisualStudioを超える拡張性・利便性を持ったアプリを作っていない。 VSには相当な金・頭脳が投入されていると思われる。
「だれも」が指す集合は具体的に何? 拡張性も利便性もたとえばemacsにすら劣っているように見えるけど、超えるの定義は何? アプリとあるけど、開発環境に限定しないこの世に存在するすべてのソフトウェアをさしているの?
MSの、ってあるのにemacsとか持ち出すなよw まぁ、自社の開発者が自分の環境を整えるために機能拡張するんだから 凝った作りにもなるわな。社内での能力アピールにもなるし。 それが結果としてMSで一番安定したアプリケーションを生み出す原動力に なっているのが皮肉なんだろ。 逆に言えば、WMPなんかどうせ開発者たちは凝った使い方せんから 聞けさえすればあとはどうでも(ry
ぶっちゃけWTLがATL非依存になってもMSに何のメリットも無い。
ユーザーにとってもメリットないな。
>>177 >>178 ウルセーんだよ。
俺様が「メリットがある」って言ってんだから、大ありなんだよ!!
>>178 にとってはメリットないな。
MSのメリットは考えるだけ無駄。
>>180 既存のユーザーはATLと切り離されても影響ないし、
いまから新たにWTLはじめようなんて言う物好きもいないだろう。
VCTKとか、まともなツールキットがないコンパイラを使ってる貧乏人がMS純正品を使いたい
とか言うすごーく特殊な需要しかないだろ。
普通の人はWxとか自作、はたまたDel等のRADに手を染めるほうがよっぽど建設的だ。
>>181 だから非依存になったら困ることあるのかって。
特殊な需要だろうが、これからWTL始めようとする物好きだろうが、
メリットはメリットだろ。
そこまで非依存を拒絶する理由がわからん。
反論したけりゃまず説得力のあるデメリットの例を挙げてみ。
つーか本当にWTL使ってんの?
WTLユーザーを減らすような考え方しかできてないみたいだけど。
切り離してくれって云ってるやつは、簡単に言うと古事記ってことだろ?
俺は既存ユーザだがあのマクロだらけのソース(_ATL_VER >= 0x0700の嵐とか)よりは統一されてくれた方が嬉しい。
>>186 もしかして分離にメリットがないと感じているのは一人だけだと思ってる?
つか依存するライブラリが別々に提供されてることに違和感ないのかね。 すぐ「貧乏人」を連呼して逃げる奴は。
>>188 全然違和感がない。
なぜならWTLはATLを拡張するためのものだから。
>>187 論点がずれてる。
そりゃメリットがないと感じてる奴はいるだろう。
ただメリットがあると感じてる奴もいるってこった。
VC++持ってる奴の中にもない奴の中にも。
それを「金が無いから」だのとひとくくりにして反論してるつもりになってるからウンザリしてんだよ。
んでデメリットの例マダー?
要はATLをフリーにしろって言うんだろ。 厚かましいんだよ。
>>192 社員かおまえは。
てか過去ログ嫁。フリーでもいいがWTLをATL非依存化でもいいって書いてるだろ。
さらに言えばWTLをATLに吸収でもいい。
でもフリーorATL非依存化の方がユーザーが増えるからフリーor非依存化の方がいいなって流れだ。
要は使用やバージョンアップに二つのライブラリのバージョンを気にするのがめんどうってことだ。
貧乏人はWin32 SDKだけで汗をながせ。
以後貧乏人連呼厨は放置で。 貧乏人という仮想ターゲットを脳内で作りだして優越感に浸りたいだけの電波なので、レスしても電波レスしか返ってこない。
ATL分離厨は放置で。 ATLやWTLに関する有意義な情報交換をやりましょう。
>>196 はまともな会話ができないのでこいつとは情報交換は無理げ。
ひとつも反論できてないもんなぁ。困った時の貧乏人連呼だし。
オープンソース関連のスレには必ず一匹はいる連呼厨か。
連呼してもVC++を持って無い人間はおそらくこのスレには皆無だという現実が虚しい・・・
連呼厨、新天地を求めVCTKスレへ ↓
そして伝説へ・・・
ハハハ。 所詮、オプソ厨の程度はこんなもんか。
VC持ってない人を取り込む為にもATLから独立して欲しいな。 ユーザ数が増えれば情報量も増えるでしょ。
Cマガってサイトで記事や要望を募集してるんだな。 要望だしたら扱ってくれるかな。 自分で記事を投稿する元気はないけど。
雑誌で紹介されてるの見たことないなぁ。 俺がWTLを知ったのもこの板だし。
普段はvc7を使っているけど、vc7にはプロファイラがついてないから プロファイルしたいときはvc6でコンパイルしなきゃいけないから 結局古いATLのほうにあわせなきゃならんのがめんどくさい
プロファイラだけならDevPartner入れればいい。 ロハで落とせるし。
VC8には付いてるんだっけ? たしかプロファイラ使用後に最適化するオプションついてるんだよな
ATLだけでは使わないからなぁ、余計なのない方が嬉しいよ 分離反対派は海外のforumなんか覗いたこと無いんだろうな…
分離は困る。 WTLがATLに依存しなくなるってことは、今WTLとATLが共有している部分は、別々の互換性が無いクラスに分かれるってこったろ? ATL::CWindowとWTL::CWindowが混ざったプログラム俺は書きたくないね。 ATLとWTLを統合するほうがまだ建設的。
support listすら見て無いんじゃないか。 というかここまでで反対の理由が一つも挙がってないよな。 メリットが少ないからしなくていいってだけで。 要するにどっちでもいいのとちゃうんかと。 やたら反対する理由が知りたい。
>>211 互換性を残しつつ作ることも可能じゃないか。
逆に完全にATLから独立するように作るなら混ざりようがないし。
ATLと統合も良いと思うけど。
ATLの属性付きプログラミングに公式対応させることの方が先決だな。
属性付きだと_ATL_NO_AUTOMATIC_NAMESPACE使えないのちょっとつらいな・・・
俺にとってはIDLをわざわざ作らなくていいメリットの方が大。
属性付って毎回IDLコンパイルしなおされなかったっけ? 速度的にきつくてあきらめた記憶がある。
日曜の昼間っからなんでこのスレがアツいの?
220 :
デフォルトの名無しさん :04/10/19 07:48:58
WTLバージョンage
なんだよ7.5って・・・・ 今までずっとMSの7.1が最新だと思ってた俺はアホか・・・
アホ
前回が二ヶ月ぶりで今回が三ヶ月ぶりか。
間が1.5倍ずつになってるのか
つーことは、4回後には6倍だな。
いや、+1ヶ月ずつかもしれん。
つーことは、4回後にはWTLは.NETに吸収合併だな。
support listでも新バージョンについて投稿されたな
新しくなった点を質問して、なんで自分で調べないんだ?と軽く怒られてるな。
閉鎖的だな
2chよりもたちが悪いな w
せめてReadme.htmの「Changes Between WTL 7.5 And 7.1」は更新して欲しいな。 support list、今度は新バージョンが置いてある場所を知らない奴か・・・ 新バージョンについてろくな投稿がないな・・・
テンプレの神サイト The So-Software Studio でバージョン履歴が公開されてるね
236 :
デフォルトの名無しさん :04/10/25 20:59:15
BEGIN_MSG_MAP_EX(CTreeView) MSG_WM_CONTEXTMENU(OnContextMenu) END_MSG_MAP() LRESULT OnContextMenu(HWND hWnd, CPoint& ptClient) { ATLTRACE("OnContextMenu\n"); return 0; } ツリーコントロール内でコンテクストメニューを出したいのですがうまくイベントが発生しません。 右Wクリック又は、右ドラッグ->右ボタンアップの操作を行った場合はちゃんとイベントは飛んでくるみたいです。 そもそも他のメッセージを捕まえて行うんでしょうか? (WTL固有の問題かもしれないのでこちらに書き込みました)
SDIのビューにツリーコントロールを使ったってこと?
>>237 今開発してるの(SDI)はもうちょっと複雑ですが、
先ほどSDIのビューとしてツリーを使ったもので試してみた所同じ現象が起きました。
ウィザードが生成したコードに
>>236 の部分のみ変更を加え、
MainFrameからツリーへノードをいくつか追加してます。
同様にツリーコントロールをリストコントロールに変えて試したところ、 正常にWM_CONTEXTMENUが飛んできます。 ツリーコントロールは他に必要な手続きがあるんでしょうかね。
240 :
質問 :04/10/25 23:27:53
WTL って実際の開発で使われていることってあるんですか? それとも、もの好きのためだけのライブラリですか?
>>239 MFCでも同じだね。NM_RCLICKしかないかも。
>>242 ええ。MFCでも同じでした。
理由はわからないけどツリーコントロールはWM_CONTEXTMENUが飛んで来ない仕様だから
NM_RCLICKなんていう通知メッセージがあるんですかね。
エクスプローラでも同じみたいなのでNM_RCLICKで対処してみます。
ただNM_RCLICKだと項目が選択されてTVN_SELCHANGINGとかが発生しちゃうんだよなぁ。
244 :
デフォルトの名無しさん :04/10/29 19:18:25
デバッグビルドでは問題ないのですがリリースビルドしたら error LNK2005: __osplatform は既に atlmincrt.lib(atlinit.obj) で定義されています。 とか言われてコンパイル出来ないんですがどうすればいいんでしょう??
_ATL_MIN_CRTだったかな?
246 :
デフォルトの名無しさん :04/10/29 22:43:33
>>245 それをしゃべれば、それは
マルチスレット、C言語標準関数、そして、例外を使うことが出来ないとなります.
変な人警報ですか?
プロジェクトのプロパティで 「ATLでCRTをできるだけ使用しない」「いいえ」 としたらリンクできました。 デフォルトでMIN_CRTなのか(;´Д`)
249 :
デフォルトの名無しさん :04/10/31 01:55:39
>>249 あなたがメッセージを横取りしてしまったためにエディットコントロールがキー入力をハンドリングできなくなってしまったのです。
動いているキーはWM_KEYDOWNではなくWM_CHARなどで処理されているのでしょう。
>>250 なるほどなるほど!そういえばすっかり忘れていましたが、
文字以外でも、スペースやBSだけはASCIIコードありますもんね。
SetMsgHandled(FALSE);が、普通のサブクラス化におけるCallWindowProcの役割を
果たしてくれるのかと思っていたのですが、違うみたいですねぇ。
しょうがないので、あまりスマートじゃ無さそうですが、自分でCallWindowProcを呼び
m_pfnSuperWindowProcというメンバを渡すことで解決しました。
レスありがとうございました。
252 :
デフォルトの名無しさん :04/10/31 15:07:43
WTLでインテリセンスを有効にして快適環境を構築する方法を見つけました! たったの一晩で今まで表示されていなかったCCommandBarCtrlImplのメンバなどが表示されるようになりました! 2億円、 3億円、 5億9千万円収入者続出しています(違
日記は
ジャポニカ学習帳
WTLで作ったexeって、他に何かランタイムとか必要なんですか? やたらコンパクトなんですが。。。
釣りですか?
257 :
デフォルトの名無しさん :04/10/31 22:04:14
いや、マジです。 MFCとATLしか使ったこと無いんで。
いやATL使ってるならわかるだろ。_ATL_MIN_CRT
atl.dllと_ATL_MIN_CRT って関係あったっけ。 Cランタイム無だったような。
>>255 はCRT無しだからコンパクトって話じゃないの?
atl.dllとかmfc*.dllみたいなファイル、例えばwtl*.dllみたいなのが必要なんですか?って話。 Cランタイムは、ATLで開発を始めてから使わない習慣が出来てしまいますた。
なんつーかwtlの中身見ればわかると思うんだけど必要ないよな。
おおっそうなんですか。こりゃいいな。これでいこう。
「あぁあぁんっ・・・はぁはぁ、あっあっ・・・んん・・い、いくっ!いくぅ!あぁん・・い、いっちゃうよぉ・・い、一緒にっ・・イクときは一緒にぃぃっ!」
265 :
デフォルトの名無しさん :04/11/01 01:34:28
atlbase.hなんですが、 DEBUGモードだと内部でstdio.hも読み込まれて、sprintfとかの標準関数が使えるのですが、 RELEASEモードだと、stdio.hが読み込まれません。。 これはなんでこんな仕様になっているのでしょうか?
そんな餌でクマー
>>261 つーか、Dependency Walker で確かめりゃいいじゃん。
Releaseだとデフォルトで_ATL_MIN_CRT ふぁっきゅ〜だな。
つーかこのところ_ATL_MIN_CRT関連の質問大杉
Cライブラリを使わないアプリなんて現実的なのかねぇ・・・。 のちのちの移植性を考えてみても使わないメリットは小さい気がするのだけど。
>268 >Releaseだとデフォルトで_ATL_MIN_CRT そうなんですか。。 なんでビルドの種類によって違うんでしょうか。。変な仕様ですね。。 とりあえず、リリースモードの時だけ、atlbase.hのあとにstdio.hを読み込むようにしました。
>>271 リリースから_ATL_MIN_CRTを外せば?
274 :
デフォルトの名無しさん :04/11/03 17:50:05
WTLのCComboBoxでDROPDOWNLISTにして AddStringで10個くらい項目を足しているのに 右側の▼を押してもリストが展開されません。 見た感じ項目数0のリストが表示されているようです。 この表示数を増やすにはどうすればいいんでしょうか。
>>274 WTL関係なくて、CComboBoxのウィンドウが小さいだけ。
プログラムでウィンドウのサイズを変えるなり、
リソースをテキストで開いてサイズ書き換えるなりすればOK
或いは例えばVC6なら、リソースエディタでコンボボックスの▼の辺りを
クリックすれば、ドロップダウンのサイズを変えられるよ。
>>275 ありがとうございます。すごく助かりました。
明日学校行ったら直してみます。
277 :
デフォルトの名無しさん :04/11/04 16:50:49
AppWizardでHTMLビューを作ると、ビューのPreTranslateMessageで if((pMsg->message < WM_KEYFIRST || pMsg->message > WM_KEYLAST) && (pMsg->message < WM_MOUSEFIRST || pMsg->message > WM_MOUSELAST)) return FALSE; // give HTML page a chance to translate this message return (BOOL)SendMessage(WM_FORWARDMSG, 0, (LPARAM)pMsg); とあるのは何のため? 前者のif文は、IEのコンテキストメニューを表示したりするために マウス関連メッセージを有効にするため? 後者のSendMessageは何のためだろう。
>>277 give HTML page a chance to translate this message
279 :
デフォルトの名無しさん :04/11/04 17:24:57
WTLのCComboBoxでリストが10個までしか表示されません。 これを増やすにはどうしたらいいですか?
>>278 PreTranslateMessageがtranslateの場所では?
なぜWM_FORWARDMSGで転送してんの?
コメントアウトしても何も変わらんが。
ATLにPreTranslateMessageなんてあったか?
WTLだろ
質問に答えられない
>>286 よりもマシだけどな w
>>288 負け犬の遠吠えにしか聞こえないからやめとけ
相手に聞こえるところで言うのは負け犬の遠吠えとは呼ばない。
なにこの284以降アホなスレ
んでHTMLビューのPreTranslateMessageでWM_FORWARDMSGメッセージ送ると何が変わるの?
やった〜過疎スレなのに伸びてるよ〜
>>277 前のほうの if 文で、web browser control に転送しないメッセージのとき単に false を返して終了し、
後ろの SendMessage で実際にWEB Browser control 側にメッセージを転送しています。
これは入力フォーカスがビューウィンドウにあって、BS やら ALT+矢印やら TAB やらが押下されたとき、
WEB Browser control 側にそれを処理する機会を与えるための処理です。
(WM_FORWARDMSG のハンドラはatlhost.hで実装されていて、 ole control の IOleInPlaceActiveObject::
TranslateAccelerator() を呼び出す)。
詳しくは IOleInPlaceActiveObject::TranslateAccelerator の説明を参照。
299 :
デフォルトの名無しさん :04/11/09 23:33:24
VCTKをダウンロードしたもののWTLはATLがないと使えないと 諦めていたら、なぜかPlatformSDKではなくDDKにATL3.0が 付いてきてました。 WTL7.5はATL7前提とかいう話も見聞きしてますが、とりあえず ATL3.0でも使えてるんで情報あげ。VCTKスレに書くべき?
タイーホカウントダウン?
301 :
デフォルトの名無しさん :04/11/09 23:49:25
タイーホて漏れ?VCTKもDDKもPSDKもWTLも全部ライセンスに 従ってほぼ無償でMSとかから入手できるが??? もしかして釣られた?
>WTL7.5はATL7前提とかいう話 これってどっから出たデマ情報なんだろうな? 俺も聞いたことある。
304 :
デフォルトの名無しさん :04/11/10 00:48:23
うん。でも実費+送料とかで$30とかしか請求されない。 はるばるアメリカから送ってくることを考えたらほぼ無償でしょ。 MS的には来年にはVSExpressも出すし、.NET もあるし、 もはやVCTK+ATL+WTL+MFCくらいは勝手に持ってけ状態なの かも(今見るとMFC4.2もDDKにあるような…)。 VCTK見た時は最適化コンパイラでも素のコンパイラだけでは Mingw/gccの方が〜と思ったもんだが、ATL/WTLが使えるなら 手軽なWindows/C++開発環境としては最強かも。
>>299 おおー素晴らしい!
貧乏人の俺がVC6を窓から投げ捨てる日が来た?
CAtlRegExp、CImage、など色々使いたいのだが、ATL3.0ではどうしようもないな・・・。orz
VCTKって何?
>>306 そうか、これ使い回せばいいのか
2005Express+VC6のATL+WTL+仕上げにVCTKでOK?
ゴメンヨ
まぁ2005Expressもうちじゃ重いんだよね…( ´・ω・)っ[VC6]ミ
>>308 Violent and Crazy Team Killer もしくは、Visual C++ Tool Kit
>>313 VC6のATLはVC6でしか使っちゃ駄目とか?
>>314 そ、そうなのか
今規約をざっと見てみたところ、そういう記述は無さそうだけど、どうなんだろ
このスレには、やたらと他人を犯罪者にしたがる厨房がいるからな。
自己弁護乙
>>316 そういやWTLとATLの分離を頑なに反対してた奴に似てるな
ベツニ
自己弁護乙
イミワカンネー
WTL/ATL分離というよりは、ATL/COM分離を求めているわけだが。 「CWindowはCOMと無関係であるにも拘らず・・・」と永遠に続くのであった。
>>322 COMサポートはATLの一部分に過ぎないんだから
別に分離しなくても使わなきゃいいだけの話だと思うが。
ようするに、正規VisualC++.NETを持っていない人限定の要望。 C++BuilderユーザやCygwin・GCCユーザでも使えると嬉しいってこった。
C++BuilderユーザはVCL使ってればいいし、 GCCユーザーやCygwinユーザーはwxWidgetsでも使ってればいいじゃん。
ライブラリの選択肢が増えるのはいいことじゃないか。
>>325 ワラタ
おまいの頭には汎用ライブラリの利点という文字は無いのか
じゃあみんなwxWidgetsとかQTでいいじゃん
たぶん
>>325 とは一生会話が成り立たないだろうな。
VC7でATL3.0は使えないんじゃないか? ビルドはできるのだけど、実行しようとするとエラーで異常終了するわけだが・・・。 さて、VC7の場合、どのATLヘッダーとリンクすればいいかね?
リンクじゃなくてインクルード。まぁわかると思うけど。
ヘッダーとリンク?
>>333 説明不足だった。VC7ではなくて、VCTK2003。
PSDKのWin64のヘッダではランタイム異常終了するし、
VC98のヘッダでは金毘羅さえ通らない。
さて、どうしたものか。
コンパイラやリンカのオプションは間違ってない? あとどんなソース書いたのか。
>>335 リンカオプションが間違ってたらビルド完了さえできないはず。
ATLを使わずAPIだけを使っている他のプロジェクトはちゃんと動いてる。
というか、VCTK2003でATL使ってる人っているのか?
そもそもATL3.0はVCTK2003でちゃんと動くものなのか?
>>334 Win64 用のヘッダか・・・ウィンドウプロシージャサンクしてるとこのコード読んだ?
atlbase.h の _stdcallthunk 。_M_IA64 とかが定義されてると当然落ちるけど。
>>337 _M_IA64 はPSDKリファレンスの「The Tools」に書かれている内容では、直接定義してはならないとあるみたい。
自分はいつもどおり _WIN32のマクロ定義を使ってる。
PSDKにはatlbase.hが2種類ある。
<installdir>\Microsoft Platform SDK\include\Win64\atl\atlbase.h (2002/08/21 08:34:30)
<installdir>\Microsoft Platform SDK\src\mfc\atlbase.h (2001/08/15 15:05:30)
一応、両方のパスで試した。Win64版はビルドできるけど実行時に落ちる。
src\mfc版はコンパイルが通らない。ほぼV98版と同じエラー。
ちなみに、コンパイルオプションは、/arch:SSE2 /G7 /GS を追加してる。
せっかくある機能は使いたいのが人情でしょ。駄目・・・?
Win64版はちゃんと64bit版windows上で実行してんのか?
>>338 せめて落ちる場所くらい特定してから来い。
ATL/WTLを分離して欲しいってやつは自分でやればいいんじゃないの? せっかくソース公開されてんだし。 著作権にだけは気をつけて。
どう気をつけるんだ。
車輪を再開発しないためのライブラリ
>>340 WTLで異常終了するのを確認。WTL7.5(wtl75_4291.zip)を使ってる。
異常発生位置は、atlframe.h の456行目
::CreateWindowEx()
VC6.0の"ATL/WTL AppWizard"で作ったSDIアプリのプロジェクトをメイクファイルエクスポートして
VCTK2003環境でビルドすれば他の人も異常終了を確認できると思う。
ATLヘッダーはPSDのWin64版を使っている。(_ATL_VER=0x0300)
どうやら自分のVC6SPが古いのが原因だったみたい。
ちなみに自己弁護っぽくなってしまうが、VC6SPのバージョンが低いことと、 PSDKWin64ヘッダを使ってTK(=VC7)でビルドした実行ファイルが異常終了することは、 全く関係がないと考えてよいと思う。 PSDKのWin64ヘッダファイルでWin32アプリをTKでビルドすると問題が起きるっぽい。
そんな事も藻前くらいしかやらんだろうから問題無さそうだな
こりゃ、スルーだな。次いこう。
ATLがフリーにならないと、人々が望んでTStringを使うようにはならないだろう。
TStringって何ですか?
帝政する。 TStringをCStringTに文字列痴漢して読んで貰いたい。
>>350 =354
こいつアホだな。DelphiスレでATLラーメンでも食って死んでろ
>ATLラーメン どういう意味かわからない。なんか元ネタあるの?
そのままやんけ〜
最近とみにレベルがひくいな
>>359 同意。
「低い」を漢字で書けないなんて、レベルが低すぎる。
>>360 同意。
いちいち細かいところで嬉しそうに突っ込んでくるなんて、レベルが低すぎる。
おじさんつまんなーい。
TWLじゃなくてWTLにしたのはこうやって紛れ込むやつを当て込んだのかな・・・。
>>368 だとしたら非道く狭いシェアを当て込んだもんだな
つか真面目な話、こんなのが引っかかるのは邪魔だなぁ
単にSTLに合わせたからとマジレスしちゃ駄目?
>>370 ぜひTokachi Web LinkがSTLに合わせる理由をマジレスして頂きたい( ゚д゚)σ)´Д`)
俺が知ってる限りWTLオープンソース化のニュースが流れる前は、 GoogleでWTLを検索すると十勝Webリンクが一番上にヒットしてた。 ニュース以降はWTLに関するニュース記事やブログが上位になっていったなぁ。 ま、未だに十勝Webリンクも上位にヒットするけどな。
>>362-365 次スレテンプレート候補ということでFA?
話は変わるが、
yahooフォーラムで出てた通りサンクの構造体をユニオンにして
WIN64ヘッダでビルドしたDirectX使用のWTLアプリは不意にOS毎落ちる希ガス。
諦めてVC98でビルドしたバイナリだけつかうようにしてる。
原因は調べる気なし。つか、OS道連れなもんで原因特定方法わからんし。
かなり前に既出のような気がするけど忘れた。 まぁ2.0だし。
376 :
デフォルトの名無しさん :04/11/22 16:26:21
377 :
デフォルトの名無しさん :04/11/26 01:03:47
テンプレートーライブラリー(っていうんですかね?)を導入したいと思っています。 現在、WTL、BOOST、LOKIでどれにしようか迷っています。 互換性、プログラムの簡潔性を重視したいので、どれか一つに絞りたいと思います。 どれが良いんでしょうか? よろしくおねがいいたします。
378 :
デフォルトの名無しさん :04/11/26 01:11:07
>>377 用途が違うから絞るものじゃない。
それぞれの用途を調べて自分で決めれ。
>>377 STLportっていうのもあるよ。これはSGI(注:創価学会ではありません)の技術がいっぱい詰まった、
未来のてんぷれーとーらいぶらりーさ。
はぁ・・・
あのさ、C++のテンプレートライブラリは専用のスレがあるからさ、ちょっとだけ空気読めよな
>>377 別に一つに絞らなくても構わないと思うぞ。
例えば、お前の言うBoostとLokiとATLを組み合わせて、
boost::shared_ptr<Loki::SmartPtr<CComPtr<I***> > >
とすれば、最強の超スマートCOMポインタが作れたりする。
ATL にも boost::shared_ptr 欲しいよね。 漏れ boost は shared_ptr と function の為にしか使ってないや・・・
アイドルハンドラってとにかく暇な時に呼び出されるわけじゃないのね
>>386 メッセージループで処理すべきメッセージが無いときに呼ばれるんじゃなかったっけ。
>>386 CMessageLoopから派生したクラスを書けば、そのような挙動にすることも可能だよ。
漏れは、ゲームとかリアルタイム系のアプリ作るときには使ってる。
>>385 boostはゲームソフトの抱き合わせ販売のようなものだ
――ゲーテ
他のライブラリの話はもういいから。
>>391 いや、そもそもCMessageLoopがそういう状況を考慮して作られているから。
ソース見てみれば分かるよ。
デフォルトで while(他にメッセージが無い){ アイドル処理; } なメッセージループは嫌だなぁ。 どんなアプリもCPU100%
>>394 そんなのは、CMessageLoopの派生の仕方によって好きなように制御できる。
デフォルトで、なら嫌だなって話だろ
そうだそうだ。 お兄ちゃんに謝れ。
399 :
デフォルトの名無しさん :04/11/27 14:08:37
www.codeproject.com/wtl/wtldockingwindows.asp ここにあるデモプロジェクトがコンパイル出来ません。 一番シンプルそうなDockSiteSampleとか。 同梱されているincludeフォルダにインクルードパスを通す。 プロジェクトにDockImpl.cppを追加。 stdafx.cppからDockImpl.cppをインクルード。 MainFrameでDockingWindow.hをインクルード。 _ATL_MIN_CRTを解除して/GXコンパイルオプションを設定。 …山のようにウォーニングやらエラーが出ます。 何か忘れてる事とかあるんでようかね。 助言ください!
あぁ環境書くの忘れました。 VC++ 7.1 WTL 7.5.4291.0
>>399 > ウォーニング
ワーニング、のほうがが正しい発音。
というように面倒な事になるからwarningと書け。
>>399 >>プロジェクトにDockImpl.cppを追加
これをビルドの対象からはずした?
あ、思い出した。 .net からコンパイラのチェックが厳しくなったんで、C2501 とかを 直すには Before: typedef TDockingWinTraits::CCaptionCCaption; After: typedef typename TDockingWinTraits::CCaptionCCaption; というように typename が必要だった気がする。 しかもかなりの箇所を修正する必要があったはず。 頑張れ
>>404 なるほど参考になる情報ありがとう。
.netが出てからかなり経つのにソースが修正されてないんですね。
そうとわかれば勉強がてらに地道に修正してみます。
>>401 [wɔ่:ɾniŋ] のほうが正しい発音。
408 :
デフォルトの名無しさん :04/11/27 23:41:26
ぅうわゎーにんぐゅ
ウォーニングがワーニングでも大差ないだろ。 エンジョイとかバケーションとかしまいにゃイギリスとかどうなのよ
今更何やってんだかって感じだな。 Cスレやそこらで散々既出の話題。
ジジイ ウゼー
こういう見当違いのレスが続くから
>>402 なわけか
カタカナで書いたときはウォーニングだとウォーキングと見間違えてしまうから、 カタカナ表記する場合はワーニングで統一して欲しいと思う吉宗であった(AA略)。
ワーニングだとワーキングと間違えやすい。
普通の人間ならウォーニングでもワーニングでも前後の文章から察してwarningの事だろうと理解出来るもんだ。 ただ自分は正しい発音を知っるって事をちょっとだけ誉めてもらいたかっただけなんだ。 許してやってくれ。
>>416 あっそう、よかったね。
これからは厨房日記は自分のblogにつけてくれ、頼む。
418 :
デフォルトの名無しさん :04/11/28 19:48:23
てか激しくがいしゃつ
420 :
デフォルトの名無しさん :04/11/28 22:01:20
がいしゃつワロタ
なんだこの厨臭いスレ
部屋とガイシャツと私
どうしてもサイズを小さくしたいなら別だけど、 そうじゃないなら消す。
サイズの違いについては特に気にならないのですが、 mallocとかstr系とか使えない関数があるから危険みたいな、 そういうところにいまいち納得がいかなくて・・・
そういうのが使えなくなるってのはどうでもいいんだけど。 リンク通らなくなるのが謎。 どうせ使えないのならそもそもある意味が分からない。
>>425 私もなぜ Release の時だけデフォルトで
_ATL_MIN_CRT 付けてるのかなーと思います。
MS 的には何らかの意図があったのだと思いたいのですが。
「どうせ消すのに」という意見参考になりました。
アドバイスありがとうございます。
>>426 どこに危険と書いてあった?
>>427 サイズを小さくする=Cライブラリ関数を使わないようにする=Cライブラリをリンクしない
だからリンク通らないのは当然。
>>428 MSの意図は知らないが、そもそもATLはプログラムサイズを小さくする設計だったので、
デフォルトで極力小さくするようにしたと思う。
じゃあなんでデバッグ版に_ATL_MIN_CRTが付いてないんだと言われたら知らん。
デバッグ時はCライブラリ関数を使うと思ったんじゃないかな。
MIN_CRT環境って、C++の例外って使えるんだっけ?
使えない
CScrollWindowImpl使ってるんですが、 横と縦にスクロールバーが付くと、一番端までスクロール出来ないです。 端の部分が、スクロールバーの下に隠れてしまい、見えていない状態です。 これを防ぐにはどうしたらいいのでしょうか? それとも、予めスクロールバー分サイズを大きくしておくしかないのでしょうか?
スマソ 逝ってくる スクロールバー使う時は、DoPaintとかOnPaintで、 スクロールバーのオフセットを考慮した描画しなくちゃいけないんだね。 そこら辺をやらずに悩んでたorz
WTLって基本的にATLとセットで使うもの? gcc使ってるんだけどWTLを導入するメリットってある?
WTL ってそんなにいいか?
>>437 ClassWizardが使えない事を除けば、MFCと作業量に違いがない。
カスタマイズが容易なWTLに流れるのは自然なこと。
かといって、MFCが劣るわけでもない。
本格的なGUIアプリは今もMFCが現役。
一部のクラス機能だけを使いたいときにはWTL。
それ以外の場合はMFC。
すごいいいっていう気は全然しないけど、まあMFCよりはWTLの方がマシ。 今更MFCはちょっと使う気になれない。 #本格的なGUIアプリってなんだろ? #一部のクラス機能ってなんだろ? #それ以外ってなんだろ?
440 :
デフォルトの名無しさん :04/12/04 12:26:50
>>438 >>439 それで、MFC と WTL とどっちがいいのですか?
今勉強を始めるとしたらどちらがお奨めですか?
そこでAPI。
WTLってMFCに比べて資料少なくないですか?
うん
これから増える。はず?
Code Project がいいよ。
>>446 常にそういわれ続けてるけど、未だに実現していない。
言われつづけてるか?
正直 WTL は上級者向け。 資料がないと開発できないやつには向いていない 君たちには WTL のコードがすべて開示されているじゃないか? って誰かが言っていた気がする
逆に、ソース読まずにWTLを使うのはつらいかも。 名に使うにしても、ヘッダくらいは目を通すでしょう。(w
>>15 でだいたいわかる。
あとはソース。
調べてわかったことはWebで公開。
こうして資料が増える。これ。
WTLはバグだらけだから遊びじゃなければMFCのがマシだよ
むしろATLがバグだらけ。。。
そこで.NETですよ。
C#でGenericsが実装されるみたいだけど、WTLもC#で書けるようになるのかなあ
そこでWTL.NETですよ。
てか、
>>456 はネタじゃなかったらチンカス以下ですね
C# と Generics って言いたかったんだろう。 察してやれ
真剣?
真剣ならもうちょいマシなこと書くだろ
Comega
C尻
HTTPがらみ。
あとは?
まったく何を言ってるんだ。 天下のマイクロソフトが作るものにバグなんかあるはずがないだろう。 藻前らの使い方が悪いのだ。
オナニーしたくなってきた
471 :
デフォルトの名無しさん :04/12/06 06:07:09
純粋にATLの話題ではないのですが、まともに COM の質問ができるスレが見当たらないので・・・。 idl に適当にデュアルインターフェイスを書いて、 Url や LockType という名前のプロパティを定義してコンパイルすると プロパティ名が勝手に小文字に変換されるんですが、 どなたか再現する方、原因・解決法をご存知の方はいらっしゃいませんか? 自動生成されるC++ヘッダの方は問題なくput_Url/get_Urlになっているのですが、 タイプライブラリの方が小文字になってしまいます。 ITypeInfo で確認できます。 VS.NET 2003です。
472 :
デフォルトの名無しさん :04/12/09 00:50:28
WTL7.1とVC6でやってます。以下のようにするだけで例外が出てしまうのですが、 原因分かりますでしょうか。例外を無視すれば問題は無いのですが、あまり気持ちが良くなくて。 CFileDialog dlg_file_open(TRUE, _T("txt"), NULL, OFN_HIDEREADONLY | OFN_CREATEPROMPT, _T("テキストファイル (*.txt)\0*.txt\0ビットマップファイル (*.bmp)\0*.bmp\0JPEGファイル (*.jpg)\0*.jpg\0\0") ); dlg_file_open.DoModal(); //実行結果(DoModal内でGetOpenFileNameが呼ばれたときに例外が出る) 例外処理 (初回) は Test.exe (KERNEL32.DLL) にあります: 0x000006B5: (名前がありません)。 例外処理 (初回) は Test.exe (KERNEL32.DLL) にあります: 0x000006B5: (名前がありません)。
その例外は止まる例外か? プログラムが止まらないなら問題なし。
>>473 そんなもんですかー。
止まらないのでこのままやってしまいます。レスありがとうございました。
えー
>>475 だってその例外、ちゃんと内部でキャッチされてるじゃん。
MSの人も例外を使いたかったんだよ。
つーかその例外ってATL/WTLに限った話じゃないよな
>>476 キャッチされてても良くない(動作はするが意図したものとは違う)こともあるぞ。
>>478 そういうときはエラーが返る、はずなんだけど、ググってみると同じ状況でこの例外が発生して
かつ期待した動作にならない、なんとかならんか、なんてことを言ってるロシア人がいるね。
CFileDialogで開くと 右側にプレースバー?の無い旧式になるんだけど どうすれば今の形式で表示出来るの?
>>480 ::GetOpenFileName()を直接呼び出し。
↓Windowsプログラマの常識
CFileDialogを使う人=厨房
>>480 右側じゃなくて左側の「履歴」とかが入ってるボックスのこと?
Windows2000で追加されたものなので実行環境を限定してもよければ
#define _WIN32_WINNT 0x0500
(#define WINVER 0x500)も
とすれば、出てくるけど。
ついでに、OPENFILENAME構造体の拡張部分も見ておくといいよ
補足。 出てくるってのは、CFileDialogを使った場合も。 あと、SDKが古すぎる場合はとうかわからない。 VC6で附属のSDKだとダメかも。 ヘッダーでOPENFILENAMEを確認してみて、 無ければ最新のSDKで。
↓Windowsプログラマの常識 MFCを使う人=厨房
↓プログラマの常識 Windowsプログラマ=厨房
↓一般人の常識 プログラマ=厨房
↓政治家の常識 一般人=厨房
つまんね
日本の常識 台所=厨房
くだらん
i am chiken from kichen.
しょーもな
ワラタ
パッパラパッパー?
497 :
デフォルトの名無しさん :04/12/12 16:58:39
.o.o...o.o..
ヤンガス
499 :
デフォルトの名無しさん :04/12/14 03:44:21
なんだこの流れは・・・
流れのことはよくわからんが、とにかくすごい500ゲット。
おめこ
飲食店に以前から興味がありまして。
503 :
デフォルトの名無しさん :04/12/16 03:17:17
VC.netで、属性つきATLプロジェクトでATL ActiveXコントロールを 作成すると、例えばCFooってクラス名のコントロールだとすると、 必ず「CFoo Object」って名前でレジストリに登録されて、 どう頑張っても名前を変えられないのはバグですか? 属性なしのプロジェクトであれば、ATLコントロールウィザードの 「名前」ページの「種類」に設定した通りのコントロール名になるのに、 属性つきプロジェクトでは、全く同じ設定にしても 「CFoo object」という名前でしか登録されないです。 いくら調べても原因が分かりませんでした。
アッシの脳みそは米つぶくらいでげす。 つまり。 難しいことはさーっぱり分からないでげすよ。
helpstring?
>>503 cocolassのクラスの属性のvi_progid、progid、helpstringとか、
リソースファイルの *rgs 内の記述なんかは何になってますか?
507 :
デフォルトの名無しさん :04/12/18 13:42:00
>>503 [
coclass,
threading("apartment"),
vi_progid("Foo.Foo"),
progid("Foo.Foo.1"),
version(1.0),
uuid(<省略>),
helpstring("ネオむぎ茶"),
support_error_info(IFoo),
registration_script("control.rgs")
]
control.rgsの関連部分の抜粋
HKCR
{
NoRemove CLSID
{
ForceRemove {[!output CLSID_REGISTRY_FORMAT]} = s '[!output TYPE_NAME]'
☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃ ☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃☀☁☂☃
509 :
デフォルトの名無しさん :04/12/18 20:29:29
WIN98SEのVC++6.0+SDKのWTL7.1で
やりはじめたものなんですけどもね、
あのですね、下のサイトからですね
http://www.codeproject.com/wtl/wtlbrowser.asp WTL Browserのソースファイルをダウンロードしてですね
ビルドしたところ
以下のようなエラーがでてきたんですよ。
\code project\wtlbrowser_src\WTLBrowser\WTLBrowser.rc(355) :
fatal error RC4214: Codepage not valid: ignored
rc.exe の実行エラー
どうも
resource scriptの
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_HEB)
#ifdef _WIN32
LANGUAGE 0xD, 0x1
#pragma code_page(1255)
#endif //_WIN32
という部分が引っかかっているようなんですが
これは一体なんなのかわかりますかね?
WTL.NET 誰かつくって。
>>510 System.Windows.Forms
>>509 俺がダウンロードしたソースではその部分はこうなってるけど。
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
513 :
509 :04/12/19 18:10:13
あ、どうもです。 リソースファイルの //////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 (略) #endif // English (U.S.) resources ///////////////////////////////////// の直後に /////////////////////////////////////// // Unknown language: 0xD, 0x1 resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_HEB) #ifdef _WIN32 LANGUAGE 0xD, 0x1 #pragma code_page(1255) #endif //_WIN32 (略) #endif // Unknown language: 0xD, 0x1 resources ///////////////////////////////////////////////// の記述があってその部分を削ってコンパイルビルドしたらうまくいきますた。 言語設定かなんかの問題なんでしょうか。 なんか謎です。
void Hoge() { Hoge(); }
StackOverflowException
CContainedWindow と ALS_MSG_MAP を自分自身に対して行うと、 状態の遷移に合わせて実行時の挙動を動的に変えるのにすごく便利なことに気づいた。 お前らも使え。
ALS はドラクエの主人公なんだが、何の関係が?
TとSをうちまちがえるとはなんということだ
キーの位置的にありえない間違え方だ・・orz 俺の指にいったい何が・・
>>519 ダジャレ書き込みでタイプミスは最低だな。
芸人として終わってる。
520はどこにダジャレを見いだしたんだ
WTLとドラクエ。
>>522 間違ったのは518じゃなくて516だぞ
>>525 ATLもWTLも、もちろんALT_MSG_MAP も普通に使っているが、
523の発言の意図がよー分からん、と言っただけ。
たとえATLのマクロを知らなくても、518が間違ってるなんて思ってる奴はいないだろう
つまり520がバカと言うことだ。
そんなことないよ
>>528 は520の何気ないレスが相当にこたえたらしいなw
ミスした張本人ということか。マジ笑えるw
つまり、あれだ。
>>516 は、
>>498 を見て、ちょっとドラクエがやりたくなったところで、
ついうっかりWTLのことが頭をよぎったんでしょ
追加: CSortListViewCtrl CZoomPrintPreviewWindow CZoomScrollImpl
>>520 いやだから「ダジャレ書き込みでタイプミス」したのは誰なのよ
あ、おれ521ね
535 :
デフォルトの名無しさん :04/12/27 00:21:51
ATLのマルチスレッドって具体的には何をすればいいの?
>>536 FreethreadのCOMオブジェクトの実装方法?
普通にスレッドセーフに作るだけ。
クリティカルセクションやMutex、イベントで排他や待ち合わせを行い、
必要ならWindowメッセージ等でスレッド間のRPCを行う。
538 :
デフォルトの名無しさん :05/01/01 16:34:41
あけましておめでとう!
別におめでたくない
今回の年末・年始はあまりめでたくなかったよな。 ま、こういうこともたまにはあるんだろうけどさ。
2005年って特に何もなさそうな年だもんな
542 :
デフォルトの名無しさん :05/01/02 01:35:09
俺が憶えてる限りでは、2005年は生きてきた中で一番何もない年だったな。
543 :
デフォルトの名無しさん :05/01/02 12:49:04
ATLってなくなるの?
544 :
デフォルトの名無しさん :05/01/02 18:36:13
ATL8.0
545 :
デフォルトの名無しさん :05/01/04 02:17:02
WTL7.5.5002キタ━━━━━━━━━━━━━━━━━━━━━(゚∀゚)━━━━━━━━━━━━!!
>>545 情報サンクス。
しっかし、相変わらずペめb(ry
547 :
デフォルトの名無しさん :05/01/04 10:24:09
WTL7.5.5002イラネ━━━━━━━━━━━━━━━━━━━━━(゚听)━━━━━━━━━━━━!!
何が変わったん?
Diffとれ
連書きスマン。 リリースノートにはこうある。 Release Name: WTL 7.5.5002.0 Notes: More bug fixes, new zoom scroll classes, zoom print preview, sort list view classes, new reflect notifications macros.
VC6のウィザードつけてクレー
WTL7.1の使えばいいじゃない
>>532 はなんで知ってたんだ?もしかして開発に参加してるの?
CVSリポジトリ見てれば分かるんじゃ
なんか結構追加されてるね。 atlgdi.h に CLogFont とか。
どうして昔から日陰モード炸裂なの?
>>559 CLogFontもViksoe氏だっけ?
びくそえマンセー
シェブロンが出ない。
(´・∀・`)ヘー
566 :
デフォルトの名無しさん :05/01/24 21:40:11
>>562 俺もジェブロン出すのにいろいろ試した記憶があるなー≫
たしか、stdafx.hにあるWindowsバージョン関係の定数を上げたら、表示されるようになった気がする。
でOS古いと起動すらしなくなると
初心者の俺がアドバイスしてやろうかと思ったけどやめた。 WTL楽だし楽しいね。
え?
日本語初心者ですか
571 :
デフォルトの名無しさん :05/02/01 23:12:58
テステス
572 :
デフォルトの名無しさん :05/02/07 20:24:40
下がりすぎage
WTLのMDITabコンポーネントでお勧めはありますか?
viksoe
DirectXでフレームウィンドウはWTLでお手軽にと思ったら、 なにかイベントがあった時にしかOnIdleに飛んでこないよ・・・ バグ?仕様?
仕様。常にCPU100%でループ回してるわけじゃないから。
OnIdle()を理解していないヤシが定期的に現れるねw キューが空になった時に一回づつ呼ばれるのであって、 アイドリング時に漫然と何度も呼ばれるわけではないと何度言えば(ry そもそもアイドリング判定なぞ、誰がどうやるのかと小一時間(ry
そもそもなんでソース見ないのかが不思議。
WM_SIZEのハンドラOnSizeのなかで、GetClientRect呼び出すと ステータスバーやツールバーの領域を除外していないサイズが返ってくるのですが。 どうすれば計算済みのクライアント領域を取得出来るの?
ステータスバーもツールバーもクライアント領域に貼り付けられた子ウィンドウだろ。
>どうすれば計算済みのクライアント領域を取得出来るの? MFC使えば
ステータスバーとツールバーのハンドルからRECTを取得して、 適宜クライアント領域を算出する手間を惜しむ人には、WTLは難しい。
CMessageLoop::OnIdleが常にFALSEを返すようになってたので、 オーバーライドしてTRUEを返すようにしたらちゃんと動きました。 というか、DirectXならここでレンダー呼べばよさそう。 CMessageLoop::Run自体はOnIdleを継続して呼べるようになってました。
何のためのWTLだよ
何のためなんだ?
もちろん自己満足。
クライアントサイズやアイドルハンドラの質問はMFCもWTLも変わらないような。 MFCもフレームウィンドウでGetClientRectすればバーを含めたサイズを返すし、 MFCのアイドルハンドラもただループ回してるだけじゃないし。 WTLどうこう以前に、質問者はMFCやWin32APIもあまり知らないんじゃないかと。
588 :
デフォルトの名無しさん :05/02/08 21:58:51
>>583 そのループなら、viksoeさんのライブラリに既にある。
CMessageLoopEx とか言う名前と、UI更新との相性が悪いので、俺は前から独自のを使ってるが。
つーか、ちょっと前にも同じようなこと書いた覚えがあるぞ
まああれだ .NETになれば計算なんてしないでも プロパテ設定しておけば勝手に引っ付くわけで
WTLでも特別何もしなくても勝手に引っ付いてるわけだが。 ATL/WTLAppWizardでビュー付きウィンドウ作って見れ。
IVideoWindowなのでビューにするってわけにもいかんのです
CFrameWindowImplBase::UpdateBarsPosition(RECT& rect, BOOL bResizeBars = TRUE)
>>594 残念。RECTを求める関数じゃなくて指定RECTにリサイズする関数じゃん。
つか、自分で計算しろと何度言えば(ry
Yes,アメリカ王.
Yes, you is.
594の関数を先に呼べばGetClientRectから ツールバーやステータスバーの領域が除外される
rect に入ってるだろ
ATL/WTLって専門書とかありますか?
ATLにはあって、WTLにはない。
マイクロソフトにあって、ボーランドにない。
それがJ++。
俺にあって、藻前らにない。
それもJ++。
J++J ゚ ジャイコ
だれもいないの?
いや、あんまり過疎ってるから心配になって。
ATL8まだかなー WTL8まだかなー
その前にそろそろ標準搭載させてもらわないと
612 :
デフォルトの名無しさん :05/02/22 00:51:54
mac用最強シェアの最強ブラウザ「 kabaddi」インドでシェアNo.1を誇るウェブブラウザ
http://www.studio-kura.com/index.html ・使用方法はSafariなどのウェブブラウザと全く同じです。
ただし、データの読み込み時に右上のオジサンと一緒に
「カバディ!」と叫んでください。声が止まると読み込みが中止されてしまいます。
・読み込みが正しく終了するとオジサンが「カバディ!」というのをやめます。
そうしたら声を出すのをやめましょう。
いつまでも叫んでいるとバカみたいです。
Win32APIスレから移動してきました。 自前アプリに埋め込んだウェブブラウザの画像読み込みを抑止する方法がわかりません ざっと検索した範囲だと、ホストから実装して、Invokeをオーバーライドするみたいな事が書いてあるようなのですが、 CAxWindow::SetExternalDispatchで外部ディスパッチを指定すれば そこでダウンロードコントロールをいじれるんじゃないかなという気がして試してみたいのですが、、 ここで必要なディスパッチインターフェイスをどうやって用意するべきか分かりません。 何か良いサンプルはありませんか?
質問です。 VC7.1を使ってATLの属性付きDLLプロジェクトを作成したのですが、 デフォルトで作成されるrgsファイルにエントリを追加しても まったくレジストリに追加されません。 VC6では出来ていたのですが、このrgsファイルは使われていないんでしょうか?
619 :
デフォルトの名無しさん :05/02/25 23:26:00
is this thread alive?
sorry, im not good at english.
OK. me too.
X too
O either
>>621 You are honest !!
↑ a foo
624 :
デフォルトの名無しさん :05/03/02 00:44:25
VC++6でWTL7.5なのですが、 (テキスト含めた)ファイル入出力、レジストリ読み書きはどうやるのが筋でしょうか? VC++7であれば、なにやら便利そうなクラスが転がっているみたいなのですが・・・
>>624 ATL3.0でもCRegKeyはあるよ
>>624 漏れはWTLなら、ファイルIOは素のAPI呼び出しか
C++の標準ライブラリとか使うなぁ。
テキスト操作は std とか boost とか。
627 :
デフォルトの名無しさん :05/03/09 00:28:37
ありがとうございました
どういたしましほ
629 :
デフォルトの名無しさん :05/03/10 00:38:34
あのねもしもきみがみちにまよっていたら いっしょにまよってあげるね
630 :
デフォルトの名無しさん :05/03/10 02:11:16
CRegKeyは、CStringとの連携が無いから糞
>>630 CString::GetBuffer()の使い方を知らないの?
632 :
デフォルトの名無しさん :05/03/10 19:37:36
>>631 知らんわけないだろう。
いちいちGetBuffer→ReleaseBufferするのはタイプ量も多いし
コードも見づらくなるし最大文字数も書かなきゃいけないし、面倒くさすぎって事。
CStrBufもしらんのか
635 :
デフォルトの名無しさん :05/03/10 23:04:57
636 :
デフォルトの名無しさん :2005/03/25(金) 14:45:05
VCのクラスビューアにヘッダ突っ込めば 少しWin32知ってればドキュメント代わりになるなあ とたまにage
イソテリセソスは使えないの?
なんか古代生物みたいだな(w
ちょっと質問させてください。
スプリッタウィンドウを伴うMDIアプリケーションを
作成したいと考えています(VC++.NET、WTL7.5、Windows XP SP2)。
ttp://www.codeproject.com/wtl/mdisplit.asp を参考に作っていたのですが、このサンプルには
バグがあるようで、それの解決方法がわかりません。
まずバグについて具体的に書かせていただきます。
このサンプルでは、スプリッタウィンドウの左ペインにAboutダイアログを表示させる
という口実で、本来あったであろうメニューリソースのHelp項目を無くしています。
この為、CMDIWindow::GetStandardWindowMenu関数は常にNULLを返しており※、
MDI子ウィンドウが新しく作成されても、メニューのWindow項目以下に
キャプションリストの追加が行われなくなっています。
※キャプションリストを追加するためのメニューアイテムは
名称が_WTL_MDIWINDOWMENU_TEXTと一致し、かつ
メニューバーの右から二番目になければならない。
これを解決するために、メニューバーの末尾に適当な項目を追加してやると、
キャプションリストの追加は行われるようになるのですが、
10個目のMDI子ウィンドウを作成しようとするとプログラムが異常終了してしまいます。
640 :
639 :2005/03/29(火) 09:46:23
どうやら、MDI子ウィンドウが10個以上になったときに現れる その他のウィンドウという項目の追加処理に失敗しているようです。 ※上記サンプルではキャプションリストの追加自体が行われていないので、 10個以上作成してもこのバグは発現しません。 多分、MDIフレームの直下にあるべきMDIクライアントが、 スプリッタウィンドウをはさんで存在しているため、MDI関連のメッセージとかで うまく処理されていないものがあるのでは?と想像しつつソースを眺めているのですが どこが原因なのか皆目見当もつきません。 試しにWTLを使わずWin32API直書きでMDIフレームとMDIクライアントの間に 別ウィンドウをかましたテストプログラムを作ってみたりもしたのですが、 その場合、この現象は起きないのですが… どなたか解決策(もしくは別の実装案)を御存知の方はいらっしゃらないでしょうか?
642 :
639 :2005/03/30(水) 02:45:44
>>641 >m_hWndMDIClient の親をスプリッタに切り替えるのをやめると、
ヒントありがとうございます。
自身の子ウィンドウでなくとも、
スクリーン座標の相対位置で適切にペインの配置が可能な
スプリッタウィンドウクラスを作ることで、
(見かけ上は)正常に動くプログラムを作成できました。
ちょっと汚い実装かな?とは思うのですがw
※もしかしたら、メインウィンドウはSDI(CFrameWindowImplから派生)にしておいて、
class CMDIFrame : public CWindowImpl<CMDIFrame, CMDIWindow>
こんな感じのクラスを作ってやった方がイイのかな?
とりあえず問題なく動いてるようなのでこれで逝こうかなと思いますが、
もっとスマートな実装がありましたら情報いただけると幸いです。
>別の実装としてはこれ?
>
http://www.codeproject.com/wtl/wtldockingwindows.asp 実は、私のほうでも、スプリッタがうまくいかないのなら
ドッキングウィンドウに仕様変更しちゃおうかなとか考えてましたw
CodeMaxのようなフリーのエディタコンポーネントはないものか…
リッチエディト
そろそろバージョンアップする頃だよな
646 :
デフォルトの名無しさん :2005/04/04(月) 16:48:22
MFCのAfxVerifyLicFile関数に相当する関数はATLには無いのでしょうか。
647 :
デフォルトの名無しさん :2005/04/11(月) 01:54:00
BEGIN_MSG_MAP(CMyWindow) MESSAGE_HANDLER(WM_PAINT, OnPaint) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) END_MSG_MAP() WTLをはじめてみようと思ったのですが、この書式ってなんですか? cでもc++でも見たことないんですが、、、。
メッセージクラッカ
実質ただのメンバ関数定義
>647 ヘッダーファイルくらい見ろよ。
ちゅーか、ググれよ。
>>647 WTLはじめる前に
Cを勉強しなおしたほうがよいと思います。
しかし昔からあるけど誰がこんなやりかた考えたんだろうな
ん?皮オナニーのこと?
WTL 7.5.5102.0 Changes since the last release: - Bug fixes - Misc. class/method improvements - Wizard97Test - Sample for Wizard97 base classes - Improved support for Windows CE: CMenuBarCtrl, CPropertySheetImpl, frame windows - Enabled CDialogResize for Windows CE - Added CScrollContainer class
657 :
デフォルトの名無しさん :2005/04/21(木) 01:59:13
- Added .NET Support - Removed Native Support
まじで?
いくらなんでもそれはありえないんじゃなかろうか。 それならC++のテンプレートライブラリにする意味ないんじゃね?
ねたにまじれ
すかこ
わるい というのはおいといて、ワーカースレッド作りたいけど ATL/WTL的にはなにも手助けしてくれないから SDKの関数使っていればいいのかな? かっこいいクラスある?
あ
664 :
662 :2005/04/21(木) 21:51:40
調べてみた感じそうっぽいので先に進もう あ、SDKの関数と言うよりはCランタイムの関数
ATL7.0でスレッド用クラス追加されたじゃん。
667 :
662 :2005/04/22(金) 00:33:36
ぐっは CWorkerThreadとかまんまのクラスあるやん ATL Server クラスのほう見てなかったorz
668 :
デフォルトの名無しさん :2005/04/24(日) 11:40:28
.net2003で、ATLシンプルクラスを2つつくって、(COya CKo) COYaにCKoのインターフェースを作って、そのあとIKoにプロパティ 作ると、なぜかCOYaにもできるのですが、なんでですか。 しかも、 CoCreate(COya,IOya,&oya) oya->QueryI(CKo,IKo,&ko) ko->xxx ってやっても、そのoyaにもできたしまったほうのプロパティのほうを 取りにいこうとしてしまいます。
>>668 COya、CKoを含めて、その辺のコードを示しなさい。
670 :
デフォルトの名無しさん :2005/04/24(日) 19:24:07
コードの前に、前半部分の疑問からはじめていいですか。 こっちはコードいらずです。 ATLシンプルオブジェ2こつくって、クラスビューワ(?)の COyaのところで右クリックして、インターフェースでCKoを 追加します。 そして、IKoのところで右クリックしてプロパティ追加ってやると、 IKoに追加してるのにCKoとCOya両方が書き換わってりょうほうに 同じget_xxx set_xxxができちゃいます。なんでCOyaにも できるのか理解できません。別に継承とかしてるわけではないのに・・。
>COyaのところで右クリックして、インターフェースでCKoを
672 :
デフォルトの名無しさん :2005/04/24(日) 20:04:48
IKoのまちがい わかってるくせに。まちがいはてきとうにほかんしなされ
CWindowImplのWM_PAINTの挙動って _DEBUGの時とそうでないときと違ったりしないよね・・・・? 見事にそうなっちゃったんだけど自分が悪いんだよなぁ・・・ リリースビルドの時だけ背景真っ白
>>673 ATLASSERTの中に必要な処理を書いてるとか
676 :
673 :2005/04/25(月) 04:22:07
ごっめーん MFCと違ってVERIFYねぇ→式の評価はしてくれるんだろう と思いこんでた すまそすまそすまそorz
677 :
673 :2005/04/25(月) 04:31:49
わーい、動いた、感動 #ifdef _DEBUG #define ATLVERIFY(f)ATLASSERT(f) #else #define ATLVERIFY(f)((void)(f)) #endif
678 :
673 :2005/04/25(月) 04:32:52
あ、tabがなくなっちゃったけどまぁわかるよね
679 :
sage :2005/04/25(月) 14:13:30
>>670 IKoに追加されてるのは、インタフェイスの宣言としてのプロパティ。
COyaに追加されてるのは、その実装。
インタフェイスを持ってるんだから、実装もあるはず、ということで
COyaに追加される。そこに実装を書く。
たぶんお前みたいな初級者は、
IKoに実装を書いて「IKoに書いたからCOyaに同じメンバいらねぇよ!」とか
思ってるんだろうけど、そのやり方はちょっと間違ってると思う。
ATL無しでは動かんの?
VS2005プレビュー版が出たけどWTLのバージョンアップはまた2,3ヶ月後か
プレビュー版でもそのまま動いてるよ
683 :
デフォルトの名無しさん :2005/05/15(日) 02:47:52
684 :
デフォルトの名無しさん :2005/05/16(月) 23:29:23
Flash.ocxから絵をメモリ上に描きたいです。
http://kikyou.info/diary/?200312 これを参考にしているのですが、CreateControl()の引数にどんなIStreamを渡せばいいのかわかりません。
試しにSHCreateStreamOnFile()で適当なSWFファイルを開いて取得できる
IStreamを渡したらCreateControl()に失敗するようになりました。
ご指導おねがいします。
685 :
sage :2005/05/17(火) 16:16:54
>>684 そこのサイトに詳しく書かれている通りの内容を帰す IStream を、
>>684 自身が作ればいい。
IStreamの実装を自分でしたくない/できないなら、
GlobalAllocでメモリを確保して、そのサイトの情報をもとに内容をセットアップして、
CreateStreamOnHGlobalでメモリストリームを作ってIStream::SetSizeでサイズ指定する、
とかしても良い。
686 :
デフォルトの名無しさん :2005/05/18(水) 00:04:55
class CMyWindow : public CWindowImpl<CMyWindow, CAxWindow> { BEGIN_MSG_MAP(CMyWindow) MESSAGE_HANDLER(WM_PAINT, OnPaint) END_MSG_MAP() LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { ::OutputDebugString("CMyWindow::OnPaint()\n"); return 0; } }; これではOnPaint()のオーバーライドができないのですが どうすればいいでしょうか?
687 :
sage :2005/05/18(水) 12:47:53
>>686 (=684?)
よく知らんが、CAxWindowでクライアント領域一杯にActiveX コントロールが
ホスティングされてる状態だと、無効領域が無いからOnPaintは呼ばれない
んじゃない?
過去レス読まずにカキコ スプリッタウィンドウ周り、クラスブラウザから読めなくてオートコンプリートぜんぜん効かない これってIDEのテンプレート引数周りのバグ? atlcrack.hのマクロもクラスブラウザおかしくなるし ちなみにVS.NET 2003
>>688 WTLに限らず、ファイルをまたいだマクロは
インテリセンス系は解析しない(できない)。
できるのはprebuilt.ncbに入ってる奴だけよん
バグといえばバグなのかも知れんが、
マクロとかそういうC++の腐った言語仕様を、膨大な数のファイルから
リアルタイムに解析するのはちょっと無理なんじゃないかな
2005βだとちょっと賢くなったかも 仕様的に完璧はムリというのは同意
691 :
688 :2005/05/19(木) 23:17:34 BE:2678382-#
692 :
688 :2005/05/19(木) 23:57:41 BE:1339542-#
同じ悩み抱えてる方もいるだろうからいちおう解決法書いとく atlsplit.hの上らへんに、atlwin.hからコピってきたマクロをこんな風に貼り付け #if !defined(__ATLAPP_H__) && !defined(__ATLWIN_H__) #define BEGIN_MSG_MAP(theClass) \ (略) #define END_MSG_MAP() \ (略) #define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd) \ (略) #endif 検証してみたが、BEGIN〜とEND〜のマクロだけヘッダに書いてあればクラス構造は 正しく認識できるらしい。 ただしDECLARE_WND_CLASS_EXはデフォではvoid型の関数として認識してた。 しかし、クラス内メッセージマップ持ってるヘッダも他にもあるのに なんでこいつだけ認識されなかったりしたのだろうか
693 :
689 :2005/05/20(金) 00:21:32
>>691 おーよかった。
ちなみにVS.NET2003では、自作クラスのときも、
BEGIN_〜END_〜とかDECLARE_〜とかのマクロ系とか、
あとクラス内定義のテンプレートクラスとかいったものは、
できるだけクラスの最後の方に書いた方が
そのクラスのメンバを認識してくれる確率が上がるっぽい。
まあ困ったら試してみる価値はあり。
インテリセンスのためだけにメンバの順番を変えたりするのは
う〜んな感じがしないでもないけど。
[VB.NETクラスライブラリ:Test_Dll.dll] Imports System Namespace Class1 Public Interface IClass1 Function Test_Func1() As Integer Sub Test_Func2(ByVal a As Integer, ByVal b As Integer) End Interface Public Class Class1 Implements IClass1 Private m_val As Integer Public Sub New() m_test_prop = 0 m_val = 0 End Sub Public Function Test_Func1() As Integer Implements IClass1.Test_Func1 Return m_val End Function Public Sub Test_Func2(ByVal a As Integer, ByVal b As Integer) Implements IClass1.Test_Func2 m_val = a + b End Sub End Class End Namespace
すいません、途中で書き込んでしまいました_| ̄|○ で、質問なのですが、 VB.NETで作ったクラスライブラリをアンマネージのVC++から呼ぼうとしているんですが、 何故かクラスライブラリ内のメンバ変数へのアクセスがうまくいきません。 VB.NETコードは上記のとおりで、これをビルド後VC++のプロジェクトにコピーして RegAsm.exe Test_Dll.dll /tlb:Test_Dll.tlb を実行して、以下のコードをデバッガで走らせました。
これをビルド後VC++のプロジェクトにコピーして RegAsm.exe Test_Dll.dll /tlb:Test_Dll.tlb を実行して、以下のコードをデバッガで走らせました。 [C++:main.cpp] #include <windows.h> #include <atlcomcli.h> #import "Test_Dll.tlb" named_guids named_guids raw_interfaces_only void main(){ long ret; HRESULT hResult; char path[MAX_PATH]; ::GetCurrentDirectory(MAX_PATH, path); ::CoInitialize(NULL); ::CComPtr<Test_Dll::IClass1> comPtr; //Test_Dll::IClass1* comPtr; hResult = ::CoCreateInstance((REFCLSID)Test_Dll::CLSID_Class1, 0, CLSCTX_INPROC_SERVER, (REFIID)Test_Dll::IID__Class1, (LPVOID*)&comPtr); hResult = comPtr->Test_Func2(1, 1); //<-ここでメモリアクセスの例外発生 hResult = comPtr->Test_Func1(&ret); //一行上のコードをコメントにして実行するとret=-858993460 ::CoUninitialize(); } 長い書き込みになってホントすいません よろしくお願いします。
697 :
デフォルトの名無しさん :2005/05/24(火) 10:52:46
WTLにて、リソース無しでダイアログを作る方法は無いですかねぇ DialogBoxIndirectの文字がどこにも無いから無理かなぁと思いつつ
699 :
697 :2005/05/24(火) 12:46:32
>>698 これは便利だ、ありがとうございます
ダイアログテンプレート作成、かなり面倒なんですねぇ、侮ってましたよ
WTLのツリービューまたはリストビューで、 (TVS | LVS)_EDITLABELSスタイルを指定して、ラベルを編集しようとするとエラーがでるんですが、普通に編集できるようにする方法はありますか? ダイアログベースやMFC・SDKだと大丈夫なようなんですが…
どういうエラーが出るのかも示さずに答えろというのだろうか。
702 :
700 :2005/05/24(火) 23:48:37
やっぱ必要ですよね、申し訳ない。 atlframe.hの2311行目でStack overflowが発生。 LRESULT OnCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) { //-- ここでエラー --// bHandled = FALSE; if(m_bBlockAccelerators && HIWORD(wParam) == 1) // accelerators only ・ ・ 環境: WTL 7.5.5102.0 VC++.NET2003 Windows2000sp4 です。
スタックオーバーフローなんて一番見つけやすいバグじゃないか。 デバッグ実行してとまったところで呼び出し履歴見る!
704 :
700 :2005/05/27(金) 00:29:15
すいませんごめんなさい許してください。 CHAIN_CLIENT_COMMANDS()が原因でした…
705 :
デフォルトの名無しさん :2005/05/28(土) 13:23:46
質問させてください。 今月のCMAGAZINE6月号に掲載されている特別記事「IEをカスタマイズして自由に操作する」を自分のPCで試してみたのですが、CSampleModuleクラスの定義がウィザードで作成されたコードに組み込まれなくて困っています。 自分の試した方法は、[新規作成]から ATLプロジェクトを新規作成し、プロジェクト名を Sample にしました。 これで Sample.cpp 内に CSmpleModuleクラス が定義されるはずなのですが、Sample.cpp 内に CSmpleModuleクラスの定義は無く、自分で CSmpleModuleクラスを定義しようとすると、 error C2011: 'CSampleModule' : 'class' 型の再定義 というエラーが出てしまいます。 多分どこかには定義されていると思うのですが・・・ 具体的に何をしたいのかと申しますと、CSmpleModuleクラス内で DllRegisterServer() と DllUnregisterServer() をオーバーライドしたいのです。 問題の原因は、Cマガの記事で使用されている開発環境が、 .NET2003 なのですが 自分の環境が .NET2002 なのが原因だと思いますが、 .NET2002 でも方法はあるのではと思っています。 方法をご存知の方お願いいたします。
>>705 クラスビューにCSampleModuleは表示されていないかい?
ダブルクリックすれば定義に飛べるよ。
707 :
705 :2005/05/28(土) 13:38:42
>>706 返信ありがとうございます。
クラスビューに CSampleModule は表示されているのですが、CSampleModuleクラスにメンバの定義が無いせいかダブルクリックしてもツリーが開かれるだけで定義は表示されません。
ちなみに開かれたツリーには CSampleModule の親クラスと思われる、 [ベースとインターフェース]というツリーが表示されます。
方法をご存知の方、お願いいたします。
これでMSのサポートがあれば最強なんだけどなぁ
>708 ヘッダソースがあるんがから、自分で直せよ
MSのサポートがあれば客から文句言われたとき MSに丸投げできるじゃん。 そんなこともわからないの?
そういう腐れた根性で ソフトを納入される業者はたまったもんじゃないな。
自分のプログラムが糞なのをMSのせいにするタイプだな >711
>>711 丸投げしても自分のスケジュールが延びたりはしないだろう。。。
だから、投げておいたとしてもバグの回避策とかみんながんばって探すのでわ?
715 :
711 :2005/05/29(日) 18:51:31
なんだこんな常習テクニックも知らなかったのか。 ごくろうさま。 仕事は遊びじゃないんだから責任の所在って言うのが大事なんだよ。 誰も責任とってくれないオープンソースなんか怖くて使えない。
遊びじゃないからこそMSのバグが原因だったとしても出すものを出さないといけないと思うのですが。。。
まぁ最終的には運用で回避してもらうんだけどね
出すもの出すにしても自分を弁護する理由が沢山あった方が良い。
719 :
デフォルトの名無しさん :2005/05/29(日) 22:22:16
#define Yield() っていったい何のためにやってるんですか? すっげぇ邪魔なんすけど
>>719 Win16APIにそんな名前の関数があった名残。
>>715 > 誰も責任とってくれないオープンソースなんか怖くて使えない。
MS だって責任とらないぞ、別に。
すでにATL/WTLの話じゃないよね。
>>720 そーだったんすか!!ありがとうごます、Win16てっ使ったことねかったんで。
擬似マルチタスク関係?の関数の名前ぽっいすね。
とりあえず #undef Yield しときます。
>>722 いちよーこれでもWTL使ってんすよ〜〜(汗
>いちよー
揚げ足とりはいいとして本当にいちよーだと思っている成人にこの前出会った。
711はMSを命令通りに動かせるんだよ。711はゲイツ。
プロパガンダを 「プロがパンダ」 とマジで言ってる香具師がいたな
ミニにタコ?w
馬のミミ−(雌 5歳)に念仏
おたまじゃくしと お邪魔タクシー 灯台下暗しと 大正デモクラシー お前らそんなレベルだ。
えーまだ続けんのー
>>732 ちっこい奴はいつまでも続けるからほっとけ。
知らなかったようだね。
客からの文句をインシデントを使ってMSに丸投げするって?? 全然丸投げにならないだろ。
えーまだ続けんのー
┏┳┳┓ ハイ. ┏┳┳┓ ┏┫┃┃┃ 雑談は ┃┃┃┣┓ ┃┃┃┃┣┓ ここまで ┏┫┃┃┃┃ ┃ ┃┃┏━━━┓┃┃ ┃ ┃ 雑談 ┣┫ . ・∀・ ┣┫. STOP!┃ ┗━━━━┛┗┳━┳┛┗━━━━┛ ┏┻┓┃ ┏━┛ ┣┻┓ ┗━━━┫ ┗━┓ . ┗━━━┛
ほかに話題ないくせに強がっちゃって。
5160ですよ。
漏れの報告したバグがなおってるーー
もめでたう
じゃんじゃんバグ報告しちゃってください
漏れが報告してないバグが直ってない・・・orz
勇気を出して報告しよう。 ほら、恥ずかしがらずに。
え?
748 :
デフォルトの名無しさん :2005/06/27(月) 17:56:54
ATLやWTLの質問じゃない気もしますが、 WTLを使用する際に、 VCのIDEでインテリセンスをきかせたいのですが、 どうすればいいのでしょうか?
>>748 俺は特に何かしたつもりは無いが使えている。
750 :
748 :2005/06/27(月) 18:01:11
VC7.1を使っています。 とりあえずWTLを落として解凍し、 ヘッダファイルの入ったディレクトリをIDEのオプションのProjectsのインクルードファイルに追加していますが、 WTLにインテリセンスがきかないんです。
そしてWTLのヘッダをインクルードしてWTL::と打てば出た。
752 :
748 :2005/06/27(月) 18:11:41
>>751 それはできます。
たとえば、
class hoge : public CWindowImpl<hoge>なクラスの中で、
WTLのメッセージマップを使ったときに、
CWindowのメンバが表示されなくなるんです。
753 :
748 :2005/06/27(月) 18:57:22
VC8だとこれでもムリ
755 :
デフォルトの名無しさん :2005/07/03(日) 00:22:26
VS9では大丈夫だった
9?
10
11
1000
2
保守
誰もいないYO
いるよん
気のせい
765 :
デフォルトの名無しさん :2005/07/20(水) 22:59:47
古臭い仕手株が賑わって来てるから 鬼ゴム(5196)とか日本配合飼料(2056)とかシキボウ(3109)あたりがあやしいと思う 筋の仕込みは終わってると思われ
766 :
デフォルトの名無しさん :2005/07/20(水) 23:00:12
あ、すまん間違い
どういう間違いだw
高値つかみ乙
warosu
次のリリースのタイミングはVistaのベータ1が出たときかな。
VistaでもWin32APIを使うの?
∧_∧ (;´∀`) 外されたモナー
CComboBox hoge; hoge. と打つとIntelliSenseがMFCの方のCComboBoxの 内容を示してくれるのはどうにかなりませんかねぇ。 WTL::CComboBox としないと正確にWTLの方を表示してくれない。
インテリセンスの質問ばっかりだよね
でも生産効率無視していいならそれこそSDKでイイわけで。
>>774 むしろ付けれ。MFCとの差別化の意味でね。
MFCなんか使わないからなぁ 差別も何も
漏れもWTLしか使ってないが、しょっちゅうスコープ解決は使ってるぞ ATL::CStringとWTL::CStringの使い分けな。どっちのヘッダもインクルードしてるんで、明示しないと正しく使ってくれないのよ
ATL::CStringの方が良くないか?参照カウンタあるし。
GetWindowTextに対応してるのもATLのほうだな でもatlmisc.hもインクルードしちゃってるのよorz
俺はこうするのがデフォルト。 #define _ATL_NO_AUTOMATIC_NAMESPACE #define _WTL_NO_AUTOMATIC_NAMESPACE
_WTL_NO_CSTRING
VS2003のWTLで、1つのソリューションの中に複数プロジェクトがある場合で、それぞれの プロジェクトに同名のダイアログ(CMainDlg)がプロジェクトに存在すると、ダイアログのリソース 編集画面で、ボタンクリックした時に作られるイベントハンドラのコードの実装が、違うプロジェクトの 方に入っちゃうんだけど、どうすれば直せるの?
>>783 ボタンクリックで作らない。
てか、プロジェクト毎にクラス名くらい分けようや。
WTL覚えようと思ったのですが、 WTLのコントロールのテンプレートクラスのメンバ関数を使いたい かつ、独自のメンバを付け加えたり、それに飛んでくる一部のメッセージを使って何かしたい ってときにはどうすればいいんですか? たとえばボタンで、サブクラス化だと、WTL::CButtonとサブクラス化用のクラスの二つを使わないといけないので面倒なんです。 class OresamaSubClass : public CWindowImpl<OresamaSubClass> { //略 void OresamaFunction() {SendMessage(WM_SETTEXT, 0, (LPARAM)_T("俺様ボタン"));} } //使うとき WTL::CButton wtl_btn ; OresamaSubClass btn ; wtl_btn.Create(ほげほげ) ; btn.SubclassWindow(HWND(wtl_btn)) ; //WTL::CButtonのメンバ関数はwtl_btnから //独自のメンバ関数はbtnから。 これをこんな風にできたらいいですが。 OresamaButton btn ; btn.Create() ; //btnからWTLのメンバ関数も独自のメンバ関数も使える。
787 :
785 :2005/08/05(金) 16:22:13
できたみたいです。 class OresaamButton : public CWindowImpl<OresamaButton, WTL::CButton> { //メッセージマップでもメンバ関数でもなんでも } 最初、こうやればCButtonを継承できるかと思っていたんですが。 class OresamaButton : public WTL::CButton ATLやWTLに関する分かりやすいドキュメントってありませんか? 特にWTLに関してはググるよりヘッダ読んだほうが早いような気がするんですが……。
>>787 ちと古いが、ATLInternals 読んでおけ。
擬似継承。
791 :
デフォルトの名無しさん :2005/08/10(水) 20:41:06
質問なんですが、CAxWindowでActiveX使用しているのですが、 動作しているActiveXのスレッドIDを取得したいのですが、方法ご存じないでしょうか、 最初、CAxWindowのコンストラクターでGetCurrentThreadId()で取得してみたのですが どうも動作してるActiveXのスレッドとは違うようでした。 よろしくお願いします。
>>791 どうして違うスレッドと言い切れるのかわからないが。
もし違うというのであれば、CAxWindowを継承したクラスの
インスタンスを作成したスレッドとそのインスタンスのWindowをCreateしたスレッドが違うことになる。
そのクラスのOnCreateの中でGetCurrentThreadIDを呼びだす、というのではどう?
793 :
791 :2005/08/11(木) 20:49:48
>792 レスありがとうございます。 >どうして違うスレッドと言い切れるのかわからないが。 デバッカーで追いかけると「CreateControl」をコールした瞬間にスレッドが作られるのでそう考えました。 (デバッカーのスレッド一覧表示を監視してました) >そのクラスのOnCreateの中でGetCurrentThreadIDを呼びだす、というのではどう? CAxWindowのCreateをオーバライトしてGetCurrentThreadIDはやってみたのですが、 これですと「CreateControl」をコールした瞬間に出来たスレッドIDではなくCAxWindowのスレッドIDが戻ってくるようでした。 何か情報ありましたらお願いします。
ウインドウがワーカスレッド作るんだろ。何でそのスレッドIDが欲しいと思うか知らんが。 ToolHelpAPIでThreadを列挙して、差分でも取ったら?
WTLでツールバー上にコンボボックスを載せる方法が分かりません どなたかご存知ないでしょうか?
それ厳密には違うと思う。 一個のツールバーのボタンの並びの中にコンボボックス埋め込みたいんじゃないの? 区切り線の上に無理矢理配置させるとかかなりトリッキーな方法使わないとできないけど。 MFCだとダイアログバーってのがあったけど、複数コントロール細長のダイアログ作って リバーとして登録するだけの代物だな。もちろんWTLでも可能。 でもこれだとシェブロンが(少なくとも自動的には)描かれない。
798 :
デフォルトの名無しさん :2005/08/17(水) 19:17:52
ATLを使ってCOMコンポーネントを作ろう(VC7では初めて)としたら、 なんじゃこりゃ、って感じで困惑してるんですが。 ATLシンプルオブジェクト [ coclass, threading("apartment"), vi_progid("uu.www"), progid("uu.www.1"), version(1.0), uuid("4FA2C351-B4C6-4548-950B-53E49347AD4B"), helpstring("www Class") ] class ATL_NO_VTABLE Cwww : public Iwww { public: Cwww(){} DECLARE_PROTECT_FINAL_CONSTRUCT() HRESULT FinalConstruct(){ return S_OK; } void FinalRelease() {} public: }; IwwwはDualインターフェースなんだけど、 そもそもIUnknownの実装やIDispatchの実装を担う部分がない。 このクラスファクトリも定義されているところも見当たらない。 一体どうなってるの?ヘッダにidl属性[・・・]が入っている時点でもはや C++じゃないし。
coclass属性が付くと基本クラスにCComObjectRootExとCComCoClassが自動的に追加される。
>>798 ATL ウィザードのどっかに、”属性”がどーたらいうオプションがあるから、
ソレをはずせば、旧来の(VC6時代の)コードが吐かれる。
801 :
800 :2005/08/17(水) 20:18:11
ちなみに、ATLプロジェクトの新規作成時のウィザードの話。 ちなみに属性プログラミングをすると、IDL が作成されないので、 個人的には便利だと思ってるけど、細かい変更が出来ないので オレは結局属性は使ってない。
802 :
798 :2005/08/17(水) 20:20:22
thxです。 属性は何かちょっと気持ち悪い気がしますね。
>>799 そうだったのか
ATLはもうちょっとわかりやすくならんのか
属性は書くコード量が減って便利だと思うんだけどな〜 展開されたコードを見ると反吐が出るが(w
「ATLインターナル」読んで脳みそが溶けた
ATLを勉強するとテンプレートクラスの可能性に目覚めてしまう。 ところでみんな読んでるの?>ATLInternals この前買おうと思って書店いったらおいてなかった。 というかATL関係の本が1冊しかなかった。 .NETの本はやたらあるんだが。 MSの主張とは裏腹にまだまだ必要とされてると思うんだけどな。
C用のインターフェイスを直接呼び出せるC++の需要はまだまだおおいだろうね。 今やってるのも.netって話だったけど面倒だからATLで作っちゃった。 でもATLもBEGINXXとかマクロいっぱいで勉強する気がおきん。
808 :
デフォルトの名無しさん :2005/08/20(土) 11:17:26
WTLのCScrollContainerってどんな用途に使う?
809 :
デフォルトの名無しさん :2005/08/25(木) 18:43:03
LayeredWindowでActiveXの表示をアルファー付きで透過させようとしているんですが、 アルファー付きビットマップの取得には、IViewObjectExのDrawで取得してるんですが、 画像自体は正しく拾えてきてるようなんですが、アルファーチャンネルが正しく拾えなく困ってます。 アルファーチャンネルの数値を見ると、0かFFしか無い感じです。 何方かアルファーチャンネルの取得の仕方をご存じありませんでしょうか。 IOleInPlaceObjectWindowlessがかなり怪しいと感じてるんですが。 何か情報ご存じでしたら教えてください。よろしくお願いします。
>>809 前にもコメントしたかもしれませんが、無理です。
そもそも IViewObject が描画対象とする DC は普通の GDI の DC なわけで、
ほぼ全てのActiveXオブジェクトは、どうあがいてもαチャンネルなど描画して
はくれません。
InPlace で Windowless なCOMオブジェクトは、単に与えられたDCの既存の
背景の上に上書きする形で自分自身を描画しているだけです。
時間が掛かってもかまわないのであれば、黒い背景の上に描画、白い背景の
上に描画、と2度繰り返して差分を取って反転すればほぼα情報に近いものが
得られるような気もしますけど・・・
811 :
809 :2005/08/25(木) 19:16:39
810さん
コメントありがとうございます。
私はこちらへの書き込みは初めてですが、以前のコメントは見逃してしまいました。
すれを頭から見てみます。すいません。
このURLにある商品はFlashのActiveXのプラグインを使用して背景を透過しているのですが、
これと似たようなことをしようと考えてます。
htt://www.screentime.com/software/mprojector/
こちらはサンプルの実行ファイルです。
htt://www.screentime.com/downloads/red_rubber_ball.exe
とりあえず自分もFlashを使用して透過の実験を行っているのですが、FlashPlayer7であれば一部(デバイスフォントの表示が何故が透過されてしまう)
を除いてコンテンツのアルファーが反映され表示されていたんですが、
FlashPlayer8にバージョンアップしてしまうと挙動が変わり、先に書き込みしたような状況になってしまっています。
このソースを参考にしています。
ttp://s-tomo.sakura.ne.jp/haruna/040707.cpp また何か情報ございましたらよろしくお願いします。
812 :
デフォルトの名無しさん :2005/09/07(水) 22:17:48
814 :
809 :2005/09/08(木) 10:33:11
>813さん レスありがとうございます。 >ヒント: ウィンドウレス これって「IOleInPlaceObjectWindowless」の事指してますか? 自分は、名前からしてこれが"くさい"と思いATLのヘッダー見てみたんですが、自分では解決出来そうな情報が見つけられませんでした。 出来ましたら、もう少し具体的に教えていただけると助かります。 よろしくお願いします。
完全に廃れてるね。 Windows用の軽量ウィンドウクラスライブラリとしては今は何がはやってんだろ?
今まで流行なんか無かったけど。
>>815 てか、2chにカキコがなかったら廃れたことになるのかよ w
>>818 一つの指標にはなるだろうよ。英語圏は知らんがなー
820 :
デフォルトの名無しさん :2005/09/29(木) 23:59:50
WTLって何て読むんですか?
読むのではない。感じるんだ。
わっとる?
823 :
アホ :2005/09/30(金) 01:55:18
825 :
デフォルトの名無しさん :2005/09/30(金) 23:04:24
ないんじゃないか
あれってMFCが独自にやってるんだっけ
MFCのソース見れ
829 :
825 :2005/10/01(土) 12:23:29
830 :
デフォルトの名無しさん :2005/10/02(日) 14:32:29
年末に一度リリースがあります
WTL 7.5.5280.0 Beta1 キタ
Beta1?まさかそんなの出るわけないじゃん。 そんなの今まで無かったしさぁ。 まったく騙そうったってそうはいかな・・・・ほんまや!
ここにきて活発になってきたな
、と思ったらここにきてまた過疎化
珍しくSoも更新に反応してない…
してるよ?
So氏頑張ってるなぁ。
なんでべーたなんだろう
正式公開が近いんじゃない?
840 :
デフォルトの名無しさん :2005/10/17(月) 10:38:27
So氏ってなに?
>>842 下のページは読みやすいけど、上のはちょっとね・・・
かっとし更新sage
>>841 無愛想な画面しか表示されませんけど・・・
846 :
デフォルトの名無しさん :2005/10/18(火) 19:30:13
845 名前:デフォルトの名無しさん[sage] 投稿日:2005/10/18(火) 12:48:41
>>841 無愛想な画面しか表示されませんけど・・・
848 :
デフォルトの名無しさん :2005/10/20(木) 22:11:52
今ダイアログベースのアプリで、でキー入力のメッセージを受信しようとしてるんですが、うまくいきません。 とりあえず次のように実装してるんですが、一向にキーの押下情報などのメッセージが受信できません。 class CtestDlg : public CDialogImpl<CtestDlg> { public: virtual BOOL PreTranslateMessage ( MSG * pMsg ) { ATLTRACE( "uMsg=%x\n" , pMsg->message ) ; return TRUE ; } BOOL PreTranslateAccelerator( MSG * pMsg ) { ATLTRACE( "uMsg=%x\n" , pMsg->message ) ; return TRUE ; } BOOL TranslateMessage(MSG* pMsg) { ATLTRACE( "uMsg=%x\n" , pMsg->message ) ; return TRUE ; } } 何方か情報がありましたら、教えてくださいよろしくお願いします。
>>848 PreTranslateMessageはWTL::CMessageFilterを継承していなければならない。
>>848 AddMessageFilterは呼んだの?
ウィザードで作れよ
852 :
デフォルトの名無しさん :2005/10/28(金) 23:48:57
VS2005がMSDNでリリースされ、11月7日以降一般にもリリースされるということは、 WTL8.0クル━━━(゚∀゚)━━━ !!!
853 :
デフォルトの名無しさん :2005/10/29(土) 06:21:56
足し算をするカスタムインターフェースを持つ、原始的なCOMサーバーDLLを書いてみたのですが、(COMは初めて) const CLSID ID_Foo = {1, 2, 3, {4, 5, 6, 7, 8, 9, 10, 11}}; const IID IID_IFoo = {11, 10, 9, {8, 7, 6, 5, 4, 3, 2, 1}}; class IFoo : public IUnknown { public: STDMETHOD_(DWORD, FooAdd)(DWORD a, DWORD b) { return a + b; } IFoo() : m_dwRef(0) {} STDMETHOD(QueryInterface)(REFIID iid, VOID **ppI) { /* 省略 */ } STDMETHOD_(ULONG, AddRef)() { return ++ m_dwRef; } STDMETHOD_(ULONG, Release)() { /* 省略 */ } private: DWORD m_dwRef; }; /* 以下略 */ これを使うクライアントはどう書けばいいのでしょうか? 例えば、DLLでないかもしれなくても、直接pifoo->FooAdd()などとしてもよいのでしょうか? また、他人にこのサーバを使わせるには、以下のconst IID...とclassの部分をヘッダファイルにして渡せばいいのでしょうか? それともタイプライブラリというものを作るのでしょうか? あと、おかしいところを指摘して下さい。 const IID IID_IFoo = {11, 10, 9, {8, 7, 6, 5, 4, 3, 2, 1}}; class IFoo : public IUnknown { public: STDMETHOD_(DWORD, FooAdd)(DWORD, DWORD); }; void main() { IFoo *pifoo = NULL; CoInitialize(NULL); CLSID clsid; CLSIDFromProgID(L"Foo", &clsid); CoGetClassObject(clsid, CLSCTX_ALL, NULL, IID_IFoo, (void **)&pifoo); DWORD dwResult = pifoo->FooAdd(1, 2); printf("FooAdd(1, 2) = %d\n", dwResult); pifoo->Release(); } /* エラーチェックは省略 */
根本的に何も分かってないな
>>853 いきなりサーバを作ろうと考えるな。とりあえずクライアントを使うだけに徹しろ。
>>853 Inside COMでも読んでみなよ。それからここに来てね。
>>853 このスレできくんだからサーバー側はATLのウイザード使えばいいのに。
クライアントはヘッダーとxxx_i.cつかえばOK。#importとかもあるけど
あとFooAddのリターンおかしいよ
フゥー!(foo)
859 :
デフォルトの名無しさん :2005/10/31(月) 00:22:01
つか、
const CLSID ID_Foo = {1, 2, 3, {4, 5, 6, 7, 8, 9, 10, 11}};
const IID IID_IFoo = {11, 10, 9, {8, 7, 6, 5, 4, 3, 2, 1}};
こんな書き方はじめてみたのは俺だけ?
>>853 ATL Server/Client のサンプルでもみれば
uuidgen/guidgenを知らないのだろう
861 :
デフォルトの名無しさん :2005/11/01(火) 01:52:56
そもそも、レジストりを使わずにCOMはできるのでしょうか?
XPならできる
そうでなくともインプロセスで、COM関係のAPIを全く使わず、 サーバのDLLがインターフェイスへのポインタを返す関数を独自に公開してしまえば……。 駄目か?
それはもうすでにCOMっぽいものでしかないような。
865 :
デフォルトの名無しさん :2005/11/01(火) 19:48:14
CAxHostWindowについて書かれてる本、もしくはURLないすかね。 あと「ATL インターナル」に載ってるサンプルコードってどこいったらありますかね? 情報ありましたら、よろしくお願いします。
>>863 直接DllGetClassObjectを呼べば出来る。
十分COMだと思うが。
CoLoadLibrary()も使えば完璧にCOMだろう。 こいつを使おうとすればCoInitialize(Ex)も必要になるしな。
>>863 Firefox (だっけ?)とか、RealPlayer とかはそんな感じだよね。
870 :
デフォルトの名無しさん :2005/11/02(水) 16:39:32
>869さん レスありがとうございます。 具体的な問題としては、CAxWindow、CAxHostWindowでActiveXコンポーネントをインスタンス化したウインドウで「WM_KEYDOWN、WM_KEYUP」のイベントを取得したいんですが、 キーを押しても一向に流れてこないんですよ、「WM_SYSKEYDOWN、WM_SYSKEYUP」は来るんですが、 自分はまだCOM、ATLの知識が乏しいもので、具体的なサンプルなどどこかに無いものかと思いまして。 何か情報ありましたら、よろしくお願いします。
871 :
869 :2005/11/02(水) 23:51:17
正しいやり方かどうかわからないけど、
CAxWindow を継承したビューで
BOOL PreTranslateMessage(MSG* pMsg)
if((pMsg->message < WM_KEYFIRST || pMsg->message > WM_KEYLAST) &&
(pMsg->message < WM_MOUSEFIRST || pMsg->message > WM_MOUSELAST))
return FALSE;
if ( pMsg->message == WM_KEYDOWN ) {
return SendMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
}
return (BOOL)SendMessage(WM_FORWARDMSG, 0, (LPARAM)pMsg);
}
みたいにやって受け取るのはダメ?
正しいやり方をご存知のかたは教えていただけると幸い
ちなみに、こことか参考になるかな?
http://www.codeproject.com/wtl/wtl4mfc6.asp の Keyboard Handling のセクションとか
そして ATL インターナルのソースは
http://www.wiseowl.com/downloads/downloads.aspx から入手可
ちょ、おまっwwwww見にくいwwwww 頑張るのはいいけど方向違うwwww
誤爆スマソ
874 :
869 :2005/11/06(日) 14:48:27
一瞬俺かとおもったけど、もっといいやり方知っている人いる?
>>865 とりあえず
つ <Inside OLE 第二版>
っていうか、
CAxHostWindowでActiveXコンポーネントをインスタンス化したウインドウで
*だれ*の WM_KEYDOWN取りたいかによって違うよ。
きみと違ってみんなエスパーじゃないんだから、
はっきり書かないとわかんねぇよ。
876 :
853 :2005/11/12(土) 06:28:52
みなさん、どうもありがとうございます。
重大な事を書き忘れていました。
私はVCでなく、BCコマンドライン無料版(BCC)を使っています。
VCは使ったことがありません。
ですから実際の所、ATLもクラスウィザードもわかりません。
以前はCOMのスレがあったような気がするのですが、無くなったみたいなのでここに来ました。
Inside COM/Inside OLEは欲しいのですが、高いです。
それでMSDNで勉強しています。英語なので難しいですが・・・
Platform SDKは落としたいのですが、大きすぎます。アナログ電話ですから・・・
真に無料のプログラミングを目指しているので、電話代がかかるものはなるべく落とさないようにしています。(だから無料でもBCBは使っていません)
ちなみに、MIDLコンパイラが欲しいのですが、SDK以外にはあるでしょうか?
>>855 オートメーションやその他のインターフェースのサーバー(IEなど)について一応動作するクライアントを書いてはみたのですが、タイプライブラリの使い方がわからないのでヘッダが存在するオブジェクトしか操作できません。
それで最も簡単なサーバーについてタイプライブラリを作ってみたいと思ったのですが・・・
クライアントからのタイプライブラリの使い方を理解するのにいい既存のオブジェクトはあるでしょうか?
>>857 xxx_i.cというのは、どうやると生成されるのですか? IDEでサーバーをコンパイル? MIDL.EXE?
それと、FooAddのリターンは何がおかしかったですか?
あと一般的な質問があります。
1. たいていのコードでは、インターフェースと実装は、別のクラスに分けられていますが、これはなぜなのでしょうか? 分けないとどういう不都合が起こるのでしょうか?
2. COMの一般的なコードでは、Co/CreateInstance()が「オブジェクト」の生成を担うことになっているようですが、IClassFactoryはサポートせず、Co/DllGetClassObject()で目的オブジェクトの生成を行う、というスキームはあり得ないのでしょうか?
さらに、オブジェクトが必要なく、グローバルな関数機能だけが欲しい場合に、私が書いたようにすることはないのでしょうか?
>>876 1.
インターフェイスと実装を分離しておけば、実装クラスに変化があっても、
インターフェイスには何の変化もなくバイナリ互換でそのまま使い続けられる。
COMもそれを取り入れた。
2.
無理。そんなことしたいなら別にCOMを使わないで好きにやればいい。
>>876 >>853 >Platform SDKは落としたいのですが、大きすぎます。アナログ電話ですから・・・
>真に無料のプログラミングを目指しているので、電話代がかかるものはなるべく落とさないようにしています。(だから無料でもBCBは使っていません)
>ちなみに、MIDLコンパイラが欲しいのですが、SDK以外にはあるでしょうか?
この時代にネタか?
>>878 853を相手にするのはやめよう。
InsideCOMは買えないとか、PSDKも落とせないとか、もういいよ。
相手にしないとレス0なんだけどな InsideCOMって5000円もしたのか・・・
> 相手にしないとレス0なんだけどな 悲しい。そんなスレ悲しすぎる・・・
882 :
デフォルトの名無しさん :2005/11/15(火) 18:26:42
CSimpleArray<CAtlString> strArray = { _T( "初期化項目1" ) , _T( "初期化項目2" ) , _T( "初期化項目3" ) , _T( "初期化項目4" ) } ; こんな事したいんですけど、どう書けばできますか?
("初期化項目1")("初期化項目2")("初期化項目3")(.・・・) みたいなのならできたような気がする。 つまり演算子を隔てて初期化項目を並べればよかったはず。 templateスレか何かで出た様な。
#include <algorithm> #include <functional> PCTSTR pszInitializer[] = { _T("初期化項目1"), _T("初期化項目2"), _T("初期化項目3"), _T("初期化項目4"), }; CSimpleArray<CAtlString> strArray; std::for_each(pszInitializer, pszInitializer + sizeof pszInitializer / pszInitializer[0], std::mem_fun1_ref(CSimpleArray<CAtlString>::Add); コンパイルは試していないから少々間違っているかもしれない。 こんなことするなら初めからstd::vector使うべきか。
886 :
デフォルトの名無しさん :2005/11/15(火) 21:36:47
>アナログ電話ですから・・・ 一晩もかからんだろ
一日はかかるだろ。
CDの注文ができた気がする。
>>882 これでコンパイルが通った。(VC8)
もっと簡単な書き方があるかもしれん。
template<class T>
class CSimpleArrayEx2 : public CSimpleArray<const T&>
{
public:
CSimpleArrayEx2& operator()(T t)
{
Add(t);
return *this;
}
};
CSimpleArrayEx2<int> sAry = CSimpleArrayEx2<int>()(1)(2)(3);
sAry(4)(5)(6);
890 :
デフォルトの名無しさん :2005/11/19(土) 05:21:51
やべ、危うく2ちゃんに書き込むとこだったよ・・・
ちゃんちゃかちゃんちゃん ちゃちゃっちゃちゃんちゃん ちゃんちゃかちゃんちゃん ちゃちゃっちゃちゃんちゃん ♪灯油を給油しようとお〜も〜たら〜 あふれてこぼれちゃいました〜(自動) チックショ
どうも。 スプリッタウィンドウにタブビューを貼り付けて利用してるんですが、 どうも奇妙な現象が発生中。 /ML時に、タブが配置される(タブが増減する)領域が、 起動前の背景と同じになってしまいます。 …なぜか背景ブラシが設定されてないんです。 何故なんでしょうか? 因みに/MLd時は正常に動作してます。 [環境] VCTK1.01 WTL7.5.5280.0 Beta1 ATL3.0
>>893 変数ですか…?
う〜ん、現在の状態では、特に変数は使って無いです…(スケルトンに近い)
もしかして、ATL or WTLのメンバ変数の事でしょうか?
デバック版のLIBCD.libで上手くいって、
LIBC.libでヘマる理由が不明で、かなり困惑中。
895 :
892 :2005/11/20(日) 17:46:05
>>894 親子関係か、メッセージの反射あたりのような気がするがメッセージ
マップとか、Window を作っているあたりのソースを出してもらえれば
検証するよ?
うpろーだに揚げてくれても可
897 :
892 :2005/11/20(日) 18:23:45
ちょ、プロジェクトファイルはw 現象は確認できたけど。
899 :
892 :2005/11/20(日) 19:18:18
ようやくコンパイルして /ML でビルドしてみたけど、ちゃんと 動いているなぁ・・・。 たぶんソースの問題ではなくて define されている値の問題のような 気がするんだけど、 define.h の #define WIN32_IE0x0200 は、まずいんじゃない? 少なくとも俺の環境だと、 fatal error C1189: #error : WTL requires IE version 3.0 or higher とでるし、commctrl.h の ICC_TAB_CLASSES をみると #if (_WIN32_IE >= 0x0300) のなかで定義されてるから。 とりあえず、 #define WIN32_IE0x0300 にしてみたらどう? #はずしてたらごめん
うう…そんなエラーmsg出た事無い(泣)。 IDEがある人が羨ましいです。 defineの値を変更してみたのですが、変化がありませんでした… 一応、全てのdefineを消してみたりもしたのですが、駄目でした。
>#define WIN32_IE0x0300 #define _WIN32_IE 0x0300 じゃない?(先頭にアンダーバー) ただのミスかもしれんが。
902 :
892 :2005/11/20(日) 19:59:17
>>901 たしかに
>>900 とりあえず、_WIN32_IE 0x0300 にしてみて
それと、俺のコンパイルオプション
/O1 /D "WIN32" /D "_WINDOWS" /D "STRICT" /D "NDEBUG"
/D "_ATL_MIN_CRT" /D "_MBCS" /FD /ML /GS
こっちがリンカのオプション
/OUT:"Release/app.exe" /INCREMENTAL:NO /NOLOGO
/SUBSYSTEM:WINDOWS /MACHINE:X86
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
odbc32.lib odbccp32.lib
>>901 そうですね。修正したら、
>>899 にあるエラーメッセージが出るようになりました。
しかし、修正しても背景ブラシが設定されないままです…
>>902 提示されたオプションでビルドしてみましたが、結果は変わりませんでした…
何故…?
すみません…なんかかなり面倒ですよね、コレ。
905 :
892 :2005/11/20(日) 20:27:02
再現しないので、わからんなぁ・・・ DECLARE_WND_SUPERCLASS(NULL, CTabCtrl::GetWndClassName()) コレをコメントアウトしてみたら?
WTLのスプリッタウィンドウとかペインコンテナの上にコントロール貼り付けると comctl ver 6.0(XPビジュアルスタイル)の場合にそんな現象出てた気が… サブクラス化して背景ブラシ設定して回避したんだっけかなあ。 Rebarもスタイルによっては、上2ドットくらい背景透けてたこともあったかも。
コメントアウトしてみましたが駄目でした…
908 :
892 :2005/11/20(日) 21:05:45
>>905 ためしに Windows 2000 で試してみたけど、彼のビルドしたやつは
背景が描画されなかったので、ちょっと違うような気もする。
再現しないのは、俺が ATL 7.1 だからか?
>>906 タブコントロールは背景ブラシ設定が普通に出来ないみたいで、
今やっていましたが、出来ませんでした
>>898 そのbatでやってみたけど、うちでも正常だな。因みに
#define _ATL_NO_DEFAULT_LIBS
#define _ATL_NO_AUTOMATIC_NAMESPACE
を消さないとビルド出来なかった。
こちらはATL7.1 WTL7.5。環境が違うので何とも言えんな…
>>910 defineを消してみましたが、やはり変化無しです…
どうもdefineは関係ないと思われます。一応、いろいろ消してみたので。
まて、VCTKにはどこのATL3を入れたんだ?
913 :
893 :2005/11/21(月) 23:02:05
915 :
893 :2005/11/21(月) 23:34:26
>>914 そうでしたか、フォローありがとうございます。
いや、再現できないし、ググッてみると、VC++ 2003 Toolkit + PSDK ATL
っていう組み合わせを使っている人がひっかかったので、892 ももしかして
そういう環境だから、おかしいのかな?と思ったんで
ATL使うならVC買えってことだな
皆さん情報ありがとうございます。
>>912-915 記憶が曖昧なのですが、言われてみればそうかもしれません…
ただ、PSDKからとって来た事は間違いないでしょう。
(DSDKにはありませんよね?)
ただ、
>>914 のリンク先の記述と、こちらの持ってるatlwin.hが違う…
単純にバージョン違いならいいのですが。
WTLは完全にフリーで使えるライブラリだと思ってたのに…残念です
>>917 あれは一つ前(2003年2月版だったかな?)のPSDKに入ってたATLです。
最新のPSDKのは、下のスレで別の人が対処法を書いています。
VC6使いがVC8 Expressを使ってみるスレ
http://pc8.2ch.net/test/read.cgi/tech/1131590396/17 PSDKに付属していないatlthunk.libの中にあると思われる関数を
直接atlbase.hに書き込むという対処法で、これで確かに動くようには
なるのですが、何せatlthunk.libの中で実際にはどういう処理が
行われているのか分からないので、安全かどうかは分かりません。
>>918 VC8ExpressにはATLありませんよね?
WTL使えるってのはPSDKのを利用と言う事ですしょうか?
>>919 どうやらその対処法は、こちらも行っていたみたいです。
ただ、atlwin.hの修正は知らなかったのでやってみたのですが、
逆にwarningが発生します…
ATLがないとなると 当然OLEDBもダメだから mdbファイルのデータ吸出しも無理だなきっと。
922 :
デフォルトの名無しさん :2005/11/23(水) 03:31:08
ビュークラス(CWindowsImplから派生)の中に、更にビュークラス(同じくCWindowImplから派生)を 子ウィンドウとして作成したら、親のビュークラスに向かってWM_PAINTが送られ続け、止まらなくなるという 変な状態になったんですが、原因と解決策が分かる方いらっしゃいますか? MainFrame +-ViewA +-ViewB ↑ウィンドウはこんな感じの階層です。 ViewAに向かってWM_PAINTが延々と送られ、CPU使用率がMAXになってしまいます。
すみません。すぐ解決しました。 WM_PAINTのハンドラでCPaintDCオブジェクトを作ったら直りました。 いまいち理解できないので、もうちょっと勉強してきます。
WTLでメニューに対し追加や削除の動作を試みているのですが 上手く動きません。 WTL::CMenuHandle m; m.Attach(LoadMenu(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME))); m.InsertMenu(1,MF_BYPOSITION | MF_STRING,1,_T("test")); どう試行錯誤してもorz解決策ご存知の方居ましたら教えて頂けると幸いです
>>925 m.LoadMenu(IDR_MAINFRAME);
でいいんじゃない?
>>926 さんのやり方と、一行付け足すだけで
解決しました。。。
どうやらSetMenu(m);を入れないとダメだったようです。
BEGIN_MSG_MAP_EXを使うとクラスビューがおかしくなってしまうのを、 うまく解決する方法ってありますか? メーリングリストにも綺麗な解決策はありませんでした。
>>928 エンドユーザにどんなにおかしくても笑いをこらえるよう、お願いすれば解決する。
プログラマ側でエンドユーザの笑いのセンスを取得して処理するような仕様はクソだぞ。
>>929 えーと、説明が下手ですみません。
クラスビューというのは、VCに付いているクラスの一覧を表示する機能を持ったパネルのことです。
BEGIN_MSG_MAP_EXを使うと、これがクラスのメソッドをうまく解析してくれないので、
なにか、うまい解決策はないものかと。
>>931-932 レスども。
最新版では直ってるんですね。
とりあえず、メーリングリストのやり方で対策しときます。
とりあえず英語版VC2005Expでは直ってなかったよ
WTL7.5Finalキタ
938 :
デフォルトの名無しさん :2005/12/05(月) 23:59:56
age
>>936 いいね。
でも日本語だと、日本人以外の投票者は得られないかな…
ATLのクラスはMFCも使用してるから、 オープンソース化にはあまり賛成出来ないな。
CStringまわりでそ。 WTLにも独自のCStringがあるしなぁ。むしろSTLのstringクラスとの互換性強化きぼん。
は?ATL7.0のCStringTってMFCのモンじゃないでしょ
CStringはMFCのそれと(機能は)ソックリだけど、別の実装みたいだね。 IntellisenseがMFCのクラスと勘違いした支援出してくるのが困る。
WTLをATLから分離がいいな 940はダウトだろ
ヒント:afxstr.h
cstringt.h -- MFCとATLで共用されてるCStringT<>定義 atlstr.h -- ATL用 afxstr.h -- MFC用 ってことでいいのかな?
だからヘッダに書かれてるコード読めって。ATL::CStringT<>をMFCが使ってる事実まで否定したいの? 実装の差異があるかどうかじゃなくてヘッダを共有してる事実こそ重要だろ。
>>948 論点はそこじゃないだろ
940の日本語が紛らわしいのが悪いとみたw
皆は「ATLがMFCを使っている」と解釈
日本語難しいね
6.0以前から使ってる奴はMFCのCStringが後付けでテンプレート化したことくらい知ってるだろ。 皆なんて言うな皆なんて。
日本語の不得手な方がまだいらっしゃるようで
953 :
デフォルトの名無しさん :2005/12/06(火) 18:38:45
先生、質問です。 これはいけないことですか? CAtlArray<IHTMLDocument2*> pHTMLArray; void hoge(IHTMLDocument2 *pDoc) { pHTMLArray.Add(pDoc); }
ATL使ってるんならスマートポインタ使おうよ
COMのリファレンスカウントをちゃんと守りませう。
956 :
953 :2005/12/06(火) 21:22:53
>954-955 CAtlArray<CComPtr<IHTMLDocument2>>でエラーがでてよくわからんかったわけですが、 CAtlArray<CComPtr<IHTMLDocument2> > arr; Addref, Release 上のどっちかというが判明しました、ありがとうございます。 先生、さよーなら。
957 :
デフォルトの名無しさん :2005/12/07(水) 15:38:29
IEコンポーネントのウィンドウにフォーカスを移すのってどうやるんでしょうか? SetFocusをしてもキーボードフォーカスが移動しないので・・
7.5 Final EXE !
windows.hみたいなので定義されてる構造体を COMオブジェクトのプロパティに使いたいのだけれど、 こういうの1つ1つIDLで再定義していくんですか? 具体的にはWAVEFORMATEXをプロパティとするオブジェクトを作りたいのですが。
variant
>>961 それだとVARIANT型のプロパティになるんですよね?
よくDirectXなんかでDSBUFFERDESCみたいな構造体を
直接受け付ける関数あるじゃないですか。
ああいうのはどうなってるんでしょうか
ポインタ
すんません、できました。 IDLに#include "windows.h"とやるとコンパイルできなくて、 typedef struct tagWAVEFORMAT { .. } WAVEFORMAT; とするとIDLのコンパイルは通るのですが 生成されるmyclass.hを使うときにWAVEFORMATの二重定義になって困っていました。 そこでIDLで宣言するときに cpp_quote("#ifdef WAVEFORMAT") typedef ... cpp_quote("#endif") として、生成されたmyclass.hで無効にしてやると上手くいきました。
オイオイ
なるほどそういう流れか
どういう意味?
setup71.jsで登録したWTL App Wizardをアンインスコするにはjsを読んで手動で レジストリを消すとかしないと駄目ですか?
>>969 そうかも
俺も2つとか残っててマンドクセーと思ったことが
レジストリは変更してないよ? ファイルをコピーしているだけ
フォルダの中身参照してるだけな。
973 :
969 :2005/12/11(日) 00:06:11
>>970-972 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\vcprojectsから
WTL*.vsz, WTL*.vsdir, WTL*.ico を消すだけですね。。
WTLはスレッドサポートしてる? CMutexとかみあたらないんだけど...
無いよ。 Win32APIでがんばりましょう。 普通に_beginthreadex使えるよ。CRT使わないならCreateThread(Ex)ね。 あとはCriticalSectionなりMutexなり。 俺は親スレッドにデータ渡すときは parent.SendMessage(WM_USER_SENDDATA, (WPARAM)data, (LPARAM)dataSize); で配列渡してるけどね。メッセージキューの利用はスレッドセーフなのです。 っていうかむしろそれ以外の方法使うの危険。 ATL Serverにはそのものズバリなスレッドクラスがあったけど 使った経験ない。
それ以外の方法? APCとか、IOCPとかは危険?
いや、ごめん。基本的にAPIベースで使える手段は一通り使えるはず。 メッセージキューってのはリストビューとかのウィンドウにデータを渡すときの話ね。 無理矢理CriticalSectionとか使って書き込んでもデッドロックすることがあるから。
メッセージキューはIPCとしての信頼性が不安だわ。 マウスやらキーボードやらのイベント入ってきていつ溢れるか分からない。 マウスとか忙しいと捨てられてるし。
普通にデータ受け渡すくらいならよっぽどのへぼ打たなければデドロックはしないでしょ。
子スレッド(多数)から親スレッドの持つ1個のリストビューにアイテム追加するとか。 SendMessageして親スレッドでAddItemとかさせないと、リストの上にマウスかざしただけで即デッドロックするおw
イベントやらセマフォやら使えるんだから、スレッド間通信の道具なんかいくらでも作れるだろ。
>>981 はセマフォじゃなくてミューテクスか・・・
例えば std::deque<> あたりの出し入れをスレッドセーフにするだけでも使えるでしょ?
読み出す側は同期的に待つならイベントが使えるだろうし、
非同期にやるなら追加したあと PostMessage() することにするとかさ。
>>900 デッドロックしてくれなかったら、逆に困るに10000ディナール。
>>983 えっと非同期の方法を応用すると、
EnterCriticalSection→親スレッドのコンテナに追記→LeaveCriticalSection→PostMessage(リストに反映汁)
でええんかな。
俺の場合、実はリストビューは大概オーナーデータにするので、データだけを更新するとか、ある程度は融通は利く。
まぁいちおう考慮してみますわ。
ただ、SendMessageだと親スレッドが処理が終わるまで子スレッドがストールする、という
問題については、現状たいした問題じゃなかったりする。
リストへの追記の頻度がそれほど高いわけでもないし、状況次第。
実際問題、リストに登録する以外の使い道のないデータなんで汎用性持たせてもそんなに意味は無かったりする。
>>984 まー、さすがにデータ1件ずつにつきメッセージ投げるようなヴァカな真似はしてない。
スレッドごとにバッファメモリを用意して、ある程度まとまったデータにしてから配列で渡してる。
WM_SENDDATAってメッセージもあるくらいだし、メッセージキューにアドレス入れて
非同期でデータ交換するのって一般的だと思ってたんだけど。
>>985 リストビューの実装をオーナーデータにすべき。
データベースメモリと別に、わざわざリストコントロール内にデータベースが存在する時点で厨確定。
とりあえず、LVS_OWNERDATA で検索すべき。
いちいちPostMessageとかで通知しないで、親は暇なときに自分で子スレッドからの データがあるかどうか見て、なんかあればあるだけ処理しちゃうというのもいいかも。
>>986 普通にオーナーデータにしてるが、CListViewCtrlImpl<Foo>とコンテナクラスを多重継承したクラス構成にしているwww
>>985 >WM_SENDDATAってメッセージもあるくらいだし、メッセージキューにアドレス入れて
>非同期でデータ交換するのって一般的だと思ってたんだけど。
ちっとも一般的じゃない。
外部プロセスから作為的なメッセージを受信した場合、
それが正しいアドレスかどうか検出する方法がない。
セキュリティに配慮したアプリケーションを作るなら、
アクセス制限された共有メモリとイベント通知でデータ送信をするしかない。
そういいつつ、自分も面倒だからそこまでやらないけどさ。
>>987 OnIdleに噛ますのか。それアリだな。
子スレッドがアクティブなときもリストの項目ソートしたり削除したりできるようにしてるのだが
全部の操作にいちいちロック・アンロックかけるのも面倒なのよ。
親ウィンドウを持つスレッドのみが直接データモデルを操作するほうが現状楽だったり。
>>989 ・・・多重継承は要らんでしょ。移植・仕様変更に弱くなるだけだよ。
時には、似た処理内容をコンソールアプリで提供しなけばならなくなったりするでしょ。
次のお題はLVS_OWNERDATAでチェクーボクース出す方法について。
>>993 そろそろスレ違いっぽいので、Win32API質問スレでおながいします。
というか、もうすぐ1000。
1000!!
'A`TL
^w^ TL
もうすぐ1000!
もらっときます。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。