nim_duilib/ui_components/shadow_wnd/shadow_wnd.cpp
jiajia_deng ad9a6b3edc Modified the namespace of the UI component
Signed-off-by: jiajia_deng <2894220@gmail.com>
2019-09-22 11:08:20 +08:00

96 lines
1.7 KiB
C++

#include "stdafx.h"
#include "shadow_wnd.h"
namespace nim_comp {
ShadowWnd::ShadowWnd()
{
}
std::wstring ShadowWnd::GetSkinFolder()
{
return L"shadow";
}
std::wstring ShadowWnd::GetSkinFile()
{
return L"shadow.xml";
}
std::wstring ShadowWnd::GetWindowClassName() const
{
return L"ShadowWindow";
}
HWND ShadowWnd::Create(Window* window)
{
window_ = window;
return Window::Create(NULL, L"ShadowWindow", WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW, true);
}
LRESULT ShadowWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (window_ == NULL || window_->GetHWND() == NULL)
{
return FALSE;
}
switch (uMsg)
{
case WM_ERASEBKGND:
case WM_PAINT:
case WM_MOVE:
case WM_ACTIVATE:
case WM_NCACTIVATE:
{
if (::IsWindowVisible(window_->GetHWND()))
{
RECT rc;
::GetWindowRect(window_->GetHWND(), &rc);
SetPos(rc, false, SWP_SHOWWINDOW | SWP_NOACTIVATE, window_->GetHWND());
}
break;
}
case WM_CLOSE:
{
ShowWindow(false, false);
Close(0);
break;
}
case WM_SHOWWINDOW:
{
ShowWindow(wParam == 0 ? false : true, false);
break;
}
default:
{
break;
}
}
bHandled = FALSE;
return FALSE;
}
ShadowWndBase::ShadowWndBase()
{
shadow_wnd_ = new ShadowWnd;
this->AddMessageFilter(shadow_wnd_);
}
HWND ShadowWndBase::Create(HWND hwndParent, LPCTSTR pstrName, DWORD dwStyle, DWORD dwExStyle,
bool isLayeredWindow /*= false*/, const ui::UiRect& rc /*= ui::UiRect(0, 0, 0, 0)*/)
{
__super::Create(hwndParent, pstrName, dwStyle, dwExStyle, false, rc);
shadow_wnd_->Create(this);
::EnableWindow(shadow_wnd_->GetHWND(), FALSE);
if (::IsWindowVisible(GetHWND()))
shadow_wnd_->ShowWindow();
return GetHWND();
}
} // namespace ui