カテゴリー : ATL/WTL

このカテゴリーの登録数:23件 表示 : 1 - 20 / 23

May 09, 2010

iTunes2witter ver0.2.1.2を公開してみる。

iTunes2witter.exe

iTunes2witterは、iTunesで再生されている曲名を、自動的に・または手動で、TwitterにつぶやくためのWindowsアプリケーションです。
WTLで書いてます。追加ライブラリ不要、レジストリを汚染しません。
ただしこのアプリを使うと、フォロワーのTLが曲名だらけになってしまい、正直ド顰蹙となります。笑

まだ完成度は低く、いろいろ追加しなくちゃいけないですし、そもそも6月末にTwitterのBASIC認証が無効化されるのでそれまでしか使えないんですが、今後対応するつもりです。

Aug 29, 2009

めまぐるしくSilverlightにSQL Serverを経由して、結局WTLの世界にカムバック中

もうホントに労組活動で疲弊している今日このごろです…執行委員辞めたのに収入源に直結する昼間任務がまったく減らない。夏休みとったのもありますが、今月は10万円減となってしまいました。そして5連休のある来月も似たような感じになりそうで、資金不足により冬はあんまり旅行できそうにありません。
でもこれは単純に、現下で抱える争議がたまたま日程的にバッティングの嵐になっている影響もありまして。
一番ムカついてるのが、いきなり第1回めの団交の冒頭で実質拒否をされて、抗議したら雇用側から労働審判に訴えてきたっていうやつ。先方の弁護士はヤメ検で、かの大手悪徳金融業T社で社外取締役をやっていたという輩。要するに、中小企業での労使問題の解決のノウハウなどまったくなく、「そんなの労働審判に持ち込んだらあんたらむしろ簡単に負けますよ」っていう話をわざわざお金かけて訴えてきて、んで実際に第1回審判で雇用側敗北がほぼ必須になっちゃってるわけです。しかしとはいえ、労働審判なのでこちらも弁護士を立てねばならなくなる上に、こちらが勝訴しただけではそれが持ち出しに終わるっていうまったく腹立たしい話なんですよね。労組も解雇された本人も金銭的に困るし、担当の私も昼間の時間を吸い取られてやっぱり金銭的に困るっていう。いわゆるSLAPPとは規模はまるで違いますが(^^;;)、でも構造としてはこれ、単に労働者への嫌がらせっていうだけです罠。

さて、しかし、確かに収入源は、こゆ身では精神的には深刻ではあるのですが、でもたぶんそれをより増幅して感じてしまうのは、むしろ労組活動ではなくて仕事のせいじゃないか、という話だったりもします。

つい先日まではFlexだなんだと格闘してて、で実際にFlexについてはかなりモノにできてきた感じなのですが、しかし先々週に突如申し渡された「よねざわさん、Silverlightの手伝いをしてください」との声。
んな、Flexの対抗馬とはいえ、それM$でしょ?C#でしょ?とビビりながらも、当該任務に困っているSさん(このぶろぐで久々に登場!)からアドバイスを受けながら、1日で最低限マスターして逆にコード書きの手伝いをはじめたりして、おお、Silverlight面白いけど「なんでもコード書いて解決すりゃええやん」という私にはFlexの方がなじむなぁ、なんてぶつぶつ言いつつバリバリSilverlightでお仕事。

しかしそれが収束に向かい始め、先週頭に仕事ないですよー、と訴えたら、今度は別の部署から「よねざわさん、SQL Serverの手伝いをしてください」との声。
えーっまたM$かよ!と思いつつ、Windows Serverはセットアップしてくださるってことなんで、今度はC#かはたまた懐かしのVBか(笑)、と思ってたら、「SSIS使ってください」。
な、な、なんじゃこの電子ブロックは!?!?と、M$な世界がよくわかってない私は率直に思うわけですが、結局これで複数のExcelシートからデータインポートするパッケージを作ることになったわけです。
列行変換があるのでそこはC#で書いて、でようやく昨日できあがったんですけど、できてしまえば意外にシンプル、でもSSIS以前にSQL ServerもADOもなーんも分かってない私にとって、むしろそれらのスキルが不足つーかほとんどない状態から作るのは相当の苦行でした。

で、それは昨日できあがったわけですけども、実は今週頭からはさらに別の任務が並行化。「よねざわさん、インストール不要なWin32アプリを作ってください」とのお声がまたまたかかり、イマドキなんでやねん、と思いつつも、それならと利用を提案してめでたく通りまして、実に久々にWTLですよ!!!
Silverlight開発のためにVS2008はインストールしていただいてたので、そこにWTL8.1を入れて、さっそくモック作って「早いですね!」ってほめられましたが、これは明らかにWTLがほめられただけですね。笑
それにしてもWTL、8.1になってたんですね! しかも日本語パック出てて、Wizardから出力されるリソースがデフォルトでCP932だし!!!

そんな感じで過ごしてきた今月のお仕事でしたが、でもやっぱり…FlexとPHP開発を入れて、さらに仕事じゃないけどこちらのサーバセットアップ(ようやく終わりました…)を合わせると、今月だけで6技術の並走、うち2技術は完全に初歩から。
このトシでこれはやっぱりキツいよ…
キツいけどそれはそれで面白かったりもして、でその面白さが時間の不足や脳ぢからの不足を責め立てるからこそ、疲労もたまるし愚痴も出るんじゃないかなぁ。

…とこれ自体が愚痴か。笑

Apr 27, 2006

恐るべし関数オブジェクト

ポスト @ 23:38:23 | プログラミング,C++,BREW,ATL/WTL

本日のお題は、BREWのログ取りです。

BREWには DBGPRINTF() という、シリアルにログを吐くマクロがありますが、これが今3くらい信頼性に欠けるものでして、しっかりログを取るためにはやはりファイルにダンプできることも必要になってきます。

そこで私に与えられた任務:リリースビルドではきれいさっぱり消滅し、それ以外は条件コンパイルでシリアルログ・ファイルログを切り替えられる CLogger を作れ。

そしてこれを実装しようとしてすぐ直面するのが、「マクロで可変長引数を実現する」手法です。

「リリースビルドで消滅」は、、マクロ定義を切り分けて、その場合に ';' のみに置換してしまえば問題ありません。デバッグログなので、__FILE__ と __LINE__ を出力に埋め込むのは必須ですが、これもマクロの中に埋め込めばよいわけです。

そしてここではたと困るのが、DBGPRINTF() ってくらいなんだから可変長引数にしなくちゃいけないんだけど、マクロにそんな機能なんかないよ、というところなのです。

ちなみにBREWのマクロは、おおむねこんな感じ。

もっと読む...

Jan 16, 2006

あっと驚くCS_DROPSHADOW

ポスト @ 19:08:47 | プログラミング,ATL/WTL

このウィンドウクラススタイルを指定すると、XPで、ウィンドウに影がつきます!
まさにここで悩んでいたモンダイがイッパツ解決なのです。

これ、MSDNで全文検索すると出てくるのですが、Kさんが別の調べ物してるときに偶然ハケーソしてちょっと今職場が熱くなった次第。ぐぐっても日本語ページではひっかからないし、これほとんど知られてない話なんだろうなぁ…

「小便たれ」ロジックとWTL::CClientDC

ポスト @ 19:00:33 | プログラミング,ATL/WTL

激烈に仕事してます。って単に火を噴いてるからなだけですが。苦笑
とりあえず今現時点においては猛烈な眠気の中がんばっております。

で、そういう状況ですとしょうもないミスが出るもので。

昨日、独自の描画が見事に動いたのはよいのですが、そのウィンドウが出た状態でUI操作を行うと、なぜか同じプロセスの別のウィンドウの再描画だけが行われない、という不可思議な現象が出ました。

そしてなにより、WM_TIMER が、SetTimer()は正常終了しているのにまったく受け取れません。

なんじゃこりゃ、的に悩んだわけですが。

もっと読む...

Dec 29, 2005

「メニューの下に影を表示する」はレジストリのココに格納される

ポスト @ 15:44:55 | プログラミング,ATL/WTL

Windows98以降の、「マウスポインタに影つける」やら「メニューがうにょ〜んと出てくるようになる」やらの設定、これを知る必要が出てきてしまいました。ええ、メニューもどきウィンドウを自前で書かないといけないので、設定を見て、他のWindowsが出すのとまったく同じのを出さなくちゃいけなくなってしまいました。涙

で、たいていの項目はSystemParametersInfo()で取れますし、「うにょ〜ん」はAnimateWindow()イッパツなのでまぁいいんです。

モンダイは、「コントロールパネル」-「画面のプロパティ」-「デザイン」-「効果」で指定できる中の、「メニューの下に影を表示する」。この値を取得する方法が、MSDNを調べても出ていません。

えぇぃ、こうなったら力技ぢゃ!

というわけでレジストリ追跡ツールを使って調べましたよ。笑
どうやら、HKCU\Control Panel\Desktop\UserPreferencesMask の19bitめがOnですと「影を表示する」、Offですと「表示しない」なようです。

まぁ、これを取得する方法が公開されていない、ということは、将来的に何か変更になる可能性があるってことでもあるわけですが、今回のプロダクツは「今のXPで動けばよい」ので、まぁこれを使えばよいのかな。

Dec 26, 2005

またまたドハマリ、「イメージリストコントロールを使い、Windows XP上で32ビットアンチエイリアシングビッ

ポスト @ 14:22:14 | プログラミング,ATL/WTL

いやもうなんで自分はここまで本筋じゃないところでハマるのか。元バイトで現在取締役社長のKさん(先日「うちの社は取締役が自分だけなんで『代表』つきませんから!」と指摘されました。すみませんでした。笑)からも「いずみさんていつも関係ないところでハマってますよね」と冷酷に指摘されてるのですが、今回の旅先での作業もまたまた大ハマリ。涙

今回のテーマは、「背景に画像などを持ってて、その上にアンチエイリアシングのかかったフォントやグラフィックでデジタル時計を表示するActiveXコントロール・XP上で動けばよい」です。
で、Win2000以上でなら、GDI+を使えばαブレンディングは比較的カンタンにできるのですけれど、「XPではイメージリストが32bitαチャンネルをサポートしている」というのをMSDN斜め読みしてるときに見つけ、「じゃー旅先で書いておきますよ」と決めたのです。
Kさんは「いずみさんなら2時間でできますよね」とまたまたお得意のプレッシャー。「えーそんなのムリだよー」と行っておいたのですが、確かにコード書いて2時間で時計は出来上がりました(^^;;)。

だがしかし。

もっと読む...

Dec 20, 2005

いやもうオマエはアフォかと、ヴァカかと。笑

ポスト @ 13:45:47 | プログラミング,ATL/WTL

今朝方出来上がったコントロール、既に存在している同じ機能を必要とするコントロールのうち1個の方にも無事取り込めて動作確認できています。

まぁ今朝できたといっても、結局仕様をかなり簡略化して、「ワーカスレッドからCOMイベントは投げない」という形にしたから、なのでぜんぜんだめだめなのですが。

でもさ。
もっとだめだめなのはさ。
「ワーカスレッドからのポインタのマーシャリング」といえば、お約束のように「GIT(グローバルインタフェーステーブル)」。そんなわけでぐぐってたんですけどね。

さー「GIT ATL」でぐぐってみよー!

もうさ、なんていうか、老化ここに極まれりって感じですよね。
自分でネット上に書き散らしておきながら、そのこと自体を完全にすっぽりと忘れ去ってるなんてさ。笑

あぁ、インターネットは私の巨大な備忘録。トホホ

CComBSTRのコンストラクタで文字列長に0を指定すると中身がカラになる

ポスト @ 6:32:40 | プログラミング,ATL/WTL

ハマりました。
こちらとしては、CComBSTR(0, "") みたいな呼び出しで、空文字列を表すBSTRが生成されるだろうってな前提で組んでて、そういうシチュエーションでCOMクライアント側が落ちるので「?」だったのですが、ソースコード読んだらイッパツ判明。何のことはなく、サイズが 0 だと内部ポインタをNULLにしてました…
これって仕様的にどうよ? って感じですが。まぁおとなしく::SysAllocStringLen()ですかねぇ…

Dec 19, 2005

今日中にやらなければならないこと

ポスト @ 14:26:40 | プログラミング,ATL/WTL

STAで動作するけどワーカスレッドをプロセス内で共有して、そのスレッドからCOMイベントを投げる、という無茶なCOMオブジェクトを夜までにスクラッチ実装しなくちゃいけません。
組み込むべきコアロジック自体は既に動作しているものが使えるのですが、文字列をBSTRで扱うようにしなくちゃいけないし、ICollectionOnSTLImplとか使ったことないし、イベントポインタのマーシャリングなんかやったことないし、そもそもワーカスレッドをプロセス内で共有するのもやったことないし、って夜までに間に合うんかい! 笑

Dec 15, 2005

ちょっと気が利くアドオンクラス、CCenterredWindow

ポスト @ 13:13:28 | プログラミング,ATL/WTL

ATL::CWindow クラスの CenterWindow(parent) は、parent に自分の親ウィンドウを指定しても、その親ウィンドウではなくオーナーウィンドウの位置に対してセンタリングを行います。
でもそうすると、ActiveXコントロールでの表示などでちと妙なことになりかねません。
ではCenterWindow()を使わずに、WM_CREATEまたはWM_INITDIALOGにて自前でセンタリングすればよいかといえば、その時点で既にポップアップウィンドウの親はオーナーウィンドウにすり替えられてしまっているのでムリです。
↓のアドオンクラスを使えば、そんな時に所与の目的を達成できます。

もっと読む...

Dec 14, 2005

WM_SETREDRAWのばかばかばかばか、ばかん 涙

ポスト @ 17:12:30 | プログラミング,ATL/WTL

またまたCDialogResizeにやられました…

コントロール内でポップアップ表示をする代わりに、自コントロール内に子ウィンドウを貼り付けてそこに表示する、というロジックを組んでいるのですが、描画は自分自身も子のもすべて自前なので、「その子ウィンドウがvisibleかどうか」で描画コードやリサイズ時の描画パーツ再レイアウトコードを条件分岐させてました。

こういう場合、一般的にはフラグを持つのでしょうけど、「ウィンドウがvisibleかどうか」というWindowsの内部情報と完全に同期するはずの情報をわざわざアプリ側で持つのは冗長です。もちろん、悪意あるアプリが外部からWM_SHOWWINDOWを送りつけるとかされるとアウトですけど、その場合は見た目ももともとおかしくなってしまうので、そこまでは考えなくてもよい、というのが常識的な判断だったはずです。

しかし、そのゆに実装してみたコントロールをCDialogResize含みのダイアログアプリコンテナに貼り付けて、そのダイアログをリサイズしてみたところ、なぜか、子ウィンドウたちのZORDERが崩れてしまいます。

もっと読む...

Dec 10, 2005

WinHTTPで解決

ポスト @ 1:39:09 | プログラミング,ATL/WTL

CAtlHttpClientがあまりに使えないという件、K君に尋ねたところ、このクラス他にもいろいろ悪さをするらしく、評判サイアクのようです。

結局、K君から教えてもらったWinHTTPを叩くことですんなり解決。いやー高速化に成功しました(^o^)

Dec 08, 2005

CAtlHttpClientはボディが空のリザルトでブロックする

ポスト @ 20:40:23 | プログラミング,ATL/WTL

本日のドハマリがコレ。

とりあえずサーバとhttpで通信するってんで、ATL7にある便利クラス、CAtlHttpClientを使ってみました。おーこれはお手軽だ!

…と思ってたのも束の間。

サーバ側がテストコードをはずした途端、なぜか激重に。(u_u)

いろいろ悩んで調べたのですが、どうやら、CAtlHttpClientは空の本文を受信するとブロックするようです。
サーバ側がデバッグ出力を返していたため、データなしの場合もスムーズに進んでいたのですが、サーバ側が何も返さないと、CAtlHttpClientは「来るはずのない本文を待ってしまう」のですね。で、タイムアウトはきちんと動くので、しばらくすると制御は戻ってきて、結果として「激重に見える」というわけでした。ちゃんちゃん。

さーどうする。解決策はいくつか考えられますがどれもスマートじゃないなぁ。。。

Nov 30, 2005

WTL::CDialogResizeで WS_CLIPCHILDRENを指定するとグループボックスの背景が塗りつぶされない

ポスト @ 22:14:36 , 修正 @ Aug 21, 2009 11:16:13 | プログラミング,ATL/WTL

今おしごとで作っているのはあくまでもコントロール。そのテストのためだけに存在するリサイザブルダイアログボックスはオマケ中のオマケに過ぎず、そこで本筋に関係ない問題で悩んでも200%有害なだけなのですが…

グループボックス(ラジオボタンを四角い枠線で囲ってあるやつ、設定画面でごく普通に出てきます)を貼ったダイアログボックスを、WTLの超有用クラス、CDialogResize で、リサイズ動作中のちらつき防止のため WS_CLIPCHILDREN を指定して動作させると、グループボックスの背景だけが見事に消去されません。

これ、あまりにキモいので、元バイトで今は代取のK君に質問してみたところ…

もっと読む...

Nov 16, 2005

ATLコントロール内に自前で貼り付けたコントロールのフォーカシング

ポスト @ 12:36:22 | プログラミング,ATL/WTL

複合コントロールでない、普通の CWindow な ATLコントロールを作って、その中にボタンとかを自分で Create()して貼り付けたような場合、そのコントロールをダイアログボックスに貼り付けたりしたときに、Tabキーによるフォーカス移動がうまくいきません。

MSDN 読んだ限りでは、各コントロールに WS_TABSTOP を指定するのは当然としても、親ウィンドウに WS_EX_CONTROLPARENT も指定しなければならないようです。

だがしかし。
実際にそうしてみると、特定のボタンをクリックしたりすることによって、アプリ全体(正確には「メッセージキューを持つスレッド自体)がフリーズしてしまいます。

もっと読む...

Nov 15, 2005

CFlatPopupMenu

ポスト @ 16:07:55 | プログラミング,ATL/WTL

本日より新規の開発に入っておりますが、今回の最大の難関は「吹き出し形のポップアップメニュー」。

さてどうしたものかと思い、ぐぐっているうちに、それそのものズバリじゃないですけど、

http://www.codeguru.com/Cpp/controls/menu/alternativemenu/article.php/c189

にたどり着きました。
で、ソースコード覗いてビクーリ!!!

これ、完全自力でウィンドウ描いてるだけやん。

実はメニューウィンドウに対してGetWindowDC()すればよいようではありますが…さてどうしたものやら。まぁでも、がんばればなんとかなることだけはわかったわけですね。笑

Nov 14, 2005

いっちょあがり!

ポスト @ 22:34:36 | プログラミング,C++,ATL/WTL

というわけで、当初提出した線表のとおりでもののみごとにCOMコントロールが一応の完成。
まだ、本来 IStream から読むべきオブジェクトを fstream から読んでたり、描画はベタベタだったり、最後に返すのはオブジェクトでコレクション化したほうがよかったりと問題は多々あるのですが、とりあえず現状このクオリティでよいということで。

もちろん、明日から次の任務が始まるので気は抜けないのですが、ATL7にも慣れてきましたし、徐々に温泉&全駅制覇レポートも再開してこうかなーとか思ってますです。

しかしATL7はいいなぁ。今日、元バイト(で今は代表取締役社長)のKさんから聞いたんですけど「これ、3のときと別人が書いてるんじゃ?」と。生粋のMSっ子(笑)のKさんは少々ご不満もあるようですが、STLとの親和性が大幅に向上したATL7、私は大好きです♪

Nov 11, 2005

日本語フォントを CreateFont() するときは LOGFONT.lfCharSet に SHIFTJIS_CHARSET を設定しなければなら

ポスト @ 18:46:58 | プログラミング,ATL/WTL

「MS ゴシック」を指定して1バイト文字では確かにその字体が出力されてるのに漢字は文字化け…これで30分悩みました。もう現役引退したほうがいいかな、つーかたぶん「さっさと.netに移行しろ」が正解か。u_u

Nov 10, 2005

仕事おわんねー

ポスト @ 23:40:44 | プログラミング,ATL/WTL

11月アタマから実装をはじめたCOMコントロール、明日は「前倒し前倒し」の場合、いちおう完成という予定だったわけですが到底ムリ、毎日の通退勤時や帰宅後夜中までも作業して、なんとか線表ギリギリよりちょい遅れくらいでの進行です。

今は描画系シコシコ書いてるんですが、ちょっと特殊なスクロールとかもあるのでなかなか大変。こりゃCOMつーよりWin32だもんなぁ。。。ただ、いろいろ感覚を思い出してはきてるので、前のような「ただ大変なだけでかなり不毛」というのとは大違いではあります。(^^)