基本的に、オブジェクトのウィンドウサイズは、横 64 x 縦 24 です。
フォントのサイズ・フォント名については、環境に左右される為、確定値はないと思います。
以下取得のモジュールとサンプルです。
#module Helper_DODEKANANMIN
#uselib "user32.dll"
#cfunc _SendMessage "SendMessageA" int,int,int,int
#func _GetWindowRect "GetWindowRect" int,var
#uselib "gdi32.dll"
#cfunc _GetObject "GetObjectA" int,int,var
#define WM_GETFONT 0x0031
#define LOGFONT_SIZE 60
/*------------------------------------------------------------------
フォント情報を取得します。(モジュール内部命令)
GetFontInfo p1,p2,p3,p4
p1 : 調べたいオブジェクトのID
p2 : 結果のフォント幅が代入される変数(INT)
p3 : 結果のフォント高さが代入される変数(INT)
p4 : 結果のフォント名が代入される変数(STR)
(事前に 32バイト以上の文字列型変数を用意してください)
------------------------------------------------------------------*/
#deffunc GetFontInfo int HFont,array WIDTHINFO,array HEIGHTINFO,array FONTNAMEINFO
//フォントハンドルが取得できた場合、フォント情報を取得する
dim LogFontInfo,60 / 4
if (_GetObject(HFont,LOGFONT_SIZE,LogFontInfo) == 0){
//フォント情報が取得できなかった場合、stat に -1 を代入
return -1
}
//フォント情報が取得できた場合、命令引数の変数に情報をコピーする
memcpy WIDTHINFO,LogFontInfo,4,0,4 //幅
memcpy HEIGHTINFO,LogFontInfo,4,0,0 //高さ
memcpy FONTNAMEINFO,LogFontInfo,32,0,28 //フォント名(32Byte 固定)
//ほかにも取得できる情報があるけど、詳しくは LOGFONT と検索してね。
return 0
/*------------------------------------------------------------------
ウィンドウのフォント情報を取得します。(HSP 専用)
GetWindowFontInfo p1,p2,p3,p4
p1 : 調べたいウィンドウのID
p2 : 結果のフォント幅が代入される変数(INT)
p3 : 結果のフォント高さが代入される変数(INT)
p4 : 結果のフォント名が代入される変数(STR)
(事前に 32バイト以上の文字列型変数を用意してください)
------------------------------------------------------------------*/
#deffunc GetWindowFontInfo int ReqWNDID,array WIDTHINFO,array HEIGHTINFO,array FONTNAMEINFO
//現在の操作先ウィンドウを変更する(ReqWNDID)
OldWndID = ginfo(3) //現在の操作先を記憶する
gsel ReqWNDID
//要求されたウィンドウID の BMSCR 情報を作る
mref WndBMSCR,67
//BMSCR 構造体から直接フォントハンドルを取得する
HFont = WndBMSCR(38) //現在設定されているフォントハンドル
OldHFont = WndBMSCR(39) //オリジナルのフォントハンドル
//現在設定されているフォントハンドルが存在する場合、そっちを優先させる
ReqHFont = OldHFont
if (HFont ! 0) : ReqHFont = HFont
GetFontInfo ReqHFont,WIDTHINFO,HEIGHTINFO,FONTNAMEINFO
gsel OldWndID
return 0
/*------------------------------------------------------------------
オブジェクトのフォント情報を取得します。(HSP 専用)
GetObjectFontInfo p1,p2,p3,p4
p1 : 調べたいオブジェクトのID
p2 : 結果のフォント幅が代入される変数(INT)
p3 : 結果のフォント高さが代入される変数(INT)
p4 : 結果のフォント名が代入される変数(STR)
(事前に 32バイト以上の文字列型変数を用意してください)
------------------------------------------------------------------*/
#deffunc GetObjectFontInfo int ReqWNDID,array WIDTHINFO,array HEIGHTINFO,array FONTNAMEINFO
ObjPointer = objinfo(ReqWNDID,1) //オブジェクトのBMSCR構造体ポインタを取得
if (ObjPointer == 0) : return -1
//オブジェクトのBMSCR構造体ポインタを用いてアクセス用変数を作る
dupptr ObjBMSCR,ObjPointer,176 * 4,4
//BMSCR 構造体から直接フォントハンドルを取得する
HFont = ObjBMSCR(38) //現在設定されているフォントハンドル
OldHFont = ObjBMSCR(39) //オリジナルのフォントハンドル
//現在設定されているフォントハンドルが存在する場合、そっちを優先させる
ReqHFont = OldHFont
if (HFont ! 0) : ReqHFont = HFont
GetFontInfo ReqHFont,WIDTHINFO,HEIGHTINFO,FONTNAMEINFO
return 0
/*------------------------------------------------------------------
ウィンドウのサイズ情報を取得します。
GetWindowSize p1,p2,p3
p1 : 調べたいウィンドウのハンドル
p2 : 結果のウィンドウサイズ(幅)が代入される変数(INT)
p3 : 結果のウィンドウサイズ(高さ)が代入される変数(INT)
(注意 : WindowsVista 以降の DWM を考慮するウィンドウサイズには
対応していませんのでご注意ください)
------------------------------------------------------------------*/
#deffunc GetWindowSize int ReqHWND,array WIDTHINFO,array HEIGHTINFO
dim WindowRect,4
_GetWindowRect ReqHWND,WindowRect
WIDTHINFO = WindowRect(2) - WindowRect(0)
HEIGHTINFO = WindowRect(3) - WindowRect(1)
return 0
#global
//共通変数初期化
sdim FontName,64
//ボタンの基本情報を作成・取得
button gosub "テスト",*Dammy
ObjectID = stat
ObjectHWND = objinfo(ObjectID,2)
//ウィンドウのサイズ
mes "ウィンドウのウィンドウサイズ (X) : "+ginfo(10)
mes "ウィンドウのウィンドウサイズ (Y) : "+ginfo(11)
//ウィンドウのフォントサイズ
GetWindowFontInfo ginfo(3),FontWidth,FontHeight,FontName
if (stat == -1) : mes "ウィンドウのフォント情報を正しく取得できませんでした"
mes "ウィンドウのフォント(幅) : "+FontWidth+" ←※1"
mes "ウィンドウのフォント(高さ) : "+FontHeight+" ←※2 これがサイズ"
mes "ウィンドウのフォントの名前 : "+FontName
mes "(※1 : 基本的に高さに基いて自動処理される為、通常は 0 です)"
mes "(※2 : マイナスはフォント情報内部処理用です。実際は正の数です。)\n"
//ボタンのウィンドウサイズを取得
GetWindowSize ObjectHWND,WndSize_X,WndSize_Y
mes "ボタンのウィンドウサイズ (X) : "+WndSize_X
mes "ボタンのウィンドウサイズ (Y) : "+WndSize_Y
//ボタンのフォントサイズ
GetObjectFontInfo ObjectID,FontWidth,FontHeight,FontName
if (stat == -1) : mes "ボタンのフォント情報を正しく取得できませんでした"
mes "ボタンのフォント(幅) : "+FontWidth+" ←※1"
mes "ボタンのフォント(高さ) : "+FontHeight+" ←※2 これがサイズ"
mes "ボタンのフォントの名前 : "+FontName
mes "(※1 : 基本的に高さに基いて自動処理される為、通常は 0 です)"
mes "(※2 : マイナスはフォント情報内部処理用です。実際は正の数です。)"
stop
*Dammy
return