C/C++」タグアーカイブ

並び順

いいかげんにマウスジェスチャの設定を付けようと考えた。
まあ設定保存形式なんかは Y901 の時にやっていたのですぐ決まるわな。
実装部分だけなら連想配列を使って半日掛からず作れた。
wstring と int をペアで格納してと。

20080320.JPG

困ったぞ。
連想配列(つまり std::map)って勝手にソートしちゃうんだね。
検索効率を考えると「そりゃそうだ」なんですけど…

実はカスタマイズ部分は順番という概念を消したいのよね。

いわゆる配列や TList なんかを使うと整数という順番が決まる。
その整数という順番を利用してアクセスするのが普通、ココが落とし穴。
真ん中に何か追加しようとするとソレ以降の整数という順番が変わってしまう。
結果最後尾に追加しか方法が無くなって違和感のある列のできあがり。

と、Pallepoli のキーカスタマイズを拡張しようとしたときに困ったので。
一端順番を決めて作ってしまうと後での追加は最後尾にしかできないわけです。
後でどうにでも配置できるようにするには順番を使わないという方法しかない。

それなら連想配列だ!架空の順番を付け取り出し時に好きに並べればイイ!

とやってみたのですが…今度は全自動ソートという魔物がいた。
これではユーザーが設定で並べた順番さえ勝手にソートされてしまう。
インターフェイス部分を作ろうとしてガックリしてしまった。
開発者側の問題は解決するがこうなるか、凡庸させるにはキツイ。

あーあ、せっかくクラスを作ったのに、さてどうしよう。

又自分で最初から作るしかないっぽい。
2つの動的配列か vector を同期させて片方の値をキーと仮定させて…
ってエラくレスポンスの遅いリストになりそうな雰囲気だ…
まあ今時のパソコンならそれでもいいんじゃないかとか…

class の static

Google アドすげぇ。
気がついたら現在のトップではレンタルサーバー関連ばかりになった。
そういえば Ubuntu ネタやっていた時は Linux ばかりだったなぁ。

これじゃいかん!プログラミングネタやらなきゃ。
つーことで、C++ の class で何を今更な話だけど。

20080316.JPG

にて普通に 3 と出力される。

うっ!知らなかった、class で static ってこうやって使うんだ。
コレならインスタンスを生成しなくてもクラスが使えるんですね。

でも定数しか参照不可でオーバーライドが出来るわけでもない。
名前空間と何一つ変わらない使い方しか不可能なのかな?

でも C# は普通にクラス内変数が参照可能だよな。
なんかイイ方法があるかもしれん。
上手くいけば C++ と C# で大半のコードが共通にできる。
現在使っている難解な継承よりスマートな部品が作れるかも。
よーし!

ということで今日は色々やってみた。

何時間かして気がついた、C# の変数とは実はオブジェクトだった…
だから static 経由でも入れ物として成り立つのね、あーあ。
一応 C++/CLI を少しやったんだからンナこと早く気がつけよ。
JAVA や C# って上手く作られているんだなぁ。

ということで今日もこんな勉強で無駄に過ごしてしまいました。
こんなことしてるよりいいかげんにサイトの更新をしなきゃ…

新ANSI C言語辞典

昨日まで強烈な鼻風邪で死んでいました。
つーことでプログラミングはしていない、のでネタは無い。
六万円の元をとらなきゃいけないというのに…

Microsoft、学生に開発ツールを無償提供 – ITmedia エンタープライズ

大学生の皆さんには大バーゲンだなぁ。
多分専門学生に ASP.NET の教育をさせるもくろみなんでしょうね。
でもソッチ方面はもはやスタンダードになった LAMP を勉強したほうが得かと…

そんな手には乗らないぞ!と C/C++ ネイティブを作るのも又一行。
しかし大半の人は挫折するのが目に見えているわけで…
これから初めても専門用語を覚えた頃には社会人かも…

という方々の為に一冊紹介

この本はプログラミング系サイトでよく見かけると思います。
実は自分はプログラミングを始めた頃になんとなく買ったわけですが、
あまりの濃い内容に圧倒されしばらく眠っていました。

それからしばらくして Pascal から C++ へと環境移行した。
その時改めてパラパラとめくって衝撃を受けてしまった。
知りたかった事が一つ残らず書いてある、その先まで書いてある!
ライブラリ関数の実装例までが見事に書いてある、恐るべし。

それからしばらくの間単行本がわりに持ち歩いていたくらいです。

何より嬉しいのは 18.8 x 12.8 x 3 cm という小さなサイズ。
そしてほとんどが文字だけという徹底的に解説を詰め込んだ内容。
これなら鞄に難なく入る。

いつも思うのだがプログラミングの本は何故絵本みたいなのばっかなの?
画像なんかいらないし老眼を前提としか思えない文字のサイズは読みにくい。
とにかく神の無駄遣いだし、ページをまたがる内容は本として失格だし。

というか「持ち歩きたいんだよ俺は!」と声を大にして言いたい。
本を意図的に厚くするためにそうしているとしか思えない。

脱線はこのくらいにして。
本当にこの本は持っておいて損をしない内容です。
多分初心者の方々は私と同様に当分眠ってしまうかもしれないほど濃いです。

最後に、オジサンも Expression Studio が無償で欲しいよぉ!

Flash 再生

VS2008 の使い勝手を調べるのに試しに Flash 再生をば。
新規でまず普通に Win32プロジェクトを適当な名前で作り stdafx.h に…

なんじゃこの targetver.h っつーのは、分離する必要があるのか?
ココを弄くるとリビルドしなきゃいけないのでややこしくなるだけだと思うが。
まあそれはよくて。

#pragma comment(lib,”Atl.lib”)
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
#include <atlbase.h>
#import <C:\\Windows\\System32\\Macromed\\Flash\\Flash9d.ocx> named_guids raw_interfaces_only

を追加、ocx の名前は私はこうなっていたけどどうなんだろう?

と書いていたトコで Ctrl+C が急にまったく使えなくなってしまい困った。
再起動しようとすると更新アイコンが、こんなにコッソリ更新すんなボケ!
VS2008 では使えなくなったかと思ったヤン、まあそれはよくて。

ソース先頭にお約束を記述
using namespace ShockwaveFlashObjects;

ShockwaveFlash オブジェクトのポインタを用意しておく。
IShockwaveFlash *pSwf;

んでもって下記のコードを追加してビルド、完成。
swf ファイルは自分で用意してパス指定してね。

atl01

だけどコレだけじゃ atl が使えないので
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.ATL
に atl90.dll があるので生成された exe と同じフォルダに放り込む。
それだけで swf は再生可能。

atl02

コードギャーは気にしないでくだされ、手元にコレしか無かっただけです。

flv の再生は読み込んだ swf から ActionScript とかで読み込んで再生させる。
というわけで Flash 作成ツールが必要なのね、、、、、

WS_EX_COMPOSITED は使えない

あけおめ(一応)

あー!なんじゃこの拡張スタイルはっつーの。
Wバッファリングを自動でやってくれるスタイルなんだが。
Aero で使ってみたら問題が無かったので当ててみたら…

クラシック表示
VMR の動画がまったく見えない。
他の部分が余計にチラツク

XP
アルファブレンドを掛けた GDI+ 表示がまったく見えない。
VMR の動画もやっぱりまったく見えない。
その見えない動画の上ではメニューさえも消える…

そういえば自力でやったら似たようになったのでヤメたんだっけ…
とにかく GDI+ や DirectX を使う人は絶対にこのスタイルを含めないで。

とにかくこの環境全部のつじつまを合わせると方法が限定されて困るわな。

???の人に簡単な解説をすると。

XP までの画面表示は1つの画面領域を全部のアプリが共有していました。
だからウインドを移動すると下のウインドが真っ白になっているのが見える。
ソレ毎に WM_PAINT が飛んできて、せっせと再描写が行われます。

しかしビデオカードが大半を処理してくれるので気にならなかった。
GetDC 関数で得られる HDC は実は完全に見せかけです。

Vista のクラシック表示は同じ方法で描写されます。
しかし GDI 処理が全部ソフトウエア処理に変更になりました。
そのため描写処理は目を覆いたくなるくらい遅くなってしまいました。

Vista を重いと言う人の大半はコレを言っているような…
クラシック表示のほうが軽いって考える思いこみって怖いね。

Aero 環境は Desktop Window Manager (DWM) が一括管理します。
アプリケーションごとに画面領域を本当に確保しておき合成して描写します。
おかげで背景のウインドさえスケスケに見えるなんてワザが可能。

と、聞いただけでは「重くなりそう…」と感じるのですが
その仕組みのおかげで上に被さっているウインドが移動しただけで
WM_PAINT が飛んできて再描写なんて事は無くなってしまいました。
トータルで描写処理が軽くなっています、頭がいい人が考えたのね。

Aero で表示がおかしくなるアプリは WM_PAINT の処理がおかしい。
○isual Studio とか ○onoha とか。

おまけに Vista ではオーバーレイが廃止されている。
だから動画のスクリーンショットも普通に可能になってもーた。
つーことで Cinema も VMR というワケワカなモンに移行したわけで。

とにかく。
描写処理が Aero、クラシック表示、XP で全部違うのよ。
従来の方法で描写しているかぎりは何も問題がないわけですが、
DirectX や GDI+ でアルファブレンドを使うとこうなってしまう。
両方使っている Cinema は…さて、色々試して勉強だ。

正月からこんなネタ…