投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/6/6 21:15:10
ごめんなさい。一部訂正します。

[2021/6/6 18:39:36]への訂正
>> #Else
>> Private Declare PtrSafe Function CreateDCW Lib ……

VBA7 未満での PtrSafe は余計でしたね。
取り除いておいてください。


[2021/6/6 18:40:17]への訂正と追記
> ' OLE_COLOR … 00BBGGRR な 24bit 色(もしくは 800000nn で管理されるシステム色) 
> ' COLORREF  … 00RRGGBB な 24bit 色 
> ' ARGB      … AARRGGBB な 32bit 色

書き間違い。orz
COLORREF は 00RRGGBB ではなく 00BBGGRR です!
(なので、ActiveCell.Interior.Color にもそのまま渡せます)

GetPixel の戻り値を意図的に As OLE_COLOR と書いたのも、
VB の 24bit 色と同じ並びであるからのことだったのに、我ながら何やってんだろう…。orz


> あと、Long と LongPtr の使い分けに統一感が無いので、そこも整理した方が良さそうです。

32bit 環境だと、Long も LongPtr も OLE_HANDLE も差が無いのですが、
64bit 環境だと意味合いが変わってきます。

自分の場合、VBA でハンドルやポインタを扱うときは
 VBA7 以降 … As LongPtr   (32bit なら As Long 相当、64bit なら As LongLong 相当)
 VBA7 未満 … As OLE_HANDLE (As Long と同義だが、意図的にこうしている)
で統一するようにしています。

なお、HBITMAP や HICON は void* 相当であるため、
Win32 では 32bit サイズ、Win64 では 64bit サイズですが、
OLE_HANDLE は Win32/Win64 いずれでも 32bit サイズなので注意。