|
아뇨 뭔가 잘못하신것이 있을겁니다.
아래와 같이 서브클래싱하면 모든 TChart로 가는 window message는
반드시 서브클래싱 함수를 통해 갑니다.
즉 서브클래싱 함수는 TChart 윈도우 메세지 처리의 최고 앞단에 있는것입니다.
그러니 서브클래싱 때문에 느릴수는 없습니다.
그래도 현재 그렇현상이 난다고 하니 추정을 해보면....
- 추정 -
1. 만약 오른쪽 마우스 클릭때 처리하는 작업이 있습니까?
클릭때 무엇을 많이 처리하게 되면 그 처리끝난후에 더블클릭이벤트가 발생하게 될것입니다.
더블클릭 윈도우 메세지 발생하기전에
MouserEnter , MouserDown 등... 여러가지 메세지가 발생합니다.
이런 메세지에 무엇을 처리하도록 되어있고, 그 처리루틴이 느리다면 그럴수 있을것입니다.
2. TChart말고 다른 곳에서 자원을 잡아먹는 만한 코드는 없습니까?
그러니 아래 코드만을 프로젝트 따로 떼어서 테스트 해보십시요
그럼...
이용태 님이 쓰신 글 :
: 장성호님께서 말씀해주신 방법으로 서브클래싱하여 마우스 오른쪽 더블클릭을 구현했습니다.
:
: SPY++로 찍어보니.. WM_RBUTTONDBLCLK 메시지는 정확히 나오고... 이 메시지에 해당하는 서브클래싱한 함수에서도 결과가 실행이 됩니다.
:
: 근데.. 메시지 처리가 너무 늦습니다. 마우스 오른쪽 더블클릭이후 약 1초 정도 있어야 서브클래싱한 함수가 실행이 됩니다. 실시간으로 처리할 수 있는 방법은 없는건가요?
:
: 없는 이벤트 함수를 사용할려고 해서 이렇게 속도가 느리게 되는건가요?
:
:
:
:
:
:
: 장성호 님이 쓰신 글 :
: : 저는 윈도우 관련해서 안된는것은 서브클래싱을 많이 이용합니다.
: :
: : TChart 에 OnRightDoubleClick 이벤트 같은것이 없으니
: : 윈도우 메세지를 받아서 직접 처리해야 겠죠
: :
: : 아래 샘플입니다.
: : 그래도 쓰셔도 될것입니다.
: :
: : 그럼 ....
: :
: : TForm1 *Form1;
: : //---------------------------------------------------------------------------
: : __fastcall TForm1::TForm1(TComponent* Owner)
: : : TForm(Owner)
: : {
: : }
: : //---------------------------------------------------------------------------
: : TWndMethod OrigProc1;
: : void __fastcall TForm1::FormCreate(TObject *Sender)
: : {
: : OrigProc1 = Chart1->WindowProc;
: : Chart1->WindowProc = ChartProc1;
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::ChartProc1(TMessage& Msg)
: : {
: : if(Msg.Msg==WM_RBUTTONDBLCLK) //오른쪽 버튼 더블클릭했을때..
: : {
: : Chart1RightDblClick(Chart1);
: : }
: : OrigProc1( Msg );
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::Chart1RightDblClick(TObject *Sender)
: : {
: : ShowMessage("오른쪽 더블클릭!");
: : }
: : //---------------------------------------------------------------------------
: :
: :
: :
: : 이용태 님이 쓰신 글 :
: : : 폼이나 TChart에서 보면... 마우스 더블클릭에 대한 이벤트 함수 OnDblClick()이 있는데요..
: : :
: : : 이놈은 기본적으로 왼쪽 마우스 클릭에 대해서만 동작합니다.
: : :
: : : 오른쪽 마우스 클릭에 대해서도 더블클릭을 하고 싶은데요... 어떻게 해야 합니까?
: : :
: : : 답변 부탁드립니다.
|