home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / Dita / source / w32peer.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-14  |  3.4 KB  |  136 lines

  1. //    VirtualDub - Video processing and capture application
  2. //    Copyright (C) 1998-2004 Avery Lee
  3. //
  4. //    This program is free software; you can redistribute it and/or modify
  5. //    it under the terms of the GNU General Public License as published by
  6. //    the Free Software Foundation; either version 2 of the License, or
  7. //    (at your option) any later version.
  8. //
  9. //    This program is distributed in the hope that it will be useful,
  10. //    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. //    GNU General Public License for more details.
  13. //
  14. //    You should have received a copy of the GNU General Public License
  15. //    along with this program; if not, write to the Free Software
  16. //    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. #include <stdafx.h>
  19. #include <vd2/system/w32assist.h>
  20. #include <vd2/Dita/w32peer.h>
  21.  
  22. IVDUIWindow *VDUICreatePeer(VDGUIHandle h) {
  23.     return new VDUIPeerW32((HWND)h);
  24. }
  25.  
  26. VDUIPeerW32::VDUIPeerW32()
  27.     : mhwnd(NULL)
  28. {
  29. }
  30.  
  31. VDUIPeerW32::VDUIPeerW32(HWND hwnd)
  32.     : mhwnd(hwnd)
  33. {
  34. }
  35.  
  36. void VDUIPeerW32::Attach(HWND hwnd) {
  37.     mhwnd = hwnd;
  38. }
  39.  
  40. void VDUIPeerW32::Detach() {
  41.     mhwnd = NULL;
  42. }
  43.  
  44. void *VDUIPeerW32::AsInterface(uint32 id) {
  45.     if (id == VDUIPeerW32::kTypeID) return static_cast<VDUIPeerW32 *>(this);
  46.     if (id == IVDUIWindowW32::kTypeID) return static_cast<IVDUIWindowW32 *>(this);
  47.  
  48.     return VDUIWindow::AsInterface(id);
  49. }
  50.  
  51. void VDUIPeerW32::RelayoutChildren() {
  52.     tChildren::iterator it(mChildren.begin()), itEnd(mChildren.end());
  53.     const vduirect r(GetClientArea());
  54.  
  55.     for(; it!=itEnd; ++it) {
  56.         IVDUIWindow *pWin = *it;
  57.  
  58.         pWin->PostLayout(r);
  59.     }
  60. }
  61.  
  62. void VDUIPeerW32::SetFocus() {
  63.     if (mhwnd)
  64.         ::SetFocus(mhwnd);
  65. }
  66.  
  67. void VDUIPeerW32::SetCaption(const wchar_t *caption) {
  68.     VDUIWindow::SetCaption(caption);
  69.     VDSetWindowTextW32(mhwnd, mCaption.c_str());
  70. }
  71.  
  72. vduirect VDUIPeerW32::GetArea() {
  73.     RECT r;
  74.  
  75.     HWND hwndParent = ::GetParent(mhwnd);
  76.     GetWindowRect(mhwnd, &r);
  77.  
  78.     if (hwndParent)
  79.         MapWindowPoints(hwndParent, NULL, (LPPOINT)&r, 2);
  80.  
  81.     return vduirect(r.left, r.top, r.right, r.bottom);
  82. }
  83.  
  84. void VDUIPeerW32::SetArea(const vduirect& pos) {
  85.     SetWindowPos(mhwnd, NULL, pos.left, pos.top, pos.width(), pos.height(), SWP_NOZORDER|SWP_NOACTIVATE);
  86.     VDUIWindow::SetArea(pos);
  87. }
  88.  
  89. vduirect VDUIPeerW32::GetClientArea() const {
  90.     RECT r;
  91.  
  92.     GetClientRect(mhwnd, &r);
  93.  
  94.     return vduirect(r.left, r.top, r.right, r.bottom);
  95. }
  96.  
  97. void VDUIPeerW32::PropagateVisible(bool vis) {
  98.     ShowWindow(mhwnd, vis && mbVisible ? SW_SHOW : SW_HIDE);
  99. }
  100.  
  101. void VDUIPeerW32::PropagateEnabled(bool ena) {
  102.     EnableWindow(mhwnd, ena && mbEnabled);
  103. }
  104.  
  105. VDUIPeerW32 *VDUIPeerW32::GetParentPeerW32() const {
  106.     for(IVDUIWindow *pWin = mpParent; pWin; pWin = pWin->GetParent()) {
  107.         VDUIPeerW32 *pPeer = vdpoly_cast<VDUIPeerW32 *>(pWin);
  108.  
  109.         if (pPeer && pPeer->IsOwnerW32())
  110.             return pPeer;
  111.     }
  112.  
  113.     return NULL;
  114. }
  115.  
  116. HWND VDUIPeerW32::GetParentW32() const {
  117.     VDUIPeerW32 *pParentW32 = GetParentPeerW32();
  118.  
  119.     return pParentW32 ? pParentW32->GetHandleW32() : NULL;
  120. }
  121.  
  122. bool VDUIPeerW32::IsOwnerW32() const {
  123.     return !(GetWindowLong(mhwnd, GWL_STYLE) & WS_CHILD);
  124. }
  125.  
  126. void VDUIPeerW32::RegisterCallbackW32(VDUIPeerW32 *pChild) {
  127.     mCallbacks[pChild->GetHandleW32()] = pChild;
  128. }
  129.  
  130. void VDUIPeerW32::UnregisterCallbackW32(VDUIPeerW32 *pChild) {
  131.     mCallbacks.erase(pChild->GetHandleW32());
  132. }
  133.  
  134. void VDUIPeerW32::UpdateCaptionW32() {
  135.     mCaption = VDGetWindowTextW32(mhwnd);
  136. }