ホーム › UI.Controls.RichEdit › FORMATRANGE
FORMATRANGE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| hdc | HDC | 8/4 | +0 | +0 | 描画先のデバイスコンテキスト。通常はプリンタのDCを指定する。 |
| hdcTarget | HDC | 8/4 | +8 | +4 | 書式設定の基準となるターゲットデバイスのDCである。 |
| rc | RECT | 16 | +16 | +8 | 描画する領域を1000分の1インチ単位(twips相当)で指定するRECTである。 |
| rcPage | RECT | 16 | +32 | +24 | 用紙全体の領域を1000分の1インチ単位で指定するRECTである。 |
| chrg | CHARRANGE | 8 | +48 | +40 | 印刷または描画する文字範囲を指定するCHARRANGEである。 |
各言語での定義
#include <windows.h>
// RECT (x64 16 / x86 16 バイト)
typedef struct RECT {
INT left;
INT top;
INT right;
INT bottom;
} RECT;
// CHARRANGE (x64 8 / x86 8 バイト)
typedef struct CHARRANGE {
INT cpMin;
INT cpMax;
} CHARRANGE;
// FORMATRANGE (x64 56 / x86 48 バイト)
typedef struct FORMATRANGE {
HDC hdc;
HDC hdcTarget;
RECT rc;
RECT rcPage;
CHARRANGE chrg;
} FORMATRANGE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CHARRANGE
{
public int cpMin;
public int cpMax;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FORMATRANGE
{
public IntPtr hdc;
public IntPtr hdcTarget;
public RECT rc;
public RECT rcPage;
public CHARRANGE chrg;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RECT
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CHARRANGE
Public cpMin As Integer
Public cpMax As Integer
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FORMATRANGE
Public hdc As IntPtr
Public hdcTarget As IntPtr
Public rc As RECT
Public rcPage As RECT
Public chrg As CHARRANGE
End Structureimport ctypes
from ctypes import wintypes
class RECT(ctypes.Structure):
_fields_ = [
("left", ctypes.c_int),
("top", ctypes.c_int),
("right", ctypes.c_int),
("bottom", ctypes.c_int),
]
class CHARRANGE(ctypes.Structure):
_fields_ = [
("cpMin", ctypes.c_int),
("cpMax", ctypes.c_int),
]
class FORMATRANGE(ctypes.Structure):
_fields_ = [
("hdc", ctypes.c_void_p),
("hdcTarget", ctypes.c_void_p),
("rc", RECT),
("rcPage", RECT),
("chrg", CHARRANGE),
]#[repr(C)]
pub struct RECT {
pub left: i32,
pub top: i32,
pub right: i32,
pub bottom: i32,
}
#[repr(C)]
pub struct CHARRANGE {
pub cpMin: i32,
pub cpMax: i32,
}
#[repr(C)]
pub struct FORMATRANGE {
pub hdc: *mut core::ffi::c_void,
pub hdcTarget: *mut core::ffi::c_void,
pub rc: RECT,
pub rcPage: RECT,
pub chrg: CHARRANGE,
}import "golang.org/x/sys/windows"
type RECT struct {
left int32
top int32
right int32
bottom int32
}
type CHARRANGE struct {
cpMin int32
cpMax int32
}
type FORMATRANGE struct {
hdc uintptr
hdcTarget uintptr
rc RECT
rcPage RECT
chrg CHARRANGE
}type
RECT = record
left: Integer;
top: Integer;
right: Integer;
bottom: Integer;
end;
CHARRANGE = record
cpMin: Integer;
cpMax: Integer;
end;
FORMATRANGE = record
hdc: Pointer;
hdcTarget: Pointer;
rc: RECT;
rcPage: RECT;
chrg: CHARRANGE;
end;const RECT = extern struct {
left: i32,
top: i32,
right: i32,
bottom: i32,
};
const CHARRANGE = extern struct {
cpMin: i32,
cpMax: i32,
};
const FORMATRANGE = extern struct {
hdc: ?*anyopaque,
hdcTarget: ?*anyopaque,
rc: RECT,
rcPage: RECT,
chrg: CHARRANGE,
};type
RECT {.bycopy.} = object
left: int32
top: int32
right: int32
bottom: int32
CHARRANGE {.bycopy.} = object
cpMin: int32
cpMax: int32
FORMATRANGE {.bycopy.} = object
hdc: pointer
hdcTarget: pointer
rc: RECT
rcPage: RECT
chrg: CHARRANGEstruct RECT
{
int left;
int top;
int right;
int bottom;
}
struct CHARRANGE
{
int cpMin;
int cpMax;
}
struct FORMATRANGE
{
void* hdc;
void* hdcTarget;
RECT rc;
RECT rcPage;
CHARRANGE chrg;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; FORMATRANGE サイズ: 48 バイト(x86)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; hdc : HDC (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hdcTarget : HDC (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; rc : RECT (+8, 16byte) varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; rcPage : RECT (+24, 16byte) varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; chrg : CHARRANGE (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FORMATRANGE サイズ: 56 バイト(x64)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; hdc : HDC (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; hdcTarget : HDC (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; rc : RECT (+16, 16byte) varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; rcPage : RECT (+32, 16byte) varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; chrg : CHARRANGE (+48, 8byte) varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global RECT
#field int left
#field int top
#field int right
#field int bottom
#endstruct
#defstruct global CHARRANGE
#field int cpMin
#field int cpMax
#endstruct
#defstruct global FORMATRANGE
#field intptr hdc
#field intptr hdcTarget
#field RECT rc
#field RECT rcPage
#field CHARRANGE chrg
#endstruct
stdim st, FORMATRANGE ; NSTRUCT 変数を確保