1
0
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:
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*/) 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);
} }

View File

@ -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;

View File

@ -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);
} }

View File

@ -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 |