/
swell-win32.h
58 lines (45 loc) · 1.5 KB
/
swell-win32.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#ifndef _SWELL_WIN32_H_
#define _SWELL_WIN32_H_
/*************
** helpers to give swell-like functionality on win32
*/
#ifdef _WIN32
void SWELL_DisableContextMenu(HWND h, bool dis);
#ifndef SWELL_WIN32_DECLARE_ONLY
#include <windows.h>
#include "../wdltypes.h"
#define SWELL_DISABLE_CTX_OLDPROC_NAME "SWELLDisableCtxOldProc"
static LRESULT WINAPI swellDisableCtxNewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HANDLE oldProc = uMsg != WM_CONTEXTMENU ? GetProp(hwnd,SWELL_DISABLE_CTX_OLDPROC_NAME) : NULL;
if (uMsg == WM_DESTROY)
{
RemoveProp(hwnd,SWELL_DISABLE_CTX_OLDPROC_NAME);
if (oldProc) SetWindowLongPtr(hwnd,GWLP_WNDPROC,(LPARAM)oldProc);
}
return oldProc ? CallWindowProc((WNDPROC)oldProc,hwnd,uMsg,wParam,lParam) : DefWindowProc(hwnd,uMsg,wParam,lParam);
}
void SWELL_DisableContextMenu(HWND h, bool dis)
{
char classname[512];
if (WDL_NOT_NORMALLY(!h)) return;
if (GetClassName(h,classname,sizeof(classname)) && !strcmp(classname,"ComboBox"))
{
HWND h2 = FindWindowEx(h,NULL,"Edit",NULL);
if (h2) h = h2;
}
if (dis)
{
if (!GetProp(h,SWELL_DISABLE_CTX_OLDPROC_NAME))
SetProp(h,SWELL_DISABLE_CTX_OLDPROC_NAME,(HANDLE)SetWindowLongPtr(h,GWLP_WNDPROC,(LPARAM)swellDisableCtxNewWndProc));
}
else
{
LPARAM op = (LPARAM)GetProp(h,SWELL_DISABLE_CTX_OLDPROC_NAME);
if (op) SetWindowLongPtr(h,GWLP_WNDPROC,op);
RemoveProp(h,SWELL_DISABLE_CTX_OLDPROC_NAME);
}
}
#endif // !SWELL_WIN32_DECLARE_ONLY
#endif // _WIN32
#endif // _SWELL_WIN32_H_