549635 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

OrangeMaker

OrangeMaker

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Keyword Search

▼キーワード検索

Profile

OrangeMaker

OrangeMaker

Calendar

Favorite Blog

情熱の薄れた中年 New! Nori1022さん

欠けた歯の治療が終… New! doziさん

戸郷6回に4失点で逆… ホームズ探偵さん

慣れていくネットシ… eShopMakerさん
パワーアシストロボ… jhiranoさん

Comments

オールフリーソフトのひろ@ Re:Kokomite Ver.1-0-1-103 リリース(06/10) Kokomiteについて教えてください。 初め…
http://buycialisky.com/@ Re:vs2011 にアップグレード(09/18) cialis split pillcialis comparison difl…
http://buycialisky.com/@ Re:BreathOfWindow Ver.1-0-116 Vectorにて公開(09/05) best price cialiscialis vs viagra pharm…
http://buycialisky.com/@ Re:RieNマルチ化(04/29) cialis preis apothekecialis online ohne…
http://buycialisky.com/@ Re:EatherOverSkypeについて(08/01) side effects of viagra and cialiscialis…

Freepage List

Headline News

2009.10.26
XML
カテゴリ:カテゴリ未分類

先日Aero関係を調べていてMSDNの面白い資料がありました。

その資料では、リボンのようにタイトルーバーにボタン等を配置する方法がかかれておりなかなか興味ぶかい内容でした。

リボンインタフェースを始めてみたときに、お~!と思うのはタイトルバーにはみ出たでっかいアイコンと操作ボタンですよね。

それからずーとどうやってやっているのだろうと思ってました。

ribon-sample

拙い英語力で理解したのは、DWMがフレームを描画したあとでウィンドウマネージャ側のフレームを外してウィンドウサイズをDWMのフレームサイズにウィンドウサイズを変更するということらしいです。

結構荒業な感じですがこうするとウィンドウ全体がクライアント領域として描画可能になるということらしいです。

あとは、この重なった部分のシステム系イベント回りを自力でケアするということらしいです。

そのための、APIが幾つか用意されているところをみるとたまたまこうなったのではなく最初からRibonインタフェース等で使うために意図的に設計されているのですね。

と、ここまで書いて拙作のAeroの調べでDWM側のフレームを外してみると、

え!

ちゃんとウィンドウマネージャのフレームが付いてるじゃん????

ribon2-sample

ん~。また新たな謎が。。。。

追記:

もう一度資料を確認してみると、WM_CREATEで

    RECT rcClient;
    GetWindowRect(hWnd, &rcClient);

    // Inform application of the frame change.
    SetWindowPos(
        hWnd,
        NULL,
        rcClient.left, rcClient.top,
        RECTWIDTH(rcClient), RECTHEIGHT(rcClient),
        SWP_FRAMECHANGED);

としているだけで、スタイルビットをいじっているわけでないようです。

で、
SWP_FRAMECHANGEでWM_WM_NCCALCSIZEを発生させてここでシステムを

だますわけですね。あとはHITTESTを自力で行う。

とこんな段取りのようです。

この資料は、こちらで見れます






お気に入りの記事を「いいね!」で応援しよう

Last updated  2009.10.27 05:12:28
コメント(0) | コメントを書く



© Rakuten Group, Inc.
X