HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0203
begriff親・子 ウィンドウの設定について8解決


begriff

リンク

2008/2/3(Sun) 14:53:00|NO.13396

ウィンドウのキャプチャについて暗中模索しているのですが、
SetParentでウィンドウの親子関係を設定してキャプションしてみたのですが
子ウィンドウの部分が無視されてしまいます。
オブジェクトがキャプションされているところを見ると、
同じ子ウィンドウのはずなのに結果が異なってきます。
GetParentで設定したウィンドウの親を調べたところエラーの0を返してきました。
画面上は親子関係が設定されたはずだと思うですが、どこが間違っているのでしょうか。

#module
#include "gdi32.as"
#define WM_PRINT 0x0317
#define WM_PRINTCLIENT 0x0318
#define SRCCOPY 0x00CC0020
#define PRF_CHECKVISIBLE 0x00000001
#define PRF_NONCLIENT 0x00000002
#define PRF_CLIENT 0x00000004
#define PRF_ERASEBKGND 0x00000008
#define PRF_CHILDREN 0x00000010
#define PRF_OWNED 0x00000020
#deffunc copy_window int b1,int a1
a=a1
b=b1
gsel a
oncmd gosub *cmd_pricli,WM_PRINTCLIENT
hwnd_a=hwnd
gsel b
sendmsg hwnd_a,WM_PRINT,hdc,PRF_NONCLIENT|PRF_CLIENT|PRF_CHILDREN|PRF_OWNED
redraw
return
*cmd_pricli
if ginfo_intid!a:return
sel=ginfo_sel
gsel a
BitBlt wParam,0,0,ginfo_winx,ginfo_winy,hdc,0,0,SRCCOPY
gsel sel
return
#global

#uselib "user32.dll"
#func SetParent "SetParent" int,int
#cfunc GetParent "GetParent" int
id=hwnd
button "OK",*f
mes "OK OK ok"
screen 5
bgscr 3,400,400
color 255
boxf
bgscr 4,300,300
color ,255,
boxf

gsel 3
width ,,50,50
id2=hwnd
SetParent hwnd,id

gsel 4
width ,,50,50
SetParent hwnd,id2
;dialog ""+GetParent(hwnd)
wait 100

copy_window 5,0
*f



この記事に返信する


たこ

リンク

2008/2/3(Sun) 16:19:03|NO.13398

使用している関数をGetLastErrorで調べましたが、すべて正しく終了していました。
GetParentが0を返すのはエラーが発生した時と
"指定したウィンドウがトップレベルのオーナーを持たないウィンドウだった場合"
だそうです

原因はSetParent を使っていることだとおもいます
SetParent は描画する命令ではないので…
gcopy やら BitBlt を使えばなおると思います

説明下手ですみません



begriff

リンク

2008/2/3(Sun) 17:17:43|NO.13399

返答ありがとうございます。

なるほど。
つまり親子関係が正しく設定されてないということですか。
今は例としてウィンドウに対して親子関係を設定しようとしましたが、
実際使うときには タブコントロールに子ウィンドウを貼り付けるのでgcopyなどはつかえないと思います。
オブジェクトも子ウィンドウですよね きっと
そこの差はいったい...?

いい解決法はないですかね…



a

リンク

2008/2/3(Sun) 19:35:55|NO.13401

親子関係の方は、SetParentして子ウインドウにしたんだから
ウインドウスタイルを子ウインドウ用に変更。
WS_POPUPを外して、WS_CHILDを加える。

キャプチャの方は、よくわからないけど、
メモリデバイスコンテキストな事が関係してるのかな?



begriff

リンク

2008/2/3(Sun) 20:19:30|NO.13405

ありがとうございます
試しに
SetWindowLong hwnd, -16, $50000000;(WS_CHILD|WS_VISIBLE)
を追加してみましたが変わりないようです。
しかし
dialog ""+GetParent(hwnd)
は反応してくれました。



begriff

リンク

2008/2/4(Mon) 00:11:36|NO.13407

子ウィンドウにしただけではオブジェクトと同じ振る舞いをしてくれないのでしょうか
もしくは子ウィンドウにする過程で間違っているのでしょうか



naznyark

リンク

2008/2/4(Mon) 02:00:23|NO.13409

スクリーン3、4が WM_PRINTCLIENT メッセージを
処理していないからです。

#module #include "gdi32.as" #define WM_PRINT 0x0317 #define WM_PRINTCLIENT 0x0318 #define SRCCOPY 0x00CC0020 #define PRF_CHECKVISIBLE 0x00000001 #define PRF_NONCLIENT 0x00000002 #define PRF_CLIENT 0x00000004 #define PRF_ERASEBKGND 0x00000008 #define PRF_CHILDREN 0x00000010 #define PRF_OWNED 0x00000020 #deffunc ready oncmd gosub *cmd_pricli, WM_PRINTCLIENT return *cmd_pricli sel = ginfo_sel gsel ginfo_intid BitBlt wParam, 0, 0, ginfo_winx, ginfo_winy, hdc, 0, 0, SRCCOPY gsel sel return #deffunc copy_window int b1,int a1 a=a1 b=b1 gsel a hwnd_a=hwnd gsel b sendmsg hwnd_a,WM_PRINT,hdc,PRF_NONCLIENT|PRF_CLIENT|PRF_CHILDREN|PRF_OWNED redraw return #global #uselib "user32.dll" #func SetParent "SetParent" int,int #cfunc GetParent "GetParent" int #func SetWindowLong "SetWindowLongA" int, int, int ready id=hwnd button "OK",*f mes "OK OK ok" screen 5 bgscr 3,400,400 ready color 255 boxf bgscr 4,300,300 ready color ,255, boxf gsel 3 width ,,50,50 id2=hwnd SetWindowLong hwnd, -16, $50000000 SetParent hwnd,id gsel 4 width ,,50,50 SetWindowLong hwnd, -16, $50000000 SetParent hwnd,id2 wait 100 copy_window 5,0 *f



begriff

リンク

2008/2/4(Mon) 03:00:54|NO.13410

お早い返答ありがとうございます
ご指摘並びスプリクトありがとうございます。

皆様のお力添えのおかげで問題を乗り越えることができました。
ありがとうございます。



ゆう

リンク

2008/2/9(Sat) 17:02:20|NO.13470

ボタンを使ったツリー形式の方法を教えてくれませんか?
ツリー形式というのは、ブラウザのKIKI、
スレイプニアー、ルナエスケープのようなものです。
;----------------------------------------------
ひらがな-あ-い
      -う 
      -え   
      -お
    -か
    -さ
    -た
    -な
;----------------------------------------------
こんな感じのやつです
ピラミッド形式にしらべものができるようなものつくりたいんです



ONION software Copyright 1997-2023(c) All rights reserved.