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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0303
begriffPrintWindowの仕様…?3解決


begriff

リンク

2008/3/3(Mon) 10:32:08|NO.13875

PrintWindowを使ってウィンドウをコピーするとき、コピーしたい対象のウィンドウの非クライアントサイズ分だけXYにずれます。
しかしコピーしているサイズはウィンドウのサイズ(非クライアントサイズを含んでいるかはちょっとわからない)はそのままなので途切れてしまいます。解決策はありますでしょうか。ご教授お願いします。


#module #uselib "user32" #func PrintWindow "PrintWindow" sptr , sptr , int #deffunc copy_window_xp int b,int a gsel a hwnd0 = hwnd gsel b PrintWindow hwnd0 , hdc ,1 redraw 1 return #global #module #uselib "user32.dll" #func CreateMenu "CreateMenu" #func CreatePopupMenu "CreatePopupMenu" #func AppendMenu "AppendMenuA" int, int, int, str #func SetMenu "SetMenu" int, int #func GetMenuItemRect "GetMenuItemRect" int, int, int, sptr #func DrawMenuBar "DrawMenuBar" int #func DestroyMenu "DestroyMenu" int #deffunc menubar str menu1,var hm menu=menu1 b="" tag_(0)="" i=0:l=0 notesel menu sindo=1 CreateMenu id=stat hm=id hmenupar=id hmenu_(sindo)=id while(i<=notemax) noteget b,i koro=instr(b,0,":") if koro!-1{ kako=gen gen=0 tag="" if ":"=strmid(b,koro+1,1){ tag=strmid(b,koro+2,strlen(b)-koro-2) gosub *kai gen=1 }else:if ">"=strmid(b,koro+1,1){ gosub *kai gen=2 }else:if "<"=strmid(b,koro+1,1){ gosub *kai gen=3 }else:if "-"=strmid(b,koro+1,1){ gosub *kai gen=4 } if gen=1&&tugi=2{ tag_(sindo)=tag } if gen=1&&tugi!2{ l+ AppendMenu Hmenu_(sindo),0,l,tag } if gen=4&&tugi!2{ AppendMenu Hmenu_(sindo),$800,$0,"" } if gen=2&&kako=1{ sindo+ CreatePopupMenu id=stat hmenu_(sindo)=id } if gen=3{ sindo- if sindo<1:sindo=1:else{ AppendMenu Hmenu_(sindo),$10,hmenu_(sindo+1),tag_(sindo) } } } i+ wend SetMenu hwnd,hmenupar DrawMenuBar hwnd dim rect,4 GetMenuItemRect hwnd, hm,0,varptr(rect) return rect(3)-rect(1) *kai ii=i+1 tugi=0 while(ii<=notemax&&flag=0) noteget b,ii koro=instr(b,0,":") if koro!-1{ if ":"=strmid(b,koro+1,1){ flag=1 tugi=1 }else:if ">"=strmid(b,koro+1,1){ flag=1 tugi=2 }else:if "<"=strmid(b,koro+1,1){ flag=1 tugi=3 }else:if "-"=strmid(b,koro+1,1){ flag=1 tugi=4 } } ii+ wend flag=0 return #deffunc delmenu int hm_; SetMenu hwnd,0 DestroyMenu hm_ DrawMenuBar hwnd mes hm_ return #global bgscr 3,200,100 ;screen 3 width ,,40,40 syscolor 15 boxf color wait 100 mm={"::ok :> ::h :< ::h "} menubar mm,ll//メニューバー配置 *k wait 100 mes stat gsel 0 color 255,255,255 boxf pos 0,0 copy_window_xp 0,3 gsel 0,1 if l=1{ color pos 12,262 sysfont 17 mes "非クライアントサイズ分だけコピーされたウィンドウがずれている" mes "コピーしているサイズは非クライアント領域も含めたウィンドウサイズ?含んでないかも" mes "したがって中途半端なところで途切れる・・・?" stop } wait 500 screen 3,400,250 delmenu ll l=1 goto *k



この記事に返信する


begriff

リンク

2008/3/3(Mon) 21:59:57|NO.13890

ウィンドウがずれてコピーされるのはバグなのでしょうかね…
PrintWindowに関してはMSDNでも詳しい説明は日本語ではされていませんよね。(T.T



begriff

リンク

2008/3/3(Mon) 22:31:18|NO.13891

PrintWindowの第三引数をPW_CLIENTONLY(=1)を0にしたら理想の動作をしてくれました。
お騒がせしました。

関係ないですが。
メニュー簡易配置モジュール(笑) を改良しましたのでどうぞお使いください。
(何が変わったかっていうとまぁ…アレですね"さっぱり"?まっ いっか。)

#module #uselib "user32.dll" #cfunc CreateMenu "CreateMenu" #cfunc CreatePopupMenu "CreatePopupMenu" #func AppendMenu "AppendMenuA" int, int, int, str #func SetMenu "SetMenu" int, int #func GetMenuItemRect "GetMenuItemRect" int, int, int, sptr #func DrawMenuBar "DrawMenuBar" int #func DestroyMenu "DestroyMenu" int #deffunc menubar str menu1,var hm menu=menu1:b="":tag_(0)="":i=0:l=0:sindo=1 sdim tag,64,2:dim ct,3:dim rect,4 notesel menu id=CreateMenu() hm=id:hmenupar=id:hmenu_(sindo)=id repeat -1 noteget b,i:kk=instr(b,0,":") if kk!-1|i=notemax+1{ ct(2)=ct(1):ct(1)=ct(0):tag(1)=tag(0):h=0:k=strmid(b,kk+1,1) if ":"=k:tag(0)=strmid(b,kk+2,strlen(b)-kk-2):ct(0)=1:h=1 if "{"=k:ct(0)=2:h=1 if "}"=k:ct(0)=3:h=1 if "-"=k:ct(0)=4:h=1 if h=0&&i!notemax+1:i+:continue if ct(1)=0:i+:continue if ct(1)=1&&ct(0)=2:tag_(sindo)=tag(1) if ct(1)=1&&ct(0)!2:l+:AppendMenu Hmenu_(sindo),0,l,tag(1) if ct(1)=4&&ct(0)!2:AppendMenu Hmenu_(sindo),$800,$0,"" if ct(1)=2&&ct(2)=1:sindo+:hmenu_(sindo)=CreatePopupMenu() if ct(1)=3:sindo-:if sindo<1:sindo=1:else:AppendMenu Hmenu_(sindo),$10,hmenu_(sindo+1),tag_(sindo) } i+:if i=notemax+2:break loop SetMenu hwnd,hmenupar DrawMenuBar hwnd GetMenuItemRect hwnd,hm,0,varptr(rect) return rect(3)-rect(1) #deffunc delmenu int hm_ SetMenu hwnd,0 DestroyMenu hm_ DrawMenuBar hwnd mes hm_ return #global menu={" ::ファイル :{ ::新規(&N)\t ::開く(&O)...\tCtrl+O ::上書き保存(&S)\tCtrl+S ::名前を付けて保存(&A)... :- ::印刷(P)...\tCtrl+P :- ::終了(&X)\tCtrl+Q :} ::編集 "} menubar menu,hm



begriff

リンク

2008/3/3(Mon) 23:17:39|NO.13895

チェック忘れ



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