ultimatepp/uppsrc/CtrlCore/DHCtrl.cpp
cxl ec1ca78c6b CtrlCore: Ctrl::Lock MT in Win32
git-svn-id: svn://ultimatepp.org/upp/trunk@1192 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2009-05-16 16:50:53 +00:00

87 lines
1.3 KiB
C++

#include "CtrlCore.h"
NAMESPACE_UPP
#ifdef PLATFORM_WIN32
#ifndef PLATFORM_WINCE
void DHCtrl::NcCreate(HWND _hwnd)
{
hwnd = _hwnd;
}
void DHCtrl::NcDestroy()
{
hwnd = NULL;
}
LRESULT DHCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
GuiLock __;
return DefWindowProc(hwnd, message, wParam, lParam);
}
void DHCtrl::CloseHWND()
{
GuiLock __;
if(hwnd) {
DestroyWindow(hwnd);
hwnd = NULL;
}
}
void DHCtrl::OpenHWND()
{
GuiLock __;
CloseHWND();
HWND phwnd = GetTopCtrl()->GetHWND();
if(phwnd) {
CreateWindowEx(0, "UPP-CLASS-A", "",
WS_CHILD|WS_DISABLED|WS_VISIBLE,
0, 0, 20, 20,
phwnd, NULL, hInstance, this);
}
}
void DHCtrl::SyncHWND()
{
GuiLock __;
HWND phwnd = GetTopCtrl()->GetHWND();
if(phwnd) {
Rect r = GetScreenView();
Rect pr = GetScreenClient(phwnd);
SetWindowPos(hwnd, NULL, r.left - pr.left, r.top - pr.top, r.Width(), r.Height(),
SWP_NOACTIVATE|SWP_NOZORDER);
ShowWindow(hwnd, IsVisible() ? SW_SHOW : SW_HIDE);
}
}
void DHCtrl::State(int reason)
{
switch(reason) {
case OPEN:
OpenHWND();
default:
SyncHWND();
break;
case CLOSE:
CloseHWND();
}
}
DHCtrl::DHCtrl()
{
hwnd = NULL;
isdhctrl = true;
}
DHCtrl::~DHCtrl()
{
CloseHWND();
BackPaint(EXCLUDEPAINT);
}
#endif
#endif
END_UPP_NAMESPACE