void OpenGLRenderer::Finalize()
    {
        HDC hdc = GetDC ( static_cast<HWND> ( mWindowId ) );
        wglMakeCurrent ( hdc, static_cast<HGLRC> ( mOpenGLContext ) );
        OPENGL_CHECK_ERROR_NO_THROW;
        ATOM atom = GetClassWord ( static_cast<HWND> ( mWindowId ), GCW_ATOM );
        wglMakeCurrent ( hdc, nullptr );
        wglDeleteContext ( static_cast<HGLRC> ( mOpenGLContext ) );
        mOpenGLContext = nullptr;
        ReleaseDC ( static_cast<HWND> ( mWindowId ), hdc );
        DestroyWindow ( static_cast<HWND> ( mWindowId ) );
        UnregisterClass ( reinterpret_cast<LPCSTR> (
#if defined(_M_X64) || defined(__amd64__)
                              0x0ULL +
#endif
                              MAKELONG ( atom, 0 ) ), nullptr );
    }
Beispiel #2
0
BOOL PEXPORT kpc_set_window_background(ATOMID idWindow, HWND hWnd, 
                                       float fRed, float fGreen, float fBlue)
{
    short sRed = 0, sGreen = 0, sBlue = 0;

    if (hWnd == (HWND) -1 || 
        hWnd == KpphWndTraceCB() || hWnd == KpphWndKALCB())
        return FALSE;

    check_and_set_color(&sRed, &fRed);
    check_and_set_color(&sGreen, &fGreen);
    check_and_set_color(&sBlue, &fBlue);

    if (KpsIsASessionWindow(hWnd))
    {
        LISTID idBack = KppMakeList(0);

        KppAppendElem(idBack, KappaMakeInt(sRed));
        KppAppendElem(idBack, KappaMakeInt(sGreen));
        KppAppendElem(idBack, KappaMakeInt(sBlue));
        KppSetSlotValue(idWindow, lpSNs->idTextBackColorSN, idBack, EXPLIST);
    }   
    else
    {
        HBRUSH hOldBrush = GetClassWord(hWnd, GCW_HBRBACKGROUND);
        short sOffset = KpsGetWindowOffset(hWnd);
        
        SetClassWord(hWnd, GCW_HBRBACKGROUND,
                     CreateSolidBrush(RGB(sRed, sGreen, sBlue)));

        if (sOffset == -1)
            return FALSE;
        if (!bWinBackground[sOffset])
            bWinBackground[sOffset] = 1;
        else if (hOldBrush)
            DeleteObject(hOldBrush);
    }    

    InvalidateRect(hWnd, NULL, TRUE);
    UpdateWindow(hWnd);

    return TRUE;
}
Beispiel #3
0
HWND WINAPI
CreateWindow(LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle,
	     int X, int Y, int nWidth, int nHeight,
	     HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, 
	     LPVOID lpParam)
{
    HWND hWndTopLevelAncestor;
    DWORD dwExStyle = 0;
    ATOM atmClass;

    if ((dwStyle & WS_CHILD) && IsWindow(hWndParent)) {
	hWndTopLevelAncestor = GetTopLevelAncestor(hWndParent);
	atmClass = GetClassWord(hWndTopLevelAncestor,GCW_ATOM);
	if (atmClass == atmGlobalLookup[LOOKUP_DIALOGCLASS])
	    dwExStyle = WS_EX_NOPARENTNOTIFY;
    }
	
    return CreateWindowEx(dwExStyle,lpClassName,lpWindowName,dwStyle,X,Y,
		nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
}
Beispiel #4
0
void WINAPI
CheckRadioButton(HWND hDlg, int nIDFirst,int nIDLast,int nIDCheckButton)
{
    HWND	hWndCheck,hWndTemp;
    WORD wID;
    DWORD dwStyle;
    ATOM atmClassName;

    if (!(hWndCheck = GetDlgItem(hDlg,nIDCheckButton)))
        return;
    hWndTemp = GetNextDlgGroupItem(hDlg,hWndCheck,FALSE);
    while(hWndTemp && (hWndCheck != hWndTemp)) {
        wID = GetWindowID(hWndTemp);
        dwStyle = GetWindowLong(hWndTemp,GWL_STYLE);
        atmClassName = GetClassWord(hWndTemp,GCW_ATOM);
        if ((wID >= (WORD)nIDFirst) && (wID <= (WORD)nIDLast) &&
                (atmClassName == atmGlobalLookup[LOOKUP_BUTTON]) &&
                ((LOWORD(dwStyle) == BS_RADIOBUTTON) ||
                 (LOWORD(dwStyle) == BS_AUTORADIOBUTTON)))
            SendMessage(hWndTemp,BM_SETCHECK,FALSE,0);
        hWndTemp = GetNextDlgGroupItem(hDlg,hWndTemp,FALSE);
    }
    SendMessage(hWndCheck,BM_SETCHECK,TRUE,0);
}
Beispiel #5
0
ULONG FASTCALL WU32GetClassWord(PVDMFRAME pFrame)
{
    ULONG  ul, flag;
    HWND   hwnd;
    INT    iOffset;
    register PGETCLASSWORD16 parg16;

    GETARGPTR(pFrame, sizeof(GETCLASSWORD16), parg16);

    // Make sure Win32 didn't change offsets

#if (GCL_HBRBACKGROUND != (-10) || GCL_HCURSOR != (-12) || GCL_HICON != (-14) || GCL_HMODULE != (-16) || GCL_CBWNDEXTRA != (-18) || GCL_CBCLSEXTRA != (-20) || GCL_STYLE != (-26))
#error Win16/Win32 class-word constants differ
#endif

    // Make sure the 16-bit app is requesting allowable offsets
    // (It's just assertion code, so it doesn't have to be pretty! -JTP)

    iOffset = INT32(parg16->f2);
    WOW32ASSERT(iOffset >= 0 ||
        iOffset == GCL_HBRBACKGROUND ||
        iOffset == GCL_HCURSOR ||
        iOffset == GCL_HICON ||
        iOffset == GCL_HMODULE ||
        iOffset == GCL_CBWNDEXTRA ||
        iOffset == GCL_CBCLSEXTRA ||
        iOffset == GCL_STYLE ||
        iOffset == GCW_ATOM);

    hwnd = HWND32(parg16->f1);

    switch(iOffset) {
        case GCL_HBRBACKGROUND:
            ul = GetClassLong(hwnd, iOffset);
            if (ul > COLOR_ENDCOLORS)
                ul = GETHBRUSH16(ul);
            break;

        case GCL_HCURSOR:
            ul = GETHCURSOR16((HAND32)GetClassLong(hwnd, iOffset));
            break;

        case GCL_HICON:
            ul = GETHICON16((HAND32)GetClassLong(hwnd, iOffset));
            break;

        case GCL_HMODULE:
            ul = GetGCL_HMODULE(hwnd);
            break;

        case GCL_CBWNDEXTRA:
        case GCL_STYLE:
            ul = GetClassLong(hwnd, iOffset);
            break;

        case GCL_CBCLSEXTRA:
            ul = GetClassLong(hwnd, GCL_CBCLSEXTRA);

            // verify that this class was registered by WOW
            // (see GCW_CBCLSEXTRA notes in thunk for RegisterClass())
            if(GetClassLong(hwnd, GCL_WNDPROC) & WNDPROC_WOW) { 

                // get the bozo flag
                iOffset = ul - sizeof(DWORD);
                flag    = GetClassLong(hwnd, iOffset);

                // if bozo app flag is set, get the value the app saved
                // otherwise good little apps get cbClsExtra
                if(flag) {
                    iOffset -= sizeof(DWORD);
                    ul = GetClassWord(hwnd, iOffset);
                }
                else {
                    ul -= (2 * sizeof(DWORD)); // account for our WOW DWORDs
                }
            }
            break;


        default:
            ul = GetClassWord(hwnd, iOffset);
            break;
    }

    FREEARGPTR(parg16);
    RETURN(ul);
}
Beispiel #6
0
LRESULT WINAPI
SendMessage(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
#ifdef	STRICT
	WNDPROC lpfnWndProc;
#else
	FARPROC lpfnWndProc;
#endif
	DWORD rc;
        BOOL      cInSendMessage;
	MSG	  msg;
	HWND32	  hWnd32;

#ifdef	DEBUG
	memset((LPSTR)&msg,'\0',sizeof(MSG));
#endif

    	if(hWnd == HWND_BROADCAST) {

		msg.message = wMsg;
		msg.wParam  = wParam;
		msg.lParam  = lParam;

		/*send to all top level windows */
		return EnumWindows((WNDENUMPROC)MultiSendMsg,(LONG)&msg);
    	}

	/* 
	 * Is this a valid window? 
	 */
	if (!(hWnd32 = CHECKHWND32(hWnd)))
	    return 0;
	
	/*
	 * Does the window have a valid task?
	 */
	if (GetWindowTask(hWnd) == 0 || 
	    !TWIN_IsLiveTask(GetWindowTask(hWnd))) {
	    RELEASEWININFO(hWnd32);
	    return 0;
	 }

	/* 
	 * Is this window dead? 
	 */
	if (hWnd32->dwWinFlags & WFDEAD) {
	    RELEASEWININFO(hWnd32);
	    return 0;
	}

	/* 
	 * Window is a good destination.  Intertask send? 
	 */
	if (hWnd != 0 && GetWindowTask(hWnd) != GetCurrentTask())
	{
	    ITSMINFO smse;
	    
	    /* save current InSendMessage Flag */
	    cInSendMessage = bInSendMessage;

	    /* we are now in sendmessage */
	    bInSendMessage = TRUE;

	    smse.hSendingTask = GetCurrentTask();
	    smse.hReceivingTask = GetWindowTask(hWnd);
	    smse.msg.hwnd = hWnd;
	    smse.msg.message = wMsg;
	    smse.msg.wParam = wParam;
	    smse.msg.lParam = lParam;
	    smse.bSendReceived = FALSE;
	    smse.bSendCompleted = FALSE;
	    smse.lpPrev = lpSendMessageStack;
	    lpSendMessageStack = &smse;
	    
	    DirectedYield(smse.hReceivingTask);
	    while (!smse.bSendCompleted)
	    {
		TWIN_ReceiveMessage(TRUE);
	    }

	    lpSendMessageStack = smse.lpPrev;

	    /* back to what it was before... */
	    bInSendMessage = cInSendMessage;

	    RELEASEWININFO(hWnd32);
	    return smse.lResult;
	}

    	if ((lpfnWndProc =
#ifdef	STRICT
		(WNDPROC)
#else
		(FARPROC)
#endif
			GetWindowLong(hWnd, GWL_WNDPROC)) == NULL) {
	    	ERRSTR((LF_WARNING,"SendMessage: Null wndproc!\n"));
		RELEASEWININFO(hWnd32);
		return(0L);
    	}

    	/* save current InSendMessage Flag */
    	cInSendMessage = bInSendMessage;

    	/* we are now in sendmessage */
    	bInSendMessage = TRUE;
    	if (lpHookList[WH_CALLWNDPROC+1]) {
		ATOM atmClassName;
		HOOKINFO hki;
	
		if ((atmClassName = GetClassWord(hWnd,GCW_ATOM)) !=
			atmGlobalLookup[LOOKUP_FRAME]) {
	    	hki.hWnd = hWnd;
	    	hki.msg = wMsg;
	    	hki.wParam  = wParam;
	    	hki.lParam  = lParam;

		msg.hwnd = hWnd;
		msg.message = wMsg;
		msg.wParam = wParam;
		msg.lParam = lParam;
	    	lpHookList[WH_CALLWNDPROC+1]->lpfnHookProc(0,0,(LPARAM)&hki);
		}
    	}

    	rc = TWIN_CallWindowProc(lpfnWndProc,0,hWnd, wMsg, wParam, lParam);

	RELEASEWININFO(hWnd32);
    	/* back to what it was before... */
    	bInSendMessage = cInSendMessage;
    	return rc;
}