mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-21 10:13:43 +03:00
0024088: Unsafe window handle management in Draw using GetWindowLong
Replaced Get-/SetWindowLong with Get-/SetWindowLongPtr in files of TKDraw. Reverted the unrelated changes
This commit is contained in:
parent
db8e4b9aa6
commit
e89e2d67ba
@ -53,12 +53,8 @@
|
|||||||
HWND CreateCommandWindow(HWND hWnd, int /*nitem*/)
|
HWND CreateCommandWindow(HWND hWnd, int /*nitem*/)
|
||||||
{
|
{
|
||||||
HINSTANCE hInstance;
|
HINSTANCE hInstance;
|
||||||
|
hInstance = (HINSTANCE)GetWindowLongPtr(hWnd,GWLP_HINSTANCE);
|
||||||
|
|
||||||
#ifndef _WIN64
|
|
||||||
hInstance = (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
|
|
||||||
#else
|
|
||||||
hInstance = (HINSTANCE)GetWindowLong(hWnd,GWLP_HINSTANCE);
|
|
||||||
#endif
|
|
||||||
HWND hWndCommand = (CreateWindow(COMMANDCLASS, COMMANDTITLE,
|
HWND hWndCommand = (CreateWindow(COMMANDCLASS, COMMANDTITLE,
|
||||||
WS_CLIPCHILDREN | WS_OVERLAPPED |
|
WS_CLIPCHILDREN | WS_OVERLAPPED |
|
||||||
WS_THICKFRAME | WS_CAPTION ,
|
WS_THICKFRAME | WS_CAPTION ,
|
||||||
@ -83,7 +79,7 @@ LRESULT APIENTRY CommandProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam
|
|||||||
{
|
{
|
||||||
case WM_CREATE :
|
case WM_CREATE :
|
||||||
CommandCreateProc(hWnd);
|
CommandCreateProc(hWnd);
|
||||||
hWndEdit = (HWND)GetWindowLong(hWnd, CLIENTWND);
|
hWndEdit = (HWND)GetWindowLongPtr(hWnd, CLIENTWND);
|
||||||
SendMessage(hWndEdit,EM_REPLACESEL, 0,(LPARAM)PROMPT);
|
SendMessage(hWndEdit,EM_REPLACESEL, 0,(LPARAM)PROMPT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -95,7 +91,7 @@ LRESULT APIENTRY CommandProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam
|
|||||||
|
|
||||||
case WM_SIZE :
|
case WM_SIZE :
|
||||||
{
|
{
|
||||||
hWndEdit = (HWND)GetWindowLong(hWnd, CLIENTWND);
|
hWndEdit = (HWND)GetWindowLongPtr(hWnd, CLIENTWND);
|
||||||
MoveWindow(hWndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
|
MoveWindow(hWndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
|
||||||
// Place the cursor at the end of the buffer
|
// Place the cursor at the end of the buffer
|
||||||
// Nb of characters in the buffer of hWndEdit
|
// Nb of characters in the buffer of hWndEdit
|
||||||
@ -105,7 +101,7 @@ LRESULT APIENTRY CommandProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam
|
|||||||
}
|
}
|
||||||
|
|
||||||
case WM_SETFOCUS :
|
case WM_SETFOCUS :
|
||||||
hWndEdit = (HWND)GetWindowLong(hWnd, CLIENTWND);
|
hWndEdit = (HWND)GetWindowLongPtr(hWnd, CLIENTWND);
|
||||||
SetFocus(hWndEdit);
|
SetFocus(hWndEdit);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -124,11 +120,8 @@ LRESULT APIENTRY EditProc(HWND, UINT, WPARAM, LPARAM);
|
|||||||
BOOL CommandCreateProc(HWND hWnd)
|
BOOL CommandCreateProc(HWND hWnd)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifndef _WIN64
|
HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
|
||||||
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
|
|
||||||
#else
|
|
||||||
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWLP_HINSTANCE);
|
|
||||||
#endif
|
|
||||||
HWND hWndEdit = CreateWindow("EDIT",NULL,
|
HWND hWndEdit = CreateWindow("EDIT",NULL,
|
||||||
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
|
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
|
||||||
ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
|
ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
|
||||||
@ -138,26 +131,19 @@ BOOL CommandCreateProc(HWND hWnd)
|
|||||||
|
|
||||||
// Save hWndEdit in the extra memory in 0 of CommandWindow
|
// Save hWndEdit in the extra memory in 0 of CommandWindow
|
||||||
if (hWndEdit)
|
if (hWndEdit)
|
||||||
SetWindowLong(hWnd, CLIENTWND, (LONG)hWndEdit);
|
SetWindowLongPtr(hWnd, CLIENTWND, (LONG_PTR)hWndEdit);
|
||||||
|
|
||||||
// Sub-Class of the window
|
// Sub-Class of the window
|
||||||
//-------
|
//-------
|
||||||
// Save the pointer on the existing procedure
|
// Save the pointer on the existing procedure
|
||||||
#ifdef STRICT
|
#ifdef STRICT
|
||||||
#ifndef _WIN64
|
OldEditProc = (WNDPROC)GetWindowLongPtr(hWndEdit, GWLP_WNDPROC);
|
||||||
OldEditProc = (WNDPROC)GetWindowLong(hWndEdit, GWL_WNDPROC);
|
|
||||||
#else
|
#else
|
||||||
OldEditProc = (WNDPROC)GetWindowLong(hWndEdit, GWLP_WNDPROC);
|
OldEditProc = (FARPROC)GetWindowLongPtr(hWndEdit, GWLP_WNDPROC);
|
||||||
#endif // _WIN64
|
|
||||||
#else
|
|
||||||
OldEditProc = (FARPROC)GetWindowLong(hWndEdit, GWL_WNDPROC);
|
|
||||||
#endif
|
#endif
|
||||||
// Implement the new function
|
// Implement the new function
|
||||||
#ifndef _WIN64
|
SetWindowLongPtr(hWndEdit, GWLP_WNDPROC, (LONG_PTR) EditProc);
|
||||||
SetWindowLong(hWndEdit, GWL_WNDPROC, (LONG) EditProc);
|
|
||||||
#else
|
|
||||||
SetWindowLong(hWndEdit, GWLP_WNDPROC, (LONG) EditProc);
|
|
||||||
#endif
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1353,11 +1353,7 @@ HWND DrawWindow::CreateDrawWindow(HWND hWndClient, int nitem)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
HANDLE hInstance;
|
HANDLE hInstance;
|
||||||
#ifndef _WIN64
|
hInstance = (HANDLE)GetWindowLongPtr(hWndClient,GWLP_HINSTANCE);
|
||||||
hInstance = (HANDLE)GetWindowLong(hWndClient,GWL_HINSTANCE);
|
|
||||||
#else
|
|
||||||
hInstance = (HANDLE)GetWindowLong(hWndClient,GWLP_HINSTANCE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return CreateMDIWindow(DRAWCLASS, DRAWTITLE,
|
return CreateMDIWindow(DRAWCLASS, DRAWTITLE,
|
||||||
WS_CAPTION | WS_CHILD | WS_THICKFRAME,
|
WS_CAPTION | WS_CHILD | WS_THICKFRAME,
|
||||||
@ -1372,7 +1368,7 @@ HWND DrawWindow::CreateDrawWindow(HWND hWndClient, int nitem)
|
|||||||
\*--------------------------------------------------------*/
|
\*--------------------------------------------------------*/
|
||||||
LRESULT APIENTRY DrawWindow::DrawProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
|
LRESULT APIENTRY DrawWindow::DrawProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
|
||||||
{
|
{
|
||||||
DrawWindow* localObjet = (DrawWindow*)GetWindowLong(hWnd, CLIENTWND);
|
DrawWindow* localObjet = (DrawWindow*)GetWindowLongPtr(hWnd, CLIENTWND);
|
||||||
if (!localObjet)
|
if (!localObjet)
|
||||||
{
|
{
|
||||||
if (Draw_IsConsoleSubsystem)
|
if (Draw_IsConsoleSubsystem)
|
||||||
@ -1514,7 +1510,7 @@ void DrawWindow::Init(Standard_Integer theXLeft, Standard_Integer theYTop,
|
|||||||
SetPosition (aRect.left, aRect.top);
|
SetPosition (aRect.left, aRect.top);
|
||||||
SetDimension (aRect.right - aRect.left, aRect.bottom - aRect.top);
|
SetDimension (aRect.right - aRect.left, aRect.bottom - aRect.top);
|
||||||
// Save the pointer at the instance associated to the window
|
// Save the pointer at the instance associated to the window
|
||||||
SetWindowLong(win, CLIENTWND, (LONG)this);
|
SetWindowLongPtr(win, CLIENTWND, (LONG_PTR)this);
|
||||||
HDC hDC = GetDC(win);
|
HDC hDC = GetDC(win);
|
||||||
SetBkColor(hDC, RGB(0, 0, 0));
|
SetBkColor(hDC, RGB(0, 0, 0));
|
||||||
myCurrPen = 3;
|
myCurrPen = 3;
|
||||||
|
@ -41,7 +41,7 @@ LRESULT APIENTRY WndProc(HWND hWndFrame, UINT wMsg, WPARAM wParam, LPARAM lParam
|
|||||||
case WM_CREATE :
|
case WM_CREATE :
|
||||||
{
|
{
|
||||||
CreateProc(hWndFrame);
|
CreateProc(hWndFrame);
|
||||||
hWndClient = (HWND)GetWindowLong(hWndFrame, CLIENTWND);
|
hWndClient = (HWND)GetWindowLongPtr(hWndFrame, CLIENTWND);
|
||||||
DrawWindow::hWndClientMDI = hWndClient;
|
DrawWindow::hWndClientMDI = hWndClient;
|
||||||
if (!Draw_IsConsoleSubsystem)
|
if (!Draw_IsConsoleSubsystem)
|
||||||
CreateCommandWindow(hWndFrame,0);
|
CreateCommandWindow(hWndFrame,0);
|
||||||
@ -58,7 +58,7 @@ LRESULT APIENTRY WndProc(HWND hWndFrame, UINT wMsg, WPARAM wParam, LPARAM lParam
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default :
|
default :
|
||||||
hWndClient = (HWND)GetWindowLong(hWndFrame, CLIENTWND);
|
hWndClient = (HWND)GetWindowLongPtr(hWndFrame, CLIENTWND);
|
||||||
return(DefFrameProc(hWndFrame, hWndClient, wMsg, wParam, lParam));
|
return(DefFrameProc(hWndFrame, hWndClient, wMsg, wParam, lParam));
|
||||||
}
|
}
|
||||||
return(0l);
|
return(0l);
|
||||||
@ -76,7 +76,7 @@ BOOL CreateProc(HWND hWndFrame)
|
|||||||
if (hWnd != NULL)
|
if (hWnd != NULL)
|
||||||
{
|
{
|
||||||
// Save hWnd in the main window in extra memory in 0
|
// Save hWnd in the main window in extra memory in 0
|
||||||
SetWindowLong(hWndFrame, CLIENTWND, (LONG)hWnd);
|
SetWindowLongPtr(hWndFrame, CLIENTWND, (LONG_PTR)hWnd);
|
||||||
}
|
}
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
@ -90,7 +90,7 @@ BOOL CreateProc(HWND hWndFrame)
|
|||||||
BOOL CommandProc(HWND hWndFrame, WPARAM wParam, LPARAM /*lParam*/)
|
BOOL CommandProc(HWND hWndFrame, WPARAM wParam, LPARAM /*lParam*/)
|
||||||
{
|
{
|
||||||
// Handle on window MDI
|
// Handle on window MDI
|
||||||
HWND hWndClient = (HWND)GetWindowLong (hWndFrame, CLIENTWND);
|
HWND hWndClient = (HWND)GetWindowLongPtr (hWndFrame, CLIENTWND);
|
||||||
switch (LOWORD(wParam))
|
switch (LOWORD(wParam))
|
||||||
{
|
{
|
||||||
case IDM_WINDOW_NEXT :
|
case IDM_WINDOW_NEXT :
|
||||||
@ -134,11 +134,8 @@ BOOL CommandProc(HWND hWndFrame, WPARAM wParam, LPARAM /*lParam*/)
|
|||||||
\*--------------------------------------------------------------------------*/
|
\*--------------------------------------------------------------------------*/
|
||||||
VOID DestroyProc(HWND hWnd)
|
VOID DestroyProc(HWND hWnd)
|
||||||
{
|
{
|
||||||
#ifndef _WIN64
|
HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
|
||||||
HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
|
|
||||||
#else
|
|
||||||
HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWLP_HINSTANCE);
|
|
||||||
#endif
|
|
||||||
Destroy_Appli(hInst);
|
Destroy_Appli(hInst);
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
}
|
}
|
||||||
|
@ -136,11 +136,7 @@ HWND CreateMDIClientWindow(HWND hWndFrame)
|
|||||||
ccs.hWindowMenu = NULL;
|
ccs.hWindowMenu = NULL;
|
||||||
ccs.idFirstChild = 0;
|
ccs.idFirstChild = 0;
|
||||||
|
|
||||||
#ifndef _WIN64
|
hInstance = (HANDLE)GetWindowLongPtr(hWndFrame, GWLP_HINSTANCE);
|
||||||
hInstance = (HANDLE)GetWindowLong(hWndFrame, GWL_HINSTANCE);
|
|
||||||
#else
|
|
||||||
hInstance = (HANDLE)GetWindowLong(hWndFrame, GWLP_HINSTANCE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
hWndClient = CreateWindow("MDICLIENT",NULL,
|
hWndClient = CreateWindow("MDICLIENT",NULL,
|
||||||
WS_CHILD | WS_CLIPSIBLINGS |
|
WS_CHILD | WS_CLIPSIBLINGS |
|
||||||
|
Loading…
x
Reference in New Issue
Block a user