1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-09 18:50:54 +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:
omy 2014-01-16 12:16:56 +04:00 committed by bugmaster
parent db8e4b9aa6
commit e89e2d67ba
4 changed files with 22 additions and 47 deletions

View File

@ -53,12 +53,8 @@
HWND CreateCommandWindow(HWND hWnd, int /*nitem*/)
{
HINSTANCE hInstance;
#ifndef _WIN64
hInstance = (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
#else
hInstance = (HINSTANCE)GetWindowLong(hWnd,GWLP_HINSTANCE);
#endif
hInstance = (HINSTANCE)GetWindowLongPtr(hWnd,GWLP_HINSTANCE);
HWND hWndCommand = (CreateWindow(COMMANDCLASS, COMMANDTITLE,
WS_CLIPCHILDREN | WS_OVERLAPPED |
WS_THICKFRAME | WS_CAPTION ,
@ -83,7 +79,7 @@ LRESULT APIENTRY CommandProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam
{
case WM_CREATE :
CommandCreateProc(hWnd);
hWndEdit = (HWND)GetWindowLong(hWnd, CLIENTWND);
hWndEdit = (HWND)GetWindowLongPtr(hWnd, CLIENTWND);
SendMessage(hWndEdit,EM_REPLACESEL, 0,(LPARAM)PROMPT);
break;
@ -95,7 +91,7 @@ LRESULT APIENTRY CommandProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam
case WM_SIZE :
{
hWndEdit = (HWND)GetWindowLong(hWnd, CLIENTWND);
hWndEdit = (HWND)GetWindowLongPtr(hWnd, CLIENTWND);
MoveWindow(hWndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
// Place the cursor at the end of the buffer
// 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 :
hWndEdit = (HWND)GetWindowLong(hWnd, CLIENTWND);
hWndEdit = (HWND)GetWindowLongPtr(hWnd, CLIENTWND);
SetFocus(hWndEdit);
break;
@ -124,11 +120,8 @@ LRESULT APIENTRY EditProc(HWND, UINT, WPARAM, LPARAM);
BOOL CommandCreateProc(HWND hWnd)
{
#ifndef _WIN64
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
#else
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWLP_HINSTANCE);
#endif
HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
HWND hWndEdit = CreateWindow("EDIT",NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
@ -138,26 +131,19 @@ BOOL CommandCreateProc(HWND hWnd)
// Save hWndEdit in the extra memory in 0 of CommandWindow
if (hWndEdit)
SetWindowLong(hWnd, CLIENTWND, (LONG)hWndEdit);
SetWindowLongPtr(hWnd, CLIENTWND, (LONG_PTR)hWndEdit);
// Sub-Class of the window
//-------
// Save the pointer on the existing procedure
#ifdef STRICT
#ifndef _WIN64
OldEditProc = (WNDPROC)GetWindowLong(hWndEdit, GWL_WNDPROC);
#else
OldEditProc = (WNDPROC)GetWindowLong(hWndEdit, GWLP_WNDPROC);
#endif // _WIN64
OldEditProc = (WNDPROC)GetWindowLongPtr(hWndEdit, GWLP_WNDPROC);
#else
OldEditProc = (FARPROC)GetWindowLong(hWndEdit, GWL_WNDPROC);
OldEditProc = (FARPROC)GetWindowLongPtr(hWndEdit, GWLP_WNDPROC);
#endif
// Implement the new function
#ifndef _WIN64
SetWindowLong(hWndEdit, GWL_WNDPROC, (LONG) EditProc);
#else
SetWindowLong(hWndEdit, GWLP_WNDPROC, (LONG) EditProc);
#endif
SetWindowLongPtr(hWndEdit, GWLP_WNDPROC, (LONG_PTR) EditProc);
return(TRUE);
}

View File

@ -1353,11 +1353,7 @@ HWND DrawWindow::CreateDrawWindow(HWND hWndClient, int nitem)
}
else {
HANDLE hInstance;
#ifndef _WIN64
hInstance = (HANDLE)GetWindowLong(hWndClient,GWL_HINSTANCE);
#else
hInstance = (HANDLE)GetWindowLong(hWndClient,GWLP_HINSTANCE);
#endif
hInstance = (HANDLE)GetWindowLongPtr(hWndClient,GWLP_HINSTANCE);
return CreateMDIWindow(DRAWCLASS, DRAWTITLE,
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 )
{
DrawWindow* localObjet = (DrawWindow*)GetWindowLong(hWnd, CLIENTWND);
DrawWindow* localObjet = (DrawWindow*)GetWindowLongPtr(hWnd, CLIENTWND);
if (!localObjet)
{
if (Draw_IsConsoleSubsystem)
@ -1514,7 +1510,7 @@ void DrawWindow::Init(Standard_Integer theXLeft, Standard_Integer theYTop,
SetPosition (aRect.left, aRect.top);
SetDimension (aRect.right - aRect.left, aRect.bottom - aRect.top);
// 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);
SetBkColor(hDC, RGB(0, 0, 0));
myCurrPen = 3;

View File

@ -41,7 +41,7 @@ LRESULT APIENTRY WndProc(HWND hWndFrame, UINT wMsg, WPARAM wParam, LPARAM lParam
case WM_CREATE :
{
CreateProc(hWndFrame);
hWndClient = (HWND)GetWindowLong(hWndFrame, CLIENTWND);
hWndClient = (HWND)GetWindowLongPtr(hWndFrame, CLIENTWND);
DrawWindow::hWndClientMDI = hWndClient;
if (!Draw_IsConsoleSubsystem)
CreateCommandWindow(hWndFrame,0);
@ -58,7 +58,7 @@ LRESULT APIENTRY WndProc(HWND hWndFrame, UINT wMsg, WPARAM wParam, LPARAM lParam
break;
default :
hWndClient = (HWND)GetWindowLong(hWndFrame, CLIENTWND);
hWndClient = (HWND)GetWindowLongPtr(hWndFrame, CLIENTWND);
return(DefFrameProc(hWndFrame, hWndClient, wMsg, wParam, lParam));
}
return(0l);
@ -76,7 +76,7 @@ BOOL CreateProc(HWND hWndFrame)
if (hWnd != NULL)
{
// Save hWnd in the main window in extra memory in 0
SetWindowLong(hWndFrame, CLIENTWND, (LONG)hWnd);
SetWindowLongPtr(hWndFrame, CLIENTWND, (LONG_PTR)hWnd);
}
return(TRUE);
}
@ -90,7 +90,7 @@ BOOL CreateProc(HWND hWndFrame)
BOOL CommandProc(HWND hWndFrame, WPARAM wParam, LPARAM /*lParam*/)
{
// Handle on window MDI
HWND hWndClient = (HWND)GetWindowLong (hWndFrame, CLIENTWND);
HWND hWndClient = (HWND)GetWindowLongPtr (hWndFrame, CLIENTWND);
switch (LOWORD(wParam))
{
case IDM_WINDOW_NEXT :
@ -134,11 +134,8 @@ BOOL CommandProc(HWND hWndFrame, WPARAM wParam, LPARAM /*lParam*/)
\*--------------------------------------------------------------------------*/
VOID DestroyProc(HWND hWnd)
{
#ifndef _WIN64
HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
#else
HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWLP_HINSTANCE);
#endif
HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
Destroy_Appli(hInst);
PostQuitMessage(0);
}

View File

@ -136,11 +136,7 @@ HWND CreateMDIClientWindow(HWND hWndFrame)
ccs.hWindowMenu = NULL;
ccs.idFirstChild = 0;
#ifndef _WIN64
hInstance = (HANDLE)GetWindowLong(hWndFrame, GWL_HINSTANCE);
#else
hInstance = (HANDLE)GetWindowLong(hWndFrame, GWLP_HINSTANCE);
#endif
hInstance = (HANDLE)GetWindowLongPtr(hWndFrame, GWLP_HINSTANCE);
hWndClient = CreateWindow("MDICLIENT",NULL,
WS_CHILD | WS_CLIPSIBLINGS |