이것도 옛날에 한적이 있을 것인데... 할려고 하니 안보이고...
간단한 것인데도... 이것 뭐 다듬고 하니 시간 3시간 가까이 가버리네요...
여하튼 어떤 프로그램이라도 시간을 많이 잡아 먹는 군요...
작은 것이라도 했을 때 소스가 좀 쪽팔리더라도 올리는 것이 다음에 나를 위해
다른 분들을 위해 좋을 것 같습니다.
그런데 막상 올리려고 하니 또 소스를 한번 더 보게 되는 군요... 체면... 참... 어쩔
수가 없는 모양입니다. 또 보아도... 약간 쪽팔리는 군요... ㅋㅋㅋ
알아서 예쁘게 수정해서 사용하세요..... 하실 분만...
폼의 오른쪽 아래 마우스 클릭해서 끌고 가다가 놓으면 폼 사이즈 변경됩니다.
알송 폼을 변경할 때 하는 것처럼... 요것 보면서... 최적화했습니다. 최적화라고 해봐야...
다른 윈도우 활상화 될 때.... 그리고 있던 것 삭제하는 것이지만...
아~~ 잠온다... 조금 자야겠습니다. 여러분들은 일하셔야지요... ㅋㅋㅋ
회사가 그립당~~~ 혼자 하는 것 별로 재미없군....
부산에서 월천 올렸습니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
HHOOK hMouseHook = NULL;
bool bSizingForm = false;
POINT mouse2;
SIZE off;
void __fastcall DrawDotBox( HDC dc, int xs, int ys, int xe, int ye, COLORREF crColor )
{
int i = ys;
while( i<ye )
{
::SetPixel( dc, xs, i, crColor );
::SetPixel( dc, xe, i, crColor );
i+=2;
}
i = xs;
while( i<xe )
{
::SetPixel( dc, i, ys, crColor );
::SetPixel( dc, i, ye, crColor );
i+=2;
}
}
LRESULT CALLBACK MouseHook(int nCode, WPARAM wParam, LPARAM lParam )
{
int w, h;
POINT mouse;
HDC m_hdc;
int nMode;
if( nCode >= HC_ACTION )
{
::GetCursorPos(&mouse);
m_hdc = ::GetDC( NULL );
switch( wParam )
{
case WM_LBUTTONDOWN:
w = Form1->Left + Form1->Width;
h = Form1->Top + Form1->Height;
off.cx = abs(w-mouse.x);
off.cy = abs(h-mouse.y);
Form1->Edit2->Text = IntToStr( off.cx ) + ", " + IntToStr( off.cy );
if( ((w-10)<mouse.x && mouse.x<w) && ((h-10)<mouse.y && mouse.y<h) )
{
mouse2 = mouse;
nMode = ::SetROP2( m_hdc, R2_XORPEN );
//그리고
DrawDotBox( m_hdc, Form1->Left, Form1->Top, mouse.x+off.cx, mouse.y+off.cy, 0xFFFFFF );
::SetROP2(m_hdc,nMode);
bSizingForm = true;
}
break;
case WM_MOUSEMOVE:
Form1->Edit1->Text = IntToStr( mouse.x ) + ", " + IntToStr( mouse.y );
if( bSizingForm==true && (mouse2.x!=mouse.x || mouse2.y!=mouse.y))
{
nMode = ::SetROP2( m_hdc, R2_XORPEN );
//지우고
DrawDotBox( m_hdc, Form1->Left, Form1->Top, mouse2.x+off.cx, mouse2.y+off.cy, 0xFFFFFF );
//그리고
DrawDotBox( m_hdc, Form1->Left, Form1->Top, mouse.x+off.cx, mouse.y+off.cy, 0xFFFFFF );
::SetROP2(m_hdc,nMode);
mouse2 = mouse;
}
break;
case WM_LBUTTONUP:
if( bSizingForm==true )
{
nMode = ::SetROP2( m_hdc, R2_XORPEN );
//지우고
DrawDotBox( m_hdc, Form1->Left, Form1->Top, mouse2.x+off.cx, mouse2.y+off.cy, 0xFFFFFF );
::SetROP2(m_hdc,nMode);
::PostMessage( Form1->Handle, 9999, (mouse2.x+off.cx) - Form1->Left, (mouse2.y+off.cy) - Form1->Top );
bSizingForm = false;
}
break;
}
::ReleaseDC( NULL, m_hdc );
}
return( CallNextHookEx(hMouseHook, nCode, wParam, lParam) );
}
void __fastcall InstallMouseHook()
{
if( hMouseHook==NULL )
{
hMouseHook=SetWindowsHookEx( WH_MOUSE, (HOOKPROC)MouseHook,0, ::GetCurrentThreadId() );
}
}
void __fastcall UnInstallMouseHook()
{
if( hMouseHook )
{
UnhookWindowsHookEx( hMouseHook );
hMouseHook=NULL;
}
}
//------------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WMActivateApp(TMessage msg)
{
if( msg.WParam==0 )
{
if( bSizingForm==true )
{
HDC m_hdc = ::GetDC( NULL );
int nMode = ::SetROP2( m_hdc, R2_XORPEN );
//지우고
DrawDotBox( m_hdc, Form1->Left, Form1->Top, mouse2.x+off.cx, mouse2.y+off.cy, 0xFFFFFF );
::SetROP2(m_hdc,nMode);
//::PostMessage( Form1->Handle, 9999, (mouse2.x+off.cx) - Form1->Left, (mouse2.y+off.cy) - Form1->Top );
bSizingForm = false;
::ReleaseDC( NULL, m_hdc ); //Form1->Handle 이게 뭐니... ㅋㅋㅋ 이것 수정한다고 3번이나 고쳤음...
}
}
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
InstallMouseHook();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnInstallMouseHook();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
POINT xy;
xy.x = this->Left + this->Width;
xy.y = this->Top + this->Height;
::ScreenToClient( this->Handle, &xy );
this->Canvas->Rectangle( xy.x-10, xy.y-10, xy.x, xy.y );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WMPaint( TMessage msg )
{
Form1->Width = msg.WParam;
Form1->Height = msg.LParam;
Invalidate();
}
|
재택 근무도 해보고, 프리랜서도 해보고, 작은 인원에서도 해보았는데 그래도 제일 좋은건 사람이 많은게 좋네요.
물론 마음 맞는 사람 수가 더 중요하겠지만...ㅎㅎ