panewindow.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "pch.h"
  2. /////////////////////////////////////////////////////////////////////////////
  3. //
  4. // TopPaneSiteImpl
  5. //
  6. /////////////////////////////////////////////////////////////////////////////
  7. class WindowTopPaneSiteImpl : public TopPaneSite {
  8. private:
  9. PaneWindow* m_pwindow;
  10. public:
  11. WindowTopPaneSiteImpl(PaneWindow* pwindow) :
  12. m_pwindow(pwindow)
  13. {
  14. }
  15. Point TransformLocalToImage(const Point& point)
  16. {
  17. return m_pwindow->TransformLocalToImage(point);
  18. }
  19. void SurfaceChanged()
  20. {
  21. m_pwindow->PaneSurfaceChanged();
  22. }
  23. void SizeChanged()
  24. {
  25. m_pwindow->PaneSizeChanged();
  26. }
  27. };
  28. /////////////////////////////////////////////////////////////////////////////
  29. //
  30. // PaneWindow
  31. //
  32. /////////////////////////////////////////////////////////////////////////////
  33. const WPARAM IDD_SizeChanged = 0;
  34. const WPARAM IDD_SurfaceChanged = 1;
  35. PaneWindow::PaneWindow(
  36. Window* pwindow,
  37. Engine* pengine,
  38. Pane* ppane,
  39. SurfaceType stype
  40. ) :
  41. ChildWindow(
  42. pwindow,
  43. WinRect(0, 0, 0, 0)
  44. ),
  45. m_pengine(pengine)
  46. {
  47. m_ptopPane =
  48. new TopPane(
  49. pengine,
  50. stype,
  51. false,
  52. new WindowTopPaneSiteImpl(this),
  53. ppane
  54. );
  55. SetMouseInput(m_ptopPane);
  56. UpdateSize();
  57. }
  58. void PaneWindow::SetPane(Pane* ppane)
  59. {
  60. m_ptopPane->RemoveAllChildren();
  61. m_ptopPane->InsertAtTop(ppane);
  62. UpdateSize();
  63. }
  64. Point PaneWindow::TransformLocalToImage(const Point& point)
  65. {
  66. return point;
  67. }
  68. void PaneWindow::UpdateSize()
  69. {
  70. SetClientSize(m_ptopPane->GetSurfaceSize());
  71. }
  72. void PaneWindow::PaneSizeChanged()
  73. {
  74. PostMessage(WM_COMMAND, IDD_SizeChanged, 0);
  75. }
  76. void PaneWindow::PaneSurfaceChanged()
  77. {
  78. PostMessage(WM_COMMAND, IDD_SurfaceChanged, 0);
  79. }
  80. bool PaneWindow::OnCommand(WPARAM wParam, LPARAM lParam)
  81. {
  82. switch(wParam) {
  83. case IDD_SizeChanged:
  84. UpdateSize();
  85. return true;
  86. case IDD_SurfaceChanged:
  87. //InvalidateRgn();
  88. HDC hdc = GetDC();
  89. OnPaint(hdc, WinRect(WinPoint(0, 0), GetClientRect().Size()));
  90. ReleaseDC(hdc);
  91. return true;
  92. }
  93. return false;
  94. }
  95. void PaneWindow::OnPaint(HDC hdc, const WinRect& rect)
  96. {
  97. Surface* psurface = m_ptopPane->GetSurface();
  98. m_pengine->BltToWindow(
  99. this,
  100. WinPoint(0, 0),
  101. psurface,
  102. WinRect(
  103. WinPoint(0, 0),
  104. psurface->GetSize()
  105. )
  106. );
  107. }