📄 cursor.cpp
字号:
// ObjectWindows - (C) Copyright 1992 by Borland International
#include <owl.h>
#include <dialog.h>
#include <stdlib.h>
#include "cursor.h"
class TCursorDlg : public TDialog {
BOOL bUpdateDialog;
public:
TCursorDlg( PTWindowsObject AParent, LPSTR AName )
: TDialog( AParent, AName ), bUpdateDialog( FALSE ) {}
void SetDlgItemText( int nIDDlgItem, LPSTR lpString );
virtual LPSTR GetClassName( void );
virtual void GetWindowClass( WNDCLASS& );
virtual void Ok( TMessage& Msg ) = [ ID_FIRST + IDOK ];
virtual void Cancel( TMessage& Msg ) = [ ID_FIRST + IDCANCEL ];
virtual void WMInitDialog( TMessage& Msg )
= [ WM_FIRST + WM_INITDIALOG ];
virtual void CloseWindow();
void UpdateDialog( void );
BOOL ShouldUpdate() { return bUpdateDialog; }
};
/*
This function sets the caption or text of a control in the dialog
box. The control whose text is to be set is specified by
nIDDlgItem.
*/
void TCursorDlg::SetDlgItemText( int nDlgItemID, LPSTR lpString )
{
::SetDlgItemText( HWindow, nDlgItemID, lpString );
}
void TCursorDlg::WMInitDialog( TMessage& )
{
SetupWindow();
bUpdateDialog = TRUE;
}
// Override the meaning of 'OK' to do nothing.
void TCursorDlg::Ok( TMessage& ) {}
void TCursorDlg::Cancel( TMessage& ) {}
void TCursorDlg::CloseWindow()
{
bUpdateDialog = FALSE; // disable updating
TWindowsObject::CloseWindow();
}
LPSTR TCursorDlg::GetClassName( void )
{
return( "CursorDlg" );
}
void TCursorDlg::GetWindowClass( WNDCLASS& AWndClass )
{
TDialog::GetWindowClass( AWndClass );
AWndClass.hIcon = LoadIcon( GetApplication()->hInstance, "CursorDlg" );
}
inline BOOL operator != ( POINT& p1, POINT& p2 )
{
if ( ( p1.x != p2.x ) || ( p1.y != p2.y ) )
return TRUE;
else
return FALSE;
}
inline BOOL operator != ( RECT& r1, RECT& r2 )
{
if ( ( r1.left != r2.left ) || ( r1.top != r2.top ) ||
( r1.right != r2.right ) || ( r1.bottom != r2.bottom ) )
return TRUE;
else
return FALSE;
}
void TCursorDlg::UpdateDialog( void )
{
POINT Point;
static POINT prevPoint = { -1, -1 };
static HWND hPrevWnd = (HWND)-1, hPrevParent = (HWND)-1;
HWND hWndFromPt, hParent = hPrevParent;
HWND hFocus;
static HWND hPrevFocus = (HWND)-1;
static RECT Rect, prevRect = { -1, -1, -1, -1 };
char szBuffer[26];
if ( bUpdateDialog )
{
GetCursorPos( &Point );
// If the cursor position has changed...
if ( Point != prevPoint )
{
prevPoint = Point;
SetDlgItemText( IDD_SX, ltoa( Point.x, szBuffer, 10 ) );
SetDlgItemText( IDD_SY, ltoa( Point.y, szBuffer, 10 ) );
// Turn off warning that struct is passed by value in call to WindowFromPoint.
#pragma warn -stv
if ( ( hWndFromPt = WindowFromPoint( Point ) ) != 0 )
#pragma warn +stv
{
// Set the x and y coordinates in terms
// of the client area of the underlying window.
ScreenToClient( hWndFromPt, &Point );
SetDlgItemText( IDD_WX,
ltoa( Point.x, szBuffer, 10 ) );
SetDlgItemText( IDD_WY,
ltoa( Point.y, szBuffer, 10 ) );
if ( ( hParent = GetParent( hWndFromPt ) ) != 0 )
{
// Set the x and y coordinates in
// terms of the client area of
// the parent of the window.
Point = prevPoint;
ScreenToClient( hParent, &Point );
SetDlgItemText( IDD_PX,
ltoa( Point.x, szBuffer, 10 ) );
SetDlgItemText( IDD_PY,
ltoa( Point.y, szBuffer, 10 ) );
}
else
{
// If the window has no parent,
// leave the x and y fields blank.
SetDlgItemText( IDD_PX, "" );
SetDlgItemText( IDD_PY, "" );
}
}
// If there is no window at the current point,
// the x and y coordinates should be blank
// in the dialog box.
else
{
SetDlgItemText( IDD_WX, "" );
SetDlgItemText( IDD_WY, "" );
}
// Update the display of the handle of the
// underlying window if necessary.
if ( hWndFromPt != hPrevWnd )
SetDlgItemText( IDD_HW,
ltoa( (LONG)hWndFromPt, szBuffer, 10 ) );
// If the parent window has changed,
// update the display of its handle.
if ( hParent != hPrevParent )
{
if( ( hWndFromPt == 0 ) || ( hParent == 0 ) )
SetDlgItemText( IDD_HP, "" );
else
SetDlgItemText( IDD_HP,
ltoa( (LONG)hParent, szBuffer, 10 ) );
}
else
{
// If there is no underlying window,
// do not display a handle for a parent.
if ( hWndFromPt == 0 )
SetDlgItemText( IDD_HP, "" );
}
hPrevWnd = hWndFromPt;
hPrevParent = hParent;
}
// Update the focus display fields if necessary.
hFocus = GetFocus();
if ( hFocus == 0 )
{
if( hFocus != hPrevFocus )
{
SetDlgItemText( IDD_HF, "" );
SetDlgItemText( IDD_LEFT, "" );
SetDlgItemText( IDD_TOP, "" );
SetDlgItemText( IDD_RIGHT, "" );
SetDlgItemText( IDD_BOTTOM, "" );
}
}
else
{
if( hFocus != hPrevFocus )
{
SetDlgItemText( IDD_HF,
ltoa( (LONG)hFocus, szBuffer, 10 ) );
}
GetWindowRect( hFocus, &Rect );
if ( Rect != prevRect )
{
prevRect = Rect;
SetDlgItemText( IDD_LEFT,
ltoa( Rect.left, szBuffer, 10 ) );
SetDlgItemText( IDD_TOP,
ltoa( Rect.top, szBuffer, 10 ) );
SetDlgItemText( IDD_RIGHT,
ltoa( Rect.right, szBuffer, 10 ) );
SetDlgItemText( IDD_BOTTOM,
ltoa( Rect.bottom, szBuffer, 10 ) );
}
}
hPrevFocus = hFocus;
}
}
class CursorApplication : public TApplication {
public:
CursorApplication(LPSTR name, HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPSTR lpCmd,
int nCmdShow)
: TApplication(name, hInstance,
hPrevInstance, lpCmd, nCmdShow) {};
virtual void InitMainWindow( void );
virtual void IdleAction(void);
};
void CursorApplication::InitMainWindow()
{
MainWindow = new TCursorDlg( NULL, "CursorDlg" );
}
void CursorApplication::IdleAction( void )
{
if ( MainWindow && ((TCursorDlg *)MainWindow)->ShouldUpdate() )
((TCursorDlg*)MainWindow)->UpdateDialog();
}
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmd, int nCmdShow)
{
CursorApplication CursorApp ("Cursor Location", hInstance,
hPrevInstance, lpCmd, nCmdShow);
CursorApp.Run();
return ( CursorApp.Status );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -