|
방법은 말씀하신 방법이 맞고요.. ^^; 예제만 간략히 첨부하였습니다.
아래 예제는 기존의 기능을 무시하고, 최소화는 맨 왼쪽, 최대화는 중간, 종료는 오른쪽으로 폼을 이동시키는 예제입니다.
간단간단한 설명은 아래에 주석을 붙여 놓았습니다.
[헤더 파일]
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <AppEvnts.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
// 아래 메세지 처리 함수 정의
void __fastcall MessageProcess(TMessage &MSG);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, MessageProcess);
END_MESSAGE_MAP(TForm);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
[소스 파일]
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
Form1->Width = 200;
Form1->Height = 200;
Form1->Position = poScreenCenter;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MessageProcess(TMessage &MSG)
{
switch(MSG.WParam) {
case SC_MINIMIZE : {
Form1->Left = 0;
// Dispatch 방지 (작업 진행 방지)
return;
}
case SC_RESTORE : {
// MAXIMIZE 하였다가 다시 누르면 발생되는 메세지
// Dispatch 방지 (작업 진행 방지)
return;
}
case SC_MAXIMIZE : {
Form1->Left = Screen->Width / 2 - Form1->Width / 2;
// Dispatch 방지 (작업 진행 방지)
return;
}
case SC_CLOSE : {
Form1->Left = Screen->Width - Form1->Width;
// Dispatch 방지 (작업 진행 방지)
return;
}
}
// Dispatch를 하지 않는 이상은 그 메세지의 처리가 무시됩니다.
// 만약, 위의 SC_MINIMIZE 등에서 Dispatch 처리를 하시면,
// 최소화 작업이 되면서 원하시는 일을 하실 수 있습니다.
TForm::Dispatch(&MSG);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 종료
Form1->Close();
}
//---------------------------------------------------------------------------
사무엘 님이 쓰신 글 :
: 맨날 볼랜드 포럼의 여러분에게 도움만 받구 있어요.
:
: 언제 쯤이나 나도 다른분께 도움을 드릴지...
:
:
:
: 폼에서 맨위에 최소화,최대화,종료 아이콘있죠?
:
: 이걸 누르면 어떤동작을 하죠.
:
: 저는 그 이벤트를 가로채서 다른 동작을 하게 하고 싶어요.
:
: 전에는 WM_SYSCOMMAND 에 대한 처리를 WndProc에서 하면 된다고 알고 있었는데...
:
: 빌더에서는 저걸 도데체 어디에서 구현해야 하는지 통 모르겠읍니다.
:
:
:
: 다른 문제로 벌써 몇번 도움을 받았는데..이번에도 또 도움을 받아야 할것 같습니다.
:
: 아시는 분 제발 도와주세요. 고수님들의 지도와 충고 부탁드립니다. 꾸벅~
:
:
|