nim_duilib/ui_components/windows_manager/window_ex.cpp
jiajia_deng 4933d1f2bc Remove dependency on shared
Signed-off-by: jiajia_deng <2894220@gmail.com>
2019-09-20 16:27:58 +08:00

101 lines
2.0 KiB
C++

#include "stdafx.h"
#include "window_ex.h"
#include "windows_manager.h"
namespace nim_comp
{
WindowEx::WindowEx()
{
}
WindowEx::~WindowEx()
{
}
HWND WindowEx::Create(HWND hwndParent, LPCTSTR pstrName, DWORD dwStyle, DWORD dwExStyle, bool isLayeredWindow, const ui::UiRect& rc)
{
if (!RegisterWnd())
{
return NULL;
}
HWND hwnd = __super::Create(hwndParent, pstrName, dwStyle, dwExStyle, isLayeredWindow, rc);
ASSERT(hwnd);
return hwnd;
}
LRESULT WindowEx::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
UnRegisterWnd();
return __super::OnDestroy(uMsg, wParam, lParam, bHandled);
}
void WindowEx::OnEsc(BOOL &bHandled)
{
bHandled = FALSE;
}
bool WindowEx::RegisterWnd()
{
std::wstring wnd_class_name = GetWindowClassName();
std::wstring wnd_id = GetWindowId();
if (!WindowsManager::GetInstance()->RegisterWindow(wnd_class_name, wnd_id, this))
{
return false;
}
return true;
}
void WindowEx::UnRegisterWnd()
{
std::wstring wnd_class_name = GetWindowClassName();
std::wstring wnd_id = GetWindowId();
WindowsManager::GetInstance()->UnRegisterWindow(wnd_class_name, wnd_id, this);
}
LRESULT WindowEx::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_CLOSE)
{
if (!::IsWindowEnabled(m_hWnd))
{
::SetForegroundWindow(m_hWnd);
return FALSE;
}
}
else if (uMsg == WM_KILLFOCUS)
{
KillFocus();
}
else if (uMsg == WM_KEYDOWN)
{
if (wParam == VK_ESCAPE)
{
BOOL bHandled = FALSE;
OnEsc(bHandled);
if (!bHandled)
this->Close();
}
}
return __super::HandleMessage(uMsg, wParam, lParam);
}
POINT GetPopupWindowPos(WindowEx* window)
{
ASSERT(window && IsWindow(window->GetHWND()));
//ÆÁÄ»´óС
MONITORINFO oMonitor = { sizeof(oMonitor) };
::GetMonitorInfo(::MonitorFromWindow(window->GetHWND(), MONITOR_DEFAULTTONEAREST), &oMonitor);
RECT screen = oMonitor.rcWork;
ui::UiRect rect = window->GetPos(true);
POINT pt = { 0, 0 };
pt.x = screen.right - rect.GetWidth();
pt.y = screen.bottom - rect.GetHeight();
return pt;
}
}