投稿者 snowmansnow  (社会人) 投稿日時 2021/2/28 16:59:40
こんにちは、魔界の仮面弁士様
なかなかうまくいかず、遅くなってしまい、申し訳ございません。

①座標変換は、出来るようになりました。(下記)
  他の方々がやっているように、重ね合わせがしたかったです。
  何か触ると消えてしまいますが、触らなければ、追加情報が手に入るから。と思っております。
  WM_PAINT メッセージは、面白そうだなぁと思いましたが、
   VBAでの使い方がわからず、また、その後の対策?(再描画?)もわからなそうでした。

②今回は、たぶん、form1を取得してると思うのですが、strokeの座標系は、inkpicture2だと思われるので、
  上部タイトルや、左枠線分ずれていると思われます。
  inkpicture2のデバイスコンテキストが取得できるのか、わからないですし、
  将来、他のアプリ?などに、重ね合わせて、転記して表示する、DCの取得方法もわかりません。

③ズレは、私の環境の、ストローク座標で、目検offsetX = 390、offsetY = 1020だと思われました。

④ReleaseDC 0, hDCだと、重ね合わせは消えるのですが、
 ReleaseDC hTargetWin, hDCだと、重ね合わせが消えない事を表現しようと思いました。
 それを、「Draw メソッドが消えない。(リリースできない?)ようでした。」と記載しました。

 ①は、出来るようになりましたので、他の方用にコードを記載いたします。
   
  アトリビュートのコピーがうまくいってなくて、
  下記の前のバージョン(createstrokeなど)では、boundingboxが、丸くなる症状が出てしまってましたが、
  今回は、うまくコピーできてるようでした。

 前回、言葉足らずだったり、表現が悪く申し訳ございませんでした。
 あきれずに、また宜しくお願いします。

Private Sub CommandButton46_Click()

Dim inkP As New MSINKAUTLib.InkPicture
Dim strokesm As MSINKAUTLib.InkStrokes
Dim offsetX As Single
Dim offsetY As Single

offsetX = 390
offsetY = 1020

Set combinedInk = inkP.ink

Set strokesm = InkPicture2.ink.strokes
iret = combinedInk.AddStrokesAtRectangle(strokesm, strokesm.GetBoundingBox())
inkP.ink.strokes.Move offsetX, offsetY
inkP.AutoRedraw = True

  For st = 0 To InkPicture2.ink.strokes.Count - 1
  Set inkP.ink.strokes.Item(st).DrawingAttributes = InkPicture2.ink.strokes.Item(st).DrawingAttributes
  Next
   Dim r As IInkRenderer
    Set r = New InkRenderer
    Dim hDC As LongPtr
    hDC = GetDC(0)
    r.Draw hDC, inkP.ink.strokes
     ReleaseDC 0, hDC

End Sub