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