ボタンの真下の座標がうまくとれない

解決


たかみちえ  URL  2002-05-06 20:13:11  No: 75577  IP: [192.*.*.*]

"ブラウザ風のボタンを作りたい"の質問に関係あることなんですけど、
ユーザーコントロールの真下にある画像をbitbltで転送しようとしたんですけど、

  Dim DC As Long, rc As RECT, rc2 As RECT
  GetWindowRect UserControl.hWnd, rc:GetWindowRect ContainerHwnd, rc2
  DC = GetDC(ContainerHwnd)
  With UserControl
    'いったん隠す
    ShowWindow .hWnd, vbHide:DoEvents
    BitBlt .hDC, 0, 0, ScaleWidth, ScaleHeight, DC, rc.Left - rc2.Left, rc.Top - rc2.Top, vbSrcCopy
    ShowWindow .hWnd, vbNormalNoFocus
  End With
  ReleaseDC ContainerHwnd, DC
  こういうふうにやると、背景はしっかり転送されるんですけど、少しずれてしまいます。

  計算すればなんとかなると思いますけど、どういう計算をすればいいのか…。
おしえてください。おねがいします。

編集 削除
こころ  URL  2002-05-11 00:56:44  No: 75578  IP: [192.*.*.*]

GetDCでとれるデバイスに書き込むと
ウィンドウの一番左上からになると思います。
(フォームとかでやるとわかりやすい・・・)

んで、これを解決するにはウィンドウのクライアント領域を取得して
その分だけオフセットしてあげればいいと。
GetClientRectやClientToScreen,GetWindowRectを利用して
こころなんかは算出しています。

編集 削除
たかみちえ  URL  2002-05-12 21:25:08  No: 75579  IP: [192.*.*.*]

なるほどそうなんですかぁ、
クライアントサイズとかについても分かったし、いろいろ勉強になります。
ありがとうございました。

編集 削除
たかみちえ  URL  2002-05-12 21:25:39  No: 75580  IP: [192.*.*.*]

押し忘れました^^;

編集 削除