というもの(ダイアログもどきですね)を作ろうかと思い、色々ググって作りかけて
みたわけです。
画面全体にシャドウをかけたような感じが実現でき、これはカコイイと自画自賛してた
のですが……
#uselib "gdi32.dll" #cfunc CreateDC "CreateDCA" sptr,sptr,sptr,int #func DeleteDC "DeleteDC" int #func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int #define NULL 0 #define SRCCOPY 0x00CC0020 #define CAPTUREBLT 0x40000000 #include "user32.as" // setwindowlong #const WS_EX_NOACTIVATE $08000000 // クリックしてもアクティブにならない タスクバーに表示されなくなる。 #const GWL_EXSTYLE $FFFFFFEC // EXSTYLEに設定する // setwindowpos #const HWND_TOPMOST $FFFFFFFF // 最前面に設定する #const SWP_NOMOVE $00000002 // サイズ変更無効 #const SWP_NOSIZE $00000001 #const SWP_FRAMECHANGED $00000020 #define SWP_SHOWWINDOW $00000040 // 非表示でウィンドウを作成 // 画面全体をキャプチャし擬似的に半透明っぽく見せる dtX = ginfo_dispX : dtY = ginfo_dispY bgscr 0, dtX, dtY, 2, 0, 0 : cls 4 bgscr 1, dtX, dtY : gsel 1, -1 : wait 10 ; ← こいつ ; デスクトップ画面のデバイスコンテキスト取得 hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL) ; デスクトップ画面の画像をコピー BitBlt hdc, 0, 0, dtX, dtY, hdcScreen, 0, 0, SRCCOPY | CAPTUREBLT ; デバイスコンテキスト削除 DeleteDC hdcScreen ; バッファを半透明でコピー gmode gmode_alpha, dtX, dtY, 128 gcopy 0, 0, 0 // Styleを追加。 GetWindowLong hwnd,GWL_EXSTYLE SetWindowLong hwnd,GWL_EXSTYLE,stat|WS_EX_NOACTIVATE // 最前面化 ウィンドウ表示 Styleの更新を行う。 SetWindowPos hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED|SWP_SHOWWINDOW gsel 1, 1 dialog "どうね" end
27行目の「← こいつ」で示したウェイトを入れないと、画面の描画途中の
キャプチャになってしまいすっごくダサくなってしまう。しかしこのウェイト値、
0.1秒近くも待つ必要はないだろという気もするのです。
ていうか、キャプチャするときって描画完了を待てないのかなあと。
HSPの質問ってわけではないのですが、もしよろしければヒントでもご教示いただければ。
よろしくお願いいたします。(u´ω`)