Win32 API 日本語リファレンス
ホームUI.Controls.RichEdit › FORMATRANGE

FORMATRANGE

構造体
サイズx64: 56 バイト / x86: 48 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
hdcHDC8/4+0+0描画先のデバイスコンテキスト。通常はプリンタのDCを指定する。
hdcTargetHDC8/4+8+4書式設定の基準となるターゲットデバイスのDCである。
rcRECT16+16+8描画する領域を1000分の1インチ単位(twips相当)で指定するRECTである。
rcPageRECT16+32+24用紙全体の領域を1000分の1インチ単位で指定するRECTである。
chrgCHARRANGE8+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 Structure
import 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: CHARRANGE
struct 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 変数を確保