Programming」カテゴリーアーカイブ

std::pair<_Ty1, _Ty2>

何故気がつかなかったのだ…

std::pair<_Ty1, _Ty2>

のテンプレートに wstring を両方突っ込んで vector コンテナって方法があった。
使うときには first メンバをキーにして取り出せばイイだけだ。
この方法なら設定の並び順は保持可能かつ拡張時の並び順も問題無い!

でもやってみないとどうなるか解らないわな。

class CGesMap
{
private:
    typedef std::wstring m_a;
    typedef std::wstring m_b;
    typedef std::pair<m_a, m_b> Pair;
    typedef std::vector<Pair> vec;
    vec m_vec;
public:
    void SetGesture(LPCWSTR szGesture, LPCWSTR szValue);
    std::wstring GetValue(std::wstring szGesture);
    std::wstring GetValue(int i);
    std::wstring GetKey(int i);
    int Count();
};

こんな感じで明日色々やってみます。
今日も休日出勤で疲れているのでまた明日。

並び順

いいかげんにマウスジェスチャの設定を付けようと考えた。
まあ設定保存形式なんかは 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# って上手く作られているんだなぁ。

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

Aero の TextOut

唐突に気がついたのだが…
以前 WPF の描写について

※ボタンを押して文字を描写した
※アプリの上に他のウインドを被せた
※そのウインドをどかしたら文字が消えていた

なんて初心者が必ず迷う事柄はもう二度と起こらないんだし。

と書いてしまったが、よく考えたら Aero 自体も DirectX 描写だ。
もしかして?と思って実験。

20080309.JPG

を Aero で動かして左クリックで文字を描写して上にウインドを被せる。
どかしたら…やっぱりコレでは描写が消えなくなっていたのね。

ウインドをリサイズすると当然のように消えるのは変わっていない。
正確に書くとリサイズでは WM_PAINT が飛んでくる。

WPF は何をしようが消えない、うーややこしいぞ。
つーか WPF では Paint イベントなんて定義が無いので消えたら困る。

文字を表示する
かの赤坂氏の解説も今は通じなくなってしまっているわな。
なんか何を今更という感じですが Vista って本当に困った OS です。

Web との差

ところで昨日リンクしたサーバーは PHP が使えないのね。
MySQL も、まあ普通に考えればそりゃそうだろう…

ようするに WordPress が使えないわけで。
丸ごと引っ越すのはムリだ、使うにしてもココと併用になる。
ちなみにココは

さくらインターネット

のスタンダードプランで運営している。
負荷状態や通信速度なんかの参考にでもしてくれい。

さてと。

ASP.NET も使う機会が出来そうだけどまず WPF をやらねば。
そろそろ図形に挑戦しようと思ったけどもう少しテキスト処理を。
段落を生成するには FlowDocument コントロールが必要らしい。

20080304.JPG

Bold 化をコードで書くと違和感があったが XAML で書くとピン!とくる。
あぁそういうわけね、XML で書くという方向を優先した結果なわけだと。
本当は <b></b >みたくしたかったけど色々あったてか。

ただフォーマット済みテキストのタグが何故 Run なのだろう?

それより驚きなのが三行目だ。
Web 屋には「何が凄いの?」なんだろうけどソフト屋は衝撃ですよ。
コレと同じ表現を C++ でなんてどんなロジックを組めばいいんだよ?

よく考えたら Web にはハイパーリンクが普通にテキストに含まれるわけで。
Web と普通のソフトウエアとのインターフェイスってこんなに差があったんだ!

それの融合をこんな形で実現するとは恐れ入った。
どういう場合の時にコレを使うというのは別の話。

C++ の \n やデルヒャァの #13#10 のように簡単な改行はムリ?