子ウィンドウを作成、描画してみた。問題なく出来たけど、このやり方だとGPUのリソースを食ってしまうな。。まあしょうがないか。作ろうとしているものはそんなにウィンドウを開くアプリでもないしね。
これをベースとして本格的に実装していくことにしよう。
子ウィンドウを作成、描画してみた。問題なく出来たけど、このやり方だとGPUのリソースを食ってしまうな。。まあしょうがないか。作ろうとしているものはそんなにウィンドウを開くアプリでもないしね。
これをベースとして本格的に実装していくことにしよう。
No related posts.
結局DWMによるウィンドウの透明化はできた。外枠はWS_POPUPスタイルにすることにより消した。
後は子ウィンドウでも同じことができれば自前描画ウィンドウの下地としては完成だ。
No related posts.
WindowsはどんどんC++から離れて行っている。MSの最近のC++における態度たるや、互換性という理由だけで規格違反の挙動を放置し、さらに独自拡張を大量に突っ込んでカオスになっている。もはや、WindowsではまともにC++できない。
確かにそのとおりなんだよね。
私個人としては早急にC++11の言語機能を実装してほしいなあと思っている。独自実装にたいしては否定的ではないのだけれど、まずは規格通りの実装を完成させてからにしてほしいなと思う。
No related posts.
Nyaruruさんの情報を元にリージョン付きブラーで、リージョンをクライアント領域外を指定してみた。
//Create and populate the BlurBehind structre
DWM_BLURBEHIND bb = {0};
//Enable Blur Behind and Blur Region;
bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
bb.fEnable = true;
// クライアント領域外の値を指定
bb.hRgnBlur = ::CreateRectRgn(-1,-1,0,0);
//Enable Blur Behind
hr = DwmEnableBlurBehindWindow(hwnd, &bb);
結果の動画は下。背景はアルファ値がゼロなので透明になっている。
問題はマウスイベントだ。この方法だと透明部分であってもマウスイベントが発生する。レイヤードウィンドウの場合透明の部分はマウスイベントは発生しないようになっている。
関連記事:
昨日の失敗作に画面全体をDwmExtendFrameIntoClientAreaしてみた結果。背景は完全に透明にしている。予想通りというか当たり前の結果。

これはこれで綺麗なのだけれども。ガラス効果をオフにしたいんだけどね。。
No related posts.
「サンクと継続の勉強会資料」をななめ読みした。
サンクの作り方はすごく詳しくて勉強になった。この詳細度であれば64bitの仮想関数呼出しも書いてあるかなと思ったけど32bit限定だった。残念。。サンクの例としてはやっぱりウィンドウプロシージャの呼出し部分に使ってみるというものだ。やっぱりこの部分は典型なんだろうね。
コルーチン(継続)についてはファイバーによる実装ではなく自力で1からの実装であった。コルーチンを使えば状態を保持する変数を減らせるし、ソースコードの見通しも大変良くなる。例にもあるようにマウス関連の操作やジェネレータに使うとすっきりと美しく書ける。yieldをC++11に組み込んで欲しかったんだけどねぇ。
No related posts.
「レイヤードウィンドウ以外の方法を考える」で考えたプランを試してみた。全体が半透明になるように実装したら結果は下記の通り。残念。。

AlphaBlendしてもDest DCはそのウィンドウ内のビットマップなのだから透過しないのは当たり前なのだ。バカですな、私は。DWM APIを絡ませればガラス効果はできそうだけどそれは純粋な半透明処理ではないしね。まあでもDWMもためしてみるか。
No related posts.
No related posts.
No related posts.
レイヤードウィンドウは子ウィンドウには適用できない。私としてはレイヤードウィンドウをバックバッファ代わりに使いクライアント領域外も含めて全てDirect3D11で描画しようかなと考えていた。しかし複数ウィンドウを開くアプリケーションはこの方式ではつくれないということになる。
別の方法としてはDirec3D11テクスチャに描画し、WM_NCPAINTメッセージを捕まえてその際得られるDCにをコピーするという方法が考えられる。コピーはAlphaBlend APIを使えばUpdateLayeredWindowと同等のことができるのではないだろうか。一度試して見ることにする。
No related posts.
子供が買ってきたキャストパズル。ダイキャスト製のズッシリした重みのあるパズルである。なかなか面白い。見た目取れそうに思えないのだが、スルッと取れる位置・タイミングがあって、外せた時はものすごく感動する。
関連記事:
本の虫: 新たな期待できるC++インタプリター、Cling.
C++インタプリターか。LLVMの機能であれば確かに実現可能である。ブラウザのスクリプティングにC++が使える時代が来るかもしれないね。まあそういうムーブメントはなさそうだけど、今後の可能性としてね。。
No related posts.
KRAFTWERKのROBOTSのオマージュ的作品。どこかの雑誌かこのアルバムのライナーノーツとかで立花ハジメさん自身がどこまでKRAFTWERKに迫れるか実験してみた曲とか言っていたような気がする。
No related posts.
テクスチャー自体を描画ターゲットにできることが分かったので、テクスチャを動的に作成して立方体に貼って回してみた。テクスチャに立方体を描いてそれをテクスチャにした立方体を回している。まあなんでもないことなんだけどちょっと面白くて。
Direct3D11ではリソース管理がより抽象化していて使い回しやすいような気がする。
No related posts.
スワップチェーン経由での表示はクライアント領域しか表示出来なかったので、テクスチャにレンダリングしそれをGetDCしてUpdateLayeredWindowするように変更した。今回はうまくいった。ただ角が丸い。デフォルトでリージョンが設定してあるためだ。XPのUIの名残かな。
こちらの情報に従って矩形リージョンを再設定すると角の丸みもとれた。
とりあえずここまでの成果を動画にしておいた。
これでとりあえずレイヤードウィンドウによる表示は一段落かな。試行錯誤した結果レイヤードウィンドウについて多少の情報が得られたのでまとめておきたいなとか思っている。
関連記事: