ホーム › UI.Controls.RichEdit › FORMATRANGE
FORMATRANGE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| hdc | HDC | 8/4 | +0 | +0 | EM_FORMATRANGE を使用して出力をデバイスへ送る場合に、描画先となるデバイスの HDC です。 |
| hdcTarget | HDC | 8/4 | +8 | +4 | 整形の対象となるデバイスの HDC です。 |
| rc | RECT | 16 | +16 | +8 | rcPage の矩形内で描画する領域です。単位は twip です。 |
| rcPage | RECT | 16 | +32 | +24 | 描画デバイス上のページ全体の領域です。単位は twip です。 |
| chrg | CHARRANGE | 8 | +48 | +40 | 整形する文字の範囲です。 |
公式ドキュメント
リッチ エディット コントロールが特定のデバイス向けに出力を整形するために使用する情報です。この構造体は EM_FORMATRANGE メッセージと共に使用します。
解説(Remarks)
hdcTarget には整形の対象となる HDC を格納します。通常は hdc で指定した HDC と同じですが、異なる場合もあります。たとえば印刷プレビュー モジュールを作成する場合、hdc は出力を表示するウィンドウの HDC となり、hdcTarget はプリンターの HDC となります。
rc と rcPage の値は GetDeviceCaps を使用して取得できます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 変数を確保