inpobj.cpp
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 3k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #include "priv.h"
  2. #include "inpobj.h"
  3. #define DM_FOCUS        0   // focus stuff
  4. #define DM_FOCUS2       0   // like DM_FOCUS, but verbose
  5. //***   IInputObject {
  6. HRESULT UnkHasFocusIO(IUnknown *punkThis)
  7. {
  8.     HRESULT hres = E_FAIL;
  9.     if (punkThis != NULL) {
  10.         IInputObject *pio;
  11.         hres = punkThis->QueryInterface(IID_IInputObject, (LPVOID*)&pio);
  12.         if (SUCCEEDED(hres)) {
  13.             hres = pio->HasFocusIO();
  14.             pio->Release();
  15.         }
  16.     }
  17.     if (hres != S_OK)
  18.         TraceMsg(DM_FOCUS2, "hfio hres=%x (!=S_OK)", hres);
  19.     return hres;
  20. }
  21. HRESULT UnkTranslateAcceleratorIO(IUnknown *punkThis, MSG* pmsg)
  22. {
  23.     HRESULT hres = E_FAIL;
  24.     if (punkThis != NULL) {
  25.         IInputObject *pio;
  26.         hres = punkThis->QueryInterface(IID_IInputObject, (LPVOID*)&pio);
  27.         if (SUCCEEDED(hres)) {
  28.             hres = pio->TranslateAcceleratorIO(pmsg);
  29.             pio->Release();
  30.         }
  31.     }
  32.     return hres;
  33. }
  34. HRESULT UnkUIActivateIO(IUnknown *punkThis, BOOL fActivate, LPMSG lpMsg)
  35. {
  36.     HRESULT hres = E_FAIL;
  37.     if (punkThis != NULL) {
  38.         IInputObject *pio;
  39.         hres = punkThis->QueryInterface(IID_IInputObject, (LPVOID*)&pio);
  40.         if (SUCCEEDED(hres)) {
  41.             hres = pio->UIActivateIO(fActivate, lpMsg);
  42.             pio->Release();
  43.         }
  44.     }
  45.     if (FAILED(hres))
  46.         TraceMsg(DM_FOCUS2, "uiaio(fActivate=%d) hres=%x (FAILED)", fActivate, hres);
  47.     return hres;
  48. }
  49. // }
  50. //***   IInputObjectSite {
  51. HRESULT UnkOnFocusChangeIS(IUnknown *punkThis, IUnknown *punkSrc, BOOL fSetFocus)
  52. {
  53.     HRESULT hres = E_FAIL;
  54.     if (punkThis != NULL) {
  55.         IInputObjectSite *pis;
  56.         hres = punkThis->QueryInterface(IID_IInputObjectSite, (LPVOID*)&pis);
  57.         if (SUCCEEDED(hres)) {
  58.             hres = pis->OnFocusChangeIS(punkSrc, fSetFocus);
  59.             pis->Release();
  60.         }
  61.     }
  62.     if (FAILED(hres))
  63.         TraceMsg(DM_FOCUS, "ofcis(punk=%x fSetFocus=%d) hres=%x (FAILED)", punkSrc, fSetFocus, hres);
  64.     return hres;
  65. }
  66. // }
  67. //***   composites {
  68. //***   _MayUIActTAB -- attempt TAB-activation of IOleWindow/IInputObject
  69. // ENTRY/EXIT
  70. //  powEtc      IOleWindow/IInputObject pair.
  71. //  lpMsg       msg causing activation (may be NULL) (typically TAB)
  72. //  fShowing    currently showing?
  73. //  phwnd       [OUT] hwnd for object
  74. //  hr          [RET] UIActivateIO result, plus E_FAIL
  75. // DESCRIPTION
  76. //  when TABing we only want to activate certain guys, viz. those who are
  77. // currently showing, visible, and willing to accept activation.
  78. HRESULT _MayUIActTAB(IOleWindow *powEtc, LPMSG lpMsg, BOOL fShowing, HWND *phwnd)
  79. {
  80.     HRESULT hr;
  81.     HWND hwnd = 0;
  82.     hr = E_FAIL;
  83.     if (powEtc && fShowing)
  84.     {
  85.         hr = powEtc->GetWindow(&hwnd);
  86.         if (IsWindowVisible(hwnd))
  87.             hr = UnkUIActivateIO(powEtc, TRUE, lpMsg);
  88.     }
  89.     if (phwnd)
  90.         *phwnd = hwnd;
  91.     return hr;
  92. }
  93. // }