Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016-11-24

とりあえずこんな感じ?

| 22:11

 さて・・・

 とりあえず、確保やぽいんたあには目をつぶる(えっ;)

 だって、説明見ても何の例もないし、よくわかんないもねー;;;

 なにより、GetWindowRectは、プレビューウィンドウの幅と高さを得るために使っているだけっぽいので、「窓ハンドル内サイズ取得」でも良さそうだったから。

 肝心なのは、GetDCなんだろうね。でばいすこんてきすとってなんすか;;;;

 とりあえず、それを取得すると、の後、GDI 関数を使って、返されたデバイスコンテキスト内で描画を行え・・・るラシイ。

 取得したいウィンドウのハンドルを引数にすれば、ハンドルが返ってくるので、取得するだけは、カンタン。

 ReleaseDCは、取得したら最後はちゃんと解放して終了してねってだけのこったろう。

 BitBltは、ハンドルからハンドルへ画像コピーが出来る的な?

 のデバイスコンテキストとやらに直接なでしこの命令で何かを描くことは出来ないから、イメージ部品に描いて置いて、コピーするってコトだね。

 これがまた、母艦じゃダメなんだよね。イメージ部品じゃないと。

 たしか、なでしこの画像合成そうだったね。



 んなこんなで、いろいろやって、こうなった。

#-----------------------------------------------------------
*プレビュー
  HDCはPWHのDC取得。

  #「スクリーン セーバーの設定」画面内のプレビューウィンドウ(ミニ画面)の情報を取得。
  PSとは配列=PWHの窓ハンドル内サイズ取得。

  #描画用のイメージにプレビューウィンドウのサイズを設定。
  裏画面の幅はPS¥0,2。
  裏画面の高さはPS¥0,3。

  #プレビューウィンドウの表示状態が0になったら、終了させる。
  Tの時満ちた時は~
    もし、PWHの窓ハンドル表示状態がオフならば、
      DC解放(PWH,HDC)。終わる。

  #タイマーを開始
  Tを開始。

#-----------------------------------------------------------
#プレビューウィンドウに実際に表示するもの
#-----------------------------------------------------------
  裏画面をデスクトップ色画面クリア。
  「プレビュー」を裏画面の10,10へ文字表示。
  (裏画面のハンドル)をHDCへ窓ハンドル画像転送。

#-----------------------------------------------------------
# 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得します。
# https://msdn.microsoft.com/ja-jp/library/cc428664.aspx
●DC取得(ハンドルの)=DLL("user32.dll",
"HDC GetDC(
HWND hWnd // ウィンドウのハンドル
)")
#-----------------------------------------------------------
# デバイスコンテキストを解放し、他のアプリケーションからつかえるようにします。
# https://msdn.microsoft.com/ja-jp/library/cc410542.aspx
●DC解放(hWnd,hDC)=DLL("user32.dll",
"int ReleaseDC(
HWND hWnd, // ウィンドウのハンドル
HDC hDC // デバイスコンテキストのハンドル
)")
#-----------------------------------------------------------
# 指定されたウィンドウの表示状態を調べ、0かそれ以外を返す。
# https://msdn.microsoft.com/ja-jp/library/cc364819.aspx
●窓ハンドル表示状態(ハンドルの)=DLL("user32.dll",
"BOOL IsWindowVisible(
HWND hWnd // ウィンドウのハンドル
)")
#-----------------------------------------------------------
# ビットブロック転送を行います。
# コピー元からコピー先のデバイスコンテキストへ、
# 指定された長方形内の各ピクセルの色データをコピーします。
# https://msdn.microsoft.com/ja-jp/library/cc428944.aspxBitBlt(hdcDest,nXDest,nYDest,nWidth,nHeight,hdcSrc,nXSrc,nYSrc,dwRop)=DLL("gdi32.dll",
"BOOL BitBlt(
HDC hdcDest, // コピー先デバイスコンテキストのハンドル
int nXDest, // コピー先長方形の左上隅の x 座標
int nYDest, // コピー先長方形の左上隅の y 座標
int nWidth, // コピー先長方形の幅
int nHeight, // コピー先長方形の高さ
HDC hdcSrc, // コピー元デバイスコンテキストのハンドル
int nXSrc, // コピー元長方形の左上隅の x 座標
int nYSrc, // コピー元長方形の左上隅の y 座標
DWORD dwRop // ラスタオペレーションコード
)")
●窓ハンドル画像転送({整数}コピー元ハンドルを{整数}コピー先ハンドルへ)
  WHとは配列コピー先ハンドルの窓ハンドル内サイズ取得。
  Wとは整数WH\0,2。Hとは整数WH\0,3。
  BitBlt(コピー先ハンドル,0,0,W,H,コピー元ハンドル,0,0,$00CC0020)
#-----------------------------------------------------------

 本来なら、プレビューウィンドウに実際に表示するものは、スクリーンセーバー本体と同じようなのを動かしておくものだけど、は単に表示するだけのモノにしてある

 だって、もともとデスクトップマスコットにでもしてみようってんで作り始めたものだもんで、キャラもセリフもみんなフォームだしねぇ~;

 だいたい、吹き出しに文字が出るってだけで、実際の動きはほとんどないから、ミニ画面にしてしまったら何が何だか分からないもね~;;

 本来の役割だったハズの、焼き付き防止の役には全く立たない

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20161124