mirror of
https://github.com/reactos/reactos.git
synced 2025-05-29 05:58:13 +00:00
[MSUTB] Add CTipbarWnd Part 3 (#6467)
Supporting Language Bar... JIRA issue: CORE-19363 - Add implementation to CTipbarWnd class. - Add delay link to imm32.dll.
This commit is contained in:
parent
5974982d9c
commit
c6ceae3440
3 changed files with 344 additions and 30 deletions
|
@ -15,5 +15,5 @@ set_module_type(msutb win32dll)
|
||||||
add_dependencies(msutb msctf psdk)
|
add_dependencies(msutb msctf psdk)
|
||||||
target_link_libraries(msutb wine uuid atl_classes)
|
target_link_libraries(msutb wine uuid atl_classes)
|
||||||
add_importlibs(msutb user32 gdi32 advapi32 msvcrt kernel32 ntdll)
|
add_importlibs(msutb user32 gdi32 advapi32 msvcrt kernel32 ntdll)
|
||||||
add_delay_importlibs(msutb uxtheme comctl32 msctf ole32 oleacc oleaut32 shell32)
|
add_delay_importlibs(msutb uxtheme imm32 comctl32 msctf ole32 oleacc oleaut32 shell32)
|
||||||
add_cd_file(TARGET msutb DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET msutb DESTINATION reactos/system32 FOR all)
|
||||||
|
|
|
@ -364,6 +364,24 @@ BOOL IsTransparecyAvailable(void)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INT CALLBACK
|
||||||
|
FindEAEnumFontProc(ENUMLOGFONT *pLF, NEWTEXTMETRIC *pTM, INT nFontType, LPARAM lParam)
|
||||||
|
{
|
||||||
|
if ((nFontType != TRUETYPE_FONTTYPE) || (pLF->elfLogFont.lfFaceName[0] != '@'))
|
||||||
|
return TRUE;
|
||||||
|
*(BOOL*)lParam = TRUE;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CheckEAFonts(void)
|
||||||
|
{
|
||||||
|
BOOL bHasVertical = FALSE;
|
||||||
|
HDC hDC = ::GetDC(NULL);
|
||||||
|
::EnumFonts(hDC, NULL, (FONTENUMPROC)FindEAEnumFontProc, (LPARAM)&bHasVertical);
|
||||||
|
::ReleaseDC(NULL, hDC);
|
||||||
|
return bHasVertical;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL InitFromReg(void)
|
BOOL InitFromReg(void)
|
||||||
{
|
{
|
||||||
DWORD dwValue;
|
DWORD dwValue;
|
||||||
|
@ -680,6 +698,7 @@ protected:
|
||||||
CicArray<CTipbarAccItem*> m_AccItems;
|
CicArray<CTipbarAccItem*> m_AccItems;
|
||||||
LONG m_cSelection;
|
LONG m_cSelection;
|
||||||
friend class CUTBMenuWnd;
|
friend class CUTBMenuWnd;
|
||||||
|
friend class CTipbarWnd;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CTipbarAccessible(CTipbarAccItem *pItem);
|
CTipbarAccessible(CTipbarAccItem *pItem);
|
||||||
|
@ -968,6 +987,7 @@ class CTipbarGripper : public CUIFGripper
|
||||||
protected:
|
protected:
|
||||||
CTipbarWnd *m_pTipbarWnd;
|
CTipbarWnd *m_pTipbarWnd;
|
||||||
BOOL m_bInDebugMenu;
|
BOOL m_bInDebugMenu;
|
||||||
|
friend class CTipbarWnd;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CTipbarGripper(CTipbarWnd *pTipbarWnd, LPCRECT prc, DWORD style);
|
CTipbarGripper(CTipbarWnd *pTipbarWnd, LPCRECT prc, DWORD style);
|
||||||
|
@ -1187,7 +1207,8 @@ class CTipbarWnd
|
||||||
, public CTipbarAccItem
|
, public CTipbarAccItem
|
||||||
, public CUIFWindow
|
, public CUIFWindow
|
||||||
{
|
{
|
||||||
DWORD m_dwUnknown19[2];
|
CTipbarCoInitialize m_coInit;
|
||||||
|
DWORD m_dwSinkCookie;
|
||||||
CModalMenu *m_pModalMenu;
|
CModalMenu *m_pModalMenu;
|
||||||
CTipbarThread *m_pThread;
|
CTipbarThread *m_pThread;
|
||||||
CicArray<GUID*> m_TipbarGUIDArray;
|
CicArray<GUID*> m_TipbarGUIDArray;
|
||||||
|
@ -1239,6 +1260,11 @@ public:
|
||||||
return static_cast<CUIFWindow*>(this);
|
return static_cast<CUIFWindow*>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CTipbarAccItem *GetAccItem()
|
||||||
|
{
|
||||||
|
return static_cast<CTipbarAccItem*>(this);
|
||||||
|
}
|
||||||
|
|
||||||
void Init(BOOL bFlag, CDeskBand *pDeskBand);
|
void Init(BOOL bFlag, CDeskBand *pDeskBand);
|
||||||
void InitHighContrast();
|
void InitHighContrast();
|
||||||
void InitMetrics();
|
void InitMetrics();
|
||||||
|
@ -1286,7 +1312,7 @@ public:
|
||||||
void MyClientToScreen(LPPOINT lpPoint, LPRECT prc);
|
void MyClientToScreen(LPPOINT lpPoint, LPRECT prc);
|
||||||
void SavePosition();
|
void SavePosition();
|
||||||
void SetAlpha(BYTE bAlpha, BOOL bFlag);
|
void SetAlpha(BYTE bAlpha, BOOL bFlag);
|
||||||
BOOL SetLangBand(BOOL bFlag1, BOOL bFlag2);
|
BOOL SetLangBand(BOOL bDeskBand, BOOL bFlag2);
|
||||||
void SetMoveRect(INT X, INT Y, INT nWidth, INT nHeight);
|
void SetMoveRect(INT X, INT Y, INT nWidth, INT nHeight);
|
||||||
void SetShowText(BOOL bShow);
|
void SetShowText(BOOL bShow);
|
||||||
void SetShowTrayIcon(BOOL bShow);
|
void SetShowTrayIcon(BOOL bShow);
|
||||||
|
@ -3627,8 +3653,6 @@ STDMETHODIMP_(BOOL) CTipbarGripper::OnSetCursor(UINT uMsg, LONG x, LONG y)
|
||||||
CTipbarWnd::CTipbarWnd(DWORD style)
|
CTipbarWnd::CTipbarWnd(DWORD style)
|
||||||
: CUIFWindow(g_hInst, style)
|
: CUIFWindow(g_hInst, style)
|
||||||
{
|
{
|
||||||
m_dwUnknown19[0] = 0;
|
|
||||||
|
|
||||||
m_dwUnknown23_1[4] = 0;
|
m_dwUnknown23_1[4] = 0;
|
||||||
m_dwUnknown23_1[5] = 0;
|
m_dwUnknown23_1[5] = 0;
|
||||||
m_dwUnknown23_1[6] = 0;
|
m_dwUnknown23_1[6] = 0;
|
||||||
|
@ -3813,9 +3837,11 @@ void CTipbarWnd::MoveToStub(BOOL bFlag)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
void CTipbarWnd::RestoreFromStub()
|
void CTipbarWnd::RestoreFromStub()
|
||||||
{
|
{
|
||||||
|
m_dwTipbarWndFlags &= 0x3F;
|
||||||
|
KillTimer(1);
|
||||||
|
KillTimer(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
/// @unimplemented
|
||||||
|
@ -3824,16 +3850,38 @@ INT CTipbarWnd::GetCtrlButtonWidth()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
INT CTipbarWnd::GetGripperWidth()
|
INT CTipbarWnd::GetGripperWidth()
|
||||||
{
|
{
|
||||||
|
if (m_dwTipbarWndFlags & 2)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!m_pTipbarGripper || FAILED(m_pTipbarGripper->EnsureThemeData(m_hWnd)))
|
||||||
|
return 5;
|
||||||
|
|
||||||
|
INT width = -1;
|
||||||
|
SIZE partSize;
|
||||||
|
HDC hDC = ::GetDC(m_hWnd);
|
||||||
|
if (SUCCEEDED(m_pTipbarGripper->GetThemePartSize(hDC, 1, 0, TS_TRUE, &partSize)))
|
||||||
|
{
|
||||||
|
INT cx = partSize.cx;
|
||||||
|
if (m_dwTipbarWndFlags & 4)
|
||||||
|
cx = partSize.cy;
|
||||||
|
width = cx + 4;
|
||||||
|
}
|
||||||
|
::ReleaseDC(m_hWnd, hDC);
|
||||||
|
|
||||||
|
return ((width < 0) ? 5 : width);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
INT CTipbarWnd::GetTipbarHeight()
|
INT CTipbarWnd::GetTipbarHeight()
|
||||||
{
|
{
|
||||||
return 0;
|
SIZE size = { 0, 0 };
|
||||||
|
if (m_pWndFrame)
|
||||||
|
m_pWndFrame->GetFrameSize(&size);
|
||||||
|
INT cy = m_Margins.cyBottomHeight + m_Margins.cyTopHeight + 2;
|
||||||
|
if (cy < 6)
|
||||||
|
cy = 6;
|
||||||
|
return m_cySmallIcon + cy + (2 * size.cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
/// @unimplemented
|
||||||
|
@ -3853,19 +3901,93 @@ void CTipbarWnd::LocateCtrlButtons()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
void CTipbarWnd::AdjustPosOnDisplayChange()
|
void CTipbarWnd::AdjustPosOnDisplayChange()
|
||||||
{
|
{
|
||||||
|
RECT rcWorkArea;
|
||||||
|
RECT rc = { m_nLeft, m_nTop, m_nLeft + m_nWidth, m_nTop + m_nHeight };
|
||||||
|
if (!GetWorkArea(&rc, &rcWorkArea))
|
||||||
|
return;
|
||||||
|
|
||||||
|
INT x = m_nLeft, y = m_nTop;
|
||||||
|
if (m_dwTipbarWndFlags & 0x200000)
|
||||||
|
x = rcWorkArea.left;
|
||||||
|
if (m_dwTipbarWndFlags & 0x40000)
|
||||||
|
y = rcWorkArea.top;
|
||||||
|
if (m_dwTipbarWndFlags & 0x100000)
|
||||||
|
x = rcWorkArea.right - m_nWidth;
|
||||||
|
if (m_dwTipbarWndFlags & 0x80000)
|
||||||
|
y = rcWorkArea.bottom - m_nHeight;
|
||||||
|
if (x != m_nLeft || y != m_nTop)
|
||||||
|
Move(x, y, m_nWidth, m_nHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
void CTipbarWnd::SetVertical(BOOL bVertical)
|
void CTipbarWnd::SetVertical(BOOL bVertical)
|
||||||
{
|
{
|
||||||
|
if (bVertical)
|
||||||
|
m_dwTipbarWndFlags |= 0x4;
|
||||||
|
else
|
||||||
|
m_dwTipbarWndFlags &= ~0x4;
|
||||||
|
|
||||||
|
if (m_pTipbarGripper)
|
||||||
|
{
|
||||||
|
DWORD style = m_pTipbarGripper->m_style;
|
||||||
|
if (bVertical)
|
||||||
|
style |= 0x1;
|
||||||
|
else
|
||||||
|
style &= 0x1;
|
||||||
|
m_pTipbarGripper->SetStyle(style);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_fTaskbarTheme)
|
||||||
|
SetActiveTheme(L"TASKBAR", !!(m_dwTipbarWndFlags & 0x4), 1);
|
||||||
|
|
||||||
|
if (!(m_dwTipbarWndFlags & 2))
|
||||||
|
{
|
||||||
|
if (m_dwTipbarWndFlags & 4)
|
||||||
|
{
|
||||||
|
Move(m_nLeft, m_nTop, GetTipbarHeight(), 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Move(m_nLeft, m_nTop, 0, GetTipbarHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_hWnd)
|
||||||
|
{
|
||||||
|
KillTimer(7);
|
||||||
|
SetTimer(7, g_uTimerElapseSYSCOLORCHANGED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
void CTipbarWnd::UpdatePosFlags()
|
void CTipbarWnd::UpdatePosFlags()
|
||||||
{
|
{
|
||||||
|
if (m_dwTipbarWndFlags & 0x2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
RECT rc = { m_nLeft, m_nTop, m_nLeft + m_nWidth, m_nTop + m_nHeight }, rcWorkArea;
|
||||||
|
if (!GetWorkArea(&rc, &rcWorkArea))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_nLeft > rcWorkArea.left + 2)
|
||||||
|
m_dwTipbarWndFlags &= ~0x200000;
|
||||||
|
else
|
||||||
|
m_dwTipbarWndFlags |= 0x200000;
|
||||||
|
|
||||||
|
if ( m_nTop> rcWorkArea.top + 2 )
|
||||||
|
m_dwTipbarWndFlags &= ~0x40000;
|
||||||
|
else
|
||||||
|
m_dwTipbarWndFlags |= 0x40000;
|
||||||
|
|
||||||
|
if (m_nLeft + m_nWidth < rcWorkArea.right - 2)
|
||||||
|
m_dwTipbarWndFlags &= ~0x100000;
|
||||||
|
else
|
||||||
|
m_dwTipbarWndFlags |= 0x100000;
|
||||||
|
|
||||||
|
if (m_nTop + m_nHeight < rcWorkArea.bottom - 2)
|
||||||
|
m_dwTipbarWndFlags &= ~0x80000;
|
||||||
|
else
|
||||||
|
m_dwTipbarWndFlags |= 0x80000;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
/// @unimplemented
|
||||||
|
@ -3873,10 +3995,9 @@ void CTipbarWnd::CancelMenu()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
BOOL CTipbarWnd::CheckExcludeCaptionButtonMode(LPRECT prc1, LPCRECT prc2)
|
BOOL CTipbarWnd::CheckExcludeCaptionButtonMode(LPRECT prc1, LPCRECT prc2)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return (prc1->top < prc2->top + 5) && (prc2->right <= prc1->right + (5 * m_ButtonWidth));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
/// @unimplemented
|
||||||
|
@ -3884,10 +4005,35 @@ void CTipbarWnd::ClearLBItemList()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
HFONT CTipbarWnd::CreateVerticalFont()
|
HFONT CTipbarWnd::CreateVerticalFont()
|
||||||
{
|
{
|
||||||
|
if (!m_hWnd)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
CUIFTheme theme;
|
||||||
|
theme.m_iPartId = 1;
|
||||||
|
theme.m_iStateId = 0;
|
||||||
|
theme.m_pszClassList = L"TOOLBAR";
|
||||||
|
|
||||||
|
LOGFONTW lf;
|
||||||
|
if (FAILED(theme.InternalOpenThemeData(m_hWnd)) ||
|
||||||
|
FAILED(::GetThemeFont(theme.m_hTheme, NULL, theme.m_iPartId, 0, 210, &lf)))
|
||||||
|
{
|
||||||
|
::GetObject(::GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);
|
||||||
|
}
|
||||||
|
|
||||||
|
lf.lfEscapement = lf.lfOrientation = 2700;
|
||||||
|
lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
|
||||||
|
|
||||||
|
if (CheckEAFonts())
|
||||||
|
{
|
||||||
|
WCHAR szText[LF_FACESIZE];
|
||||||
|
szText[0] = L'@';
|
||||||
|
StringCchCopyW(&szText[1], _countof(szText) - 1, lf.lfFaceName);
|
||||||
|
StringCchCopyW(lf.lfFaceName, _countof(lf.lfFaceName), szText);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ::CreateFontIndirectW(&lf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTipbarWnd::UpdateVerticalFont()
|
void CTipbarWnd::UpdateVerticalFont()
|
||||||
|
@ -3991,15 +4137,85 @@ void CTipbarWnd::SetAlpha(BYTE bAlpha, BOOL bFlag)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
BOOL CTipbarWnd::SetLangBand(BOOL bDeskBand, BOOL bFlag2)
|
||||||
BOOL CTipbarWnd::SetLangBand(BOOL bFlag1, BOOL bFlag2)
|
|
||||||
{
|
{
|
||||||
return FALSE;
|
if (bDeskBand == !!(m_dwShowType & TF_SFT_DESKBAND))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
BOOL ret = TRUE;
|
||||||
|
HWND hwndTray = m_ShellWndThread.GetWndTray();
|
||||||
|
if (bFlag2 && hwndTray)
|
||||||
|
{
|
||||||
|
DWORD_PTR dwResult;
|
||||||
|
HWND hImeWnd = ::ImmGetDefaultIMEWnd(hwndTray);
|
||||||
|
if (hImeWnd)
|
||||||
|
::SendMessageTimeout(hImeWnd, WM_IME_SYSTEM, 0x24 - bDeskBand, (LPARAM)hwndTray,
|
||||||
|
(SMTO_BLOCK | SMTO_ABORTIFHUNG), 5000, &dwResult);
|
||||||
|
else
|
||||||
|
::SendMessageTimeout(hwndTray, 0x505, 0, bDeskBand,
|
||||||
|
(SMTO_BLOCK | SMTO_ABORTIFHUNG), 5000, &dwResult);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(m_dwTipbarWndFlags & 2))
|
||||||
|
{
|
||||||
|
if (bDeskBand)
|
||||||
|
{
|
||||||
|
KillTimer(7);
|
||||||
|
SetTimer(7, g_uTimerElapseSYSCOLORCHANGED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
void CTipbarWnd::SetMoveRect(INT X, INT Y, INT nWidth, INT nHeight)
|
void CTipbarWnd::SetMoveRect(INT X, INT Y, INT nWidth, INT nHeight)
|
||||||
{
|
{
|
||||||
|
if (m_dwTipbarWndFlags & 0x2)
|
||||||
|
{
|
||||||
|
m_nWidth = nWidth;
|
||||||
|
m_nHeight = nHeight;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
++m_bInCallOn;
|
||||||
|
|
||||||
|
m_dwTipbarWndFlags |= 0x400;
|
||||||
|
|
||||||
|
m_X = X;
|
||||||
|
m_Y = Y;
|
||||||
|
m_CX = nWidth;
|
||||||
|
m_CY = nHeight;
|
||||||
|
|
||||||
|
RECT rc;
|
||||||
|
SIZE size = { 0, 0 };
|
||||||
|
if (m_pWndFrame)
|
||||||
|
{
|
||||||
|
::SetRect(&rc, 0, 0, nWidth - m_cxDlgFrameX2, nHeight - m_cyDlgFrameX2);
|
||||||
|
m_pWndFrame->SetRect(&rc);
|
||||||
|
m_pWndFrame->GetFrameSize(&size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pTipbarGripper)
|
||||||
|
{
|
||||||
|
if (m_dwTipbarWndFlags & 4)
|
||||||
|
{
|
||||||
|
INT GripperWidth = GetGripperWidth();
|
||||||
|
::SetRect(&rc, size.cx, size.cy, nWidth - m_cxDlgFrameX2 - size.cx, size.cy + GripperWidth);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
INT GripperWidth = GetGripperWidth();
|
||||||
|
INT y1 = nHeight - m_cyDlgFrameX2 - size.cy;
|
||||||
|
::SetRect(&rc, size.cx, size.cy, size.cx + GripperWidth, y1);
|
||||||
|
}
|
||||||
|
m_pTipbarGripper->SetRect(&rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
--m_bInCallOn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
/// @unimplemented
|
||||||
|
@ -4209,10 +4425,54 @@ STDMETHODIMP CTipbarWnd::OnThreadItemChange(DWORD dwThreadId)
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
STDMETHODIMP CTipbarWnd::OnModalInput(DWORD dwThreadId, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
STDMETHODIMP CTipbarWnd::OnModalInput(DWORD dwThreadId, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
return E_NOTIMPL;
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case WM_NCLBUTTONDOWN:
|
||||||
|
case WM_NCRBUTTONDOWN:
|
||||||
|
case WM_NCMBUTTONDOWN:
|
||||||
|
case WM_LBUTTONUP:
|
||||||
|
case WM_RBUTTONUP:
|
||||||
|
case WM_MBUTTONUP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_NCLBUTTONUP:
|
||||||
|
case WM_NCRBUTTONUP:
|
||||||
|
case WM_NCMBUTTONUP:
|
||||||
|
if (m_pThread)
|
||||||
|
{
|
||||||
|
CUTBMenuWnd *pMenuUI = m_pModalMenu->m_pMenuUI;
|
||||||
|
if (pMenuUI)
|
||||||
|
{
|
||||||
|
HWND hWnd = *pMenuUI;
|
||||||
|
if (hWnd)
|
||||||
|
{
|
||||||
|
POINT pt = { (SHORT)LOWORD(lParam), (SHORT)HIWORD(lParam) };
|
||||||
|
::ScreenToClient(hWnd, &pt);
|
||||||
|
uMsg += WM_LBUTTONUP - WM_NCLBUTTONUP;
|
||||||
|
::PostMessage(m_hWnd, uMsg, wParam, MAKELPARAM(pt.x, pt.y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if (uMsg == WM_KEYDOWN || uMsg == WM_KEYUP)
|
||||||
|
{
|
||||||
|
if (m_pThread)
|
||||||
|
m_pModalMenu->PostKey(uMsg == WM_KEYUP, wParam, lParam);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CancelMenu();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
/// @unimplemented
|
||||||
|
@ -4272,9 +4532,25 @@ STDMETHODIMP_(void) CTipbarWnd::OnCreate(HWND hWnd)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
STDMETHODIMP_(void) CTipbarWnd::OnDestroy(HWND hWnd)
|
STDMETHODIMP_(void) CTipbarWnd::OnDestroy(HWND hWnd)
|
||||||
{
|
{
|
||||||
|
CancelMenu();
|
||||||
|
|
||||||
|
if (m_pTipbarAccessible)
|
||||||
|
m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_DESTROY, GetAccItem());
|
||||||
|
|
||||||
|
OnTerminateToolbar();
|
||||||
|
if (m_pTipbarAccessible)
|
||||||
|
{
|
||||||
|
m_pTipbarAccessible->ClearAccItems();
|
||||||
|
m_pTipbarAccessible->Release();
|
||||||
|
m_pTipbarAccessible = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_coInit.CoUninit();
|
||||||
|
|
||||||
|
if (m_pLangBarMgr)
|
||||||
|
m_pLangBarMgr->UnAdviseEventSink(m_dwSinkCookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
/// @unimplemented
|
||||||
|
@ -4288,9 +4564,13 @@ STDMETHODIMP_(void) CTipbarWnd::OnSysColorChange()
|
||||||
SetTimer(7, g_uTimerElapseSYSCOLORCHANGED);
|
SetTimer(7, g_uTimerElapseSYSCOLORCHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
void CTipbarWnd::OnTerminateToolbar()
|
void CTipbarWnd::OnTerminateToolbar()
|
||||||
{
|
{
|
||||||
|
m_dwTipbarWndFlags |= 0x10000;
|
||||||
|
DestroyOverScreenSizeBalloon();
|
||||||
|
TerminateAllThreads(TRUE);
|
||||||
|
if (!(m_dwTipbarWndFlags & 0x2))
|
||||||
|
SavePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
STDMETHODIMP_(void) CTipbarWnd::OnEndSession(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
STDMETHODIMP_(void) CTipbarWnd::OnEndSession(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||||
|
@ -4349,11 +4629,22 @@ CTipbarWnd::OnWindowPosChanging(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||||
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
STDMETHODIMP_(LRESULT)
|
STDMETHODIMP_(LRESULT)
|
||||||
CTipbarWnd::OnShowWindow(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
CTipbarWnd::OnShowWindow(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
return 0;
|
if (m_pTipbarAccessible)
|
||||||
|
{
|
||||||
|
if (wParam) // Show?
|
||||||
|
{
|
||||||
|
m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_SHOW, GetAccItem());
|
||||||
|
m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_FOCUS, GetAccItem());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_HIDE, GetAccItem());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
STDMETHODIMP_(LRESULT)
|
STDMETHODIMP_(LRESULT)
|
||||||
|
@ -4378,11 +4669,33 @@ CTipbarWnd::OnDisplayChange(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
STDMETHODIMP_(HRESULT)
|
STDMETHODIMP_(HRESULT)
|
||||||
CTipbarWnd::OnGetObject(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
CTipbarWnd::OnGetObject(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
return E_NOTIMPL;
|
if (lParam != -4)
|
||||||
|
return S_OK;
|
||||||
|
if (!m_pTipbarAccessible)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
if (m_pTipbarAccessible->m_bInitialized)
|
||||||
|
return m_pTipbarAccessible->CreateRefToAccObj(wParam);
|
||||||
|
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
if (SUCCEEDED(m_coInit.EnsureCoInit()))
|
||||||
|
{
|
||||||
|
hr = m_pTipbarAccessible->Initialize();
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
m_pTipbarAccessible->Release();
|
||||||
|
m_pTipbarAccessible = NULL;
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pTipbarAccessible->NotifyWinEvent(EVENT_OBJECT_CREATE, GetAccItem());
|
||||||
|
return m_pTipbarAccessible->CreateRefToAccObj(wParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
STDMETHODIMP_(BOOL) CTipbarWnd::OnEraseBkGnd(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
STDMETHODIMP_(BOOL) CTipbarWnd::OnEraseBkGnd(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <oleacc.h>
|
#include <oleacc.h>
|
||||||
#include <imm.h>
|
#include <imm.h>
|
||||||
#include <ddk/immdev.h>
|
#include <ddk/immdev.h>
|
||||||
|
#include <undocuser.h>
|
||||||
#include <cguid.h>
|
#include <cguid.h>
|
||||||
#include <msctf.h>
|
#include <msctf.h>
|
||||||
#include <ctffunc.h>
|
#include <ctffunc.h>
|
||||||
|
|
Loading…
Reference in a new issue