음..
CheckBox이름이
CheckBox1 .... CheckBox8 이라는 가정하에 코딩한것입니다.
//Header
class TForm1 : public TForm
{
__published: // IDE-managed Components
TCheckBox *CheckBox1;
TCheckBox *CheckBox2;
TCheckBox *CheckBox3;
TCheckBox *CheckBox4;
TCheckBox *CheckBox5;
TCheckBox *CheckBox6;
TCheckBox *CheckBox7;
TCheckBox *CheckBox8;
void __fastcall CheckBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
TCheckBox *ChkBoxArr[8];
int __fastcall TForm1::GetCheckBoxCheckedCount();
};
//*.cpp
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=1;i<=8;i++)
{
ChkBoxArr[i-1]=(TCheckBox *)FindComponent("CheckBox"+IntToStr(i));
}
}
//---------------------------------------------------------------------------
int __fastcall TForm1::GetCheckBoxCheckedCount()
{
int iChkCnt=0;
for(int i=0;i<8;i++)
{
if(ChkBoxArr[i]->Checked)iChkCnt++;
}
return iChkCnt;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Shift.Contains(ssLeft))
{
TCheckBox *ChkBox=(TCheckBox *)Sender;
if(!ChkBox->Checked)
{
if(GetCheckBoxCheckedCount()>=3)
{
ReleaseCapture();
}
}
}
}
//---------------------------------------------------------------------------
음..
ReleaseCapture가 핵심입니다.
Mouse 이벤트는 (MouseMove , MouseWheel , MouseUp ...)
Capture된 윈도우(Control)에서만 발생합니다.
Capture는 는 MouseDown이벤트에 Mouse위치의 윈도우(Control)에 캡쳐가 되구요.
만약 위코드에서처럼 CheckBox에서 ReleaseCapture를 해버리면
그 이후 다시 MouseDown이 되기전까지는 해당 Control에서 MouseMove의 MouseUp이 발생하지 않습니다.
CheckBox의 Checked는 MouseUp이 발생하기 직전 Click이 발생하는데
Click이벤트 발생 전에 Checked가 변경됩니다.
즉 위와같이 MouseDown이후에ReleaseCapture로
Mouse이벤트를 받지 않도록 만들어 버리면CheckBox가 Checked가 되지 않을 것입니다.
그럼..
쌩조 님이 쓰신 글 :
: CheckBox를 이용해서 그래프의 Series를 표시하고 있습니다.
:
: CheckBox가 총 8개가 존재하는데 이중에서 3개가 미리 체크 되어진다면 4개 이상부터는 체크가 되지 않게
:
: 할수 있는 방법이 있습니까?
:
: 이런 종류의 체크의 갯수를 제한하는 방법을 사용 해보신분들 도움좀 주세요
:
: C++Bulider을 사용 중입니다.