Przyciąganie Do Krawędzi pulpitu BCB [C ++] 6

0

Witam, czy mogłby mi kots napisac funkcje ktora bedzie przyciągac forme do krawędzi ekranu i paska zdań ?, bardzo będe wdzięczny

0

Oto kod do przyciagania okna do krawedzi, ale dla VC++ i okna bez paska tytulowego i innych dupereli (czyli sam obszar klienta). Troche zmian i bedzie dzialac pod BC++.

W kodzie tym rolę paska tytułowego, czyli obszaru za ktory mozna zlapac okno i je przesunac pelni 15 pierwszych pixeli od gory okna klienta.

	static BOOL  bIsMoving = FALSE ; // Zmienna informujaca o tym czy okno jest aktualnie przesuwane
	static POINT pMouseDown , pMouseMove , pMouseMoveTo , pWindowPos ;

	case WM_LBUTTONDOWN:
		if ( HIWORD ( lParam ) < 15 )
		{
			bIsMoving = TRUE ;
			pMouseDown.x = LOWORD ( lParam ) ;
			pMouseDown.y = HIWORD ( lParam ) ;
			SetCapture ( hwnd ) ;
		}
		return 0 ;

	case WM_MOUSEMOVE :
		if ( bIsMoving )
		{
			pMouseMove.x = LOWORD ( lParam ) ;
			pMouseMove.y = HIWORD ( lParam ) ;

			if ( pMouseMove.x > iXScreen )
			{
				pMouseMove.x -= 65535;
			}
			if ( pMouseMove.y > iYScreen )
			{
				pMouseMove.y -= 65535;
			}

			GetClientRect ( hwnd , &rClient ) ;
			pWindowPos.x = rClient.left ;
			pWindowPos.y = rClient.top ;
			ClientToScreen ( hwnd , &pWindowPos ) ;

			pMouseMoveTo.x = pWindowPos.x + (pMouseMove.x - pMouseDown.x);
			pMouseMoveTo.y = pWindowPos.y + (pMouseMove.y - pMouseDown.y);

			if ( pMouseMoveTo.x < 10 )
			{
				pMouseMoveTo.x = 0;
			}
			else if ( GetSystemMetrics ( SM_CXFULLSCREEN ) - ( pMouseMoveTo.x + XWindow ) < 10 )
			{
				pMouseMoveTo.x = GetSystemMetrics ( SM_CXFULLSCREEN ) - XWindow ;
			}

			if ( pMouseMoveTo.y < 10 )
			{
				pMouseMoveTo.y = 0 ;
			}
			else if ( GetSystemMetrics ( SM_CYFULLSCREEN ) - ( pMouseMoveTo.y + YWindow ) + 26 < 10 )
			{
				pMouseMoveTo.y = GetSystemMetrics ( SM_CYFULLSCREEN ) - YWindow + 26 ;
			}

			XPos = pMouseMoveTo.x ;
			YPos = pMouseMoveTo.y ;
			MoveWindow ( hwnd , XPos , YPos , XWindow , YWindow , TRUE ) ;
		}
		return 0 ;

	case WM_LBUTTONUP:
		bIsMoving = FALSE ;
		ReleaseCapture ( ) ;
		return 0 ;
0

Fajnie, ale o vc nie mam pojęcia :P, wiec jak bys mogł mi to przekształcic na bcb to bym był wdzięczny ps. jest jaks kontoolka jaka mozna zastoapic kontrolke mediaplayer ? w bcb ?

0

jagi: A czemu akurat tak? Ja sobie kiedys wymyslilem taka opcje z przyciaganiem do krawedzi:

void OnWndEnterSizeMove(HWND hWnd)
{
	POINT cur_pos;
	RECT rcWindow;
	GetWindowRect(hWnd, &rcWindow);
	GetCursorPos(&cur_pos);
	cx = cur_pos.x - rcWindow.left;
	cy = cur_pos.y - rcWindow.top;
}

BOOL isClose(int a, int b)
{
	return abs(a-b) < 15;
}

BOOL OnWndMoving(HWND hWnd, LPRECT rect)
{
	POINT cur_pos;
	RECT wa;
	GetCursorPos(&cur_pos);
	OffsetRect(rect, cur_pos.x - (rect->left + cx),
		cur_pos.y - (rect->top + cy));
	SystemParametersInfo(SPI_GETWORKAREA, 0, &wa, 0);

	if(isClose(rect->left, wa.left))
		OffsetRect( rect, wa.left - rect->left, 0 );
	else if(isClose(wa.right, rect->right))
		OffsetRect( rect, wa.right - rect->right, 0 );

	if(isClose(rect->top, wa.top))
		OffsetRect(rect, 0, wa.top - rect->top);
	else if(isClose(wa.bottom, rect->bottom))
		OffsetRect(rect, 0, wa.bottom - rect->bottom);

	return TRUE;
}

LRESULT CALLBACK OknoGlowne_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_MOVING:
		OnWndMoving(hDlg, (LPRECT)lParam);
		break;
	case WM_ENTERSIZEMOVE:
		OnWndEnterSizeMove(hDlg);
		break;
	}
[...]
}

</cpp>

1 użytkowników online, w tym zalogowanych: 0, gości: 1