From 51720b0288dcb1bed4c34841534dc1ef1f9958c2 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 3 Mar 2017 20:11:27 +0300 Subject: CSplitter class --- src/mir_core/src/hyperlink.cpp | 3 +++ src/mir_core/src/mir_core.def | 7 ++++++ src/mir_core/src/mir_core64.def | 7 ++++++ src/mir_core/src/miranda.cpp | 1 + src/mir_core/src/miranda.h | 1 + src/mir_core/src/ui_utils.cpp | 53 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 72 insertions(+) (limited to 'src') diff --git a/src/mir_core/src/hyperlink.cpp b/src/mir_core/src/hyperlink.cpp index 8810757f83..c985afe216 100644 --- a/src/mir_core/src/hyperlink.cpp +++ b/src/mir_core/src/hyperlink.cpp @@ -264,6 +264,9 @@ static LRESULT CALLBACK HyperlinkWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPA void InitHyperlink(void) { + g_hCursorNS = LoadCursor(NULL, IDC_SIZENS); + g_hCursorWE = LoadCursor(NULL, IDC_SIZEWE); + WNDCLASS wcl = { 0 }; wcl.lpfnWndProc = HyperlinkWndProc; wcl.cbWndExtra = sizeof(struct HyperlinkWndData*); diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def index cf69ac4029..2d0e961b20 100644 --- a/src/mir_core/src/mir_core.def +++ b/src/mir_core/src/mir_core.def @@ -1056,3 +1056,10 @@ CallFunctionSync @1170 ?length@MBinBuffer@@QBEIXZ @1213 NONAME ?remove@MBinBuffer@@QAEXI@Z @1214 NONAME ??ACDlgBase@@QAEPAVCCtrlBase@@H@Z @1215 NONAME +??0CSplitter@@QAE@ABV0@@Z @1216 NONAME +??0CSplitter@@QAE@PAVCDlgBase@@H@Z @1217 NONAME +??1CSplitter@@UAE@XZ @1218 NONAME +??4CSplitter@@QAEAAV0@ABV0@@Z @1219 NONAME +??_7CSplitter@@6B@ @1220 NONAME +?CustomWndProc@CSplitter@@MAEJIIJ@Z @1221 NONAME +?GetPos@CSplitter@@QBEHXZ @1222 NONAME diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def index e8c65808b9..985e595c74 100644 --- a/src/mir_core/src/mir_core64.def +++ b/src/mir_core/src/mir_core64.def @@ -1056,3 +1056,10 @@ CallFunctionSync @1170 ?length@MBinBuffer@@QEBA_KXZ @1213 NONAME ?remove@MBinBuffer@@QEAAX_K@Z @1214 NONAME ??ACDlgBase@@QEAAPEAVCCtrlBase@@H@Z @1215 NONAME +??0CSplitter@@QEAA@AEBV0@@Z @1216 NONAME +??0CSplitter@@QEAA@PEAVCDlgBase@@H@Z @1217 NONAME +??1CSplitter@@UEAA@XZ @1218 NONAME +??4CSplitter@@QEAAAEAV0@AEBV0@@Z @1219 NONAME +??_7CSplitter@@6B@ @1220 NONAME +?CustomWndProc@CSplitter@@MEAA_JI_K_J@Z @1221 NONAME +?GetPos@CSplitter@@QEBAHXZ @1222 NONAME diff --git a/src/mir_core/src/miranda.cpp b/src/mir_core/src/miranda.cpp index c74812d541..fdd553dd2c 100644 --- a/src/mir_core/src/miranda.cpp +++ b/src/mir_core/src/miranda.cpp @@ -43,6 +43,7 @@ void InitWinver(); int hLangpack = 0; HINSTANCE g_hInst = 0; +HCURSOR g_hCursorNS, g_hCursorWE; HANDLE hStackMutex, hThreadQueueEmpty; DWORD mir_tls = 0; diff --git a/src/mir_core/src/miranda.h b/src/mir_core/src/miranda.h index ac912282ec..03c0a9b52d 100644 --- a/src/mir_core/src/miranda.h +++ b/src/mir_core/src/miranda.h @@ -40,6 +40,7 @@ HINSTANCE ProtoGetInstance(const char *szModuleName); extern HINSTANCE g_hInst; extern HWND hAPCWindow; extern HANDLE hStackMutex, hThreadQueueEmpty; +extern HCURSOR g_hCursorNS, g_hCursorWE; extern MIDatabase *currDb; ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/mir_core/src/ui_utils.cpp b/src/mir_core/src/ui_utils.cpp index 66078c8c66..ade3c68e86 100644 --- a/src/mir_core/src/ui_utils.cpp +++ b/src/mir_core/src/ui_utils.cpp @@ -2570,6 +2570,59 @@ void CCtrlPages::OnDestroy() } } +///////////////////////////////////////////////////////////////////////////////////////// +// CSplitter + +CSplitter::CSplitter(CDlgBase *wnd, int idCtrl) + : CCtrlBase(wnd, idCtrl), + m_iPosition(0) +{ +} + +LRESULT CSplitter::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam) +{ + RECT rc; + + switch (msg) { + case WM_NCHITTEST: + return HTCLIENT; + + case WM_SETCURSOR: + GetClientRect(m_hwnd, &rc); + SetCursor(rc.right > rc.bottom ? g_hCursorNS : g_hCursorWE); + return TRUE; + + case WM_LBUTTONDOWN: + SetCapture(m_hwnd); + return 0; + + case WM_MOUSEMOVE: + if (GetCapture() == m_hwnd) { + POINT pt = { 0, 0 }; + GetClientRect(m_hwnd, &rc); + if (rc.right > rc.bottom) { + pt.y = HIWORD(GetMessagePos()) + rc.bottom / 2; + ScreenToClient(m_parentWnd->GetHwnd(), &pt); + m_iPosition = pt.y; + } + else { + pt.x = LOWORD(GetMessagePos()) + rc.right / 2; + ScreenToClient(m_parentWnd->GetHwnd(), &pt); + m_iPosition = pt.x; + } + + OnChange(this); + } + return 0; + + case WM_LBUTTONUP: + ReleaseCapture(); + return 0; + } + + return CSuper::CustomWndProc(msg, wParam, lParam); +} + ///////////////////////////////////////////////////////////////////////////////////////// // CCtrlBase -- cgit v1.2.3