|
기본적으로 원인은 마우스 휠에 동작하는것은 Focus가 되어있을때 그러네요...
Mouse의 Focus를 다른Control에 옮겨주면 괜찮습니다.
그리고 Focus되어있는 상태에서는 서브클래싱을 통해서 해결할수 있습니ㅏㄷ.
MouseWheel 메세지만 걸러주면 되는데
기본 Event에 MouseWheel이벤트가 없기때문에
서브클래싱을 통하여서 해결할 수 있습니다.
아래에 예제가 있습니다ㅏ. 그대로 이용해도 무방할 겁니다.
typedef void __fastcall (__closure *TWNDPROC)(TMessage &msg); //VCL용 WNDPROC 타입 선언
TWNDPROC OriginalProc; //TarckBar 원래의 WinProc 저장할 변수
//-----------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OriginalProc=TrackBar1->WindowProc; // 프로그램이 시작되면서 원래 WndProc를 따로 저장해두고..
TrackBar1->WindowProc=TracMessageProc; //내가 만든 WndProc함수를 TracBar에 설정해줍니다.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TracMessageProc(TMessage &msg)
{
if(msg.Msg==WM_MOUSEWHEEL)return; //MouseWheel 이벤트는 모두 return 해버리고
OriginalProc(msg); //그밖에 메세지는 원래 tracbar의 WndProc함수를 돌려서 동작하도록 합니다.
}
이 서브 클래싱 기법은 윈도우 프로그램에 많이 쓰일수 있습니다.
사용하는 Control에 기본 Event가 없는경우 이렇게 하고..
기본적으로 배경을 넣을수 없는 Control같은 경우에도 서브클래싱을
WM_PAINT 메세지에 직접 그려주는 방법으로 할수있습니다.
이방법을 익혀두면 유용하게 쓰실수 있을것입니다.
그럼
왕초보 님이 쓰신 글 :
: 안녕하세요
:
: 다른것이 아니라 TrackBar와 EditBox 와 같은 곳에서 마우스 휠로 값이 변경되는걸
: 막는 방법이 없을까요?
:
: 마우스 휠을 다른곳에 사용하는데 자꾸 값이 변경되서 어떻게 해야 할지 모르겠네요
:
:
: 답변 꼭 부탁들입니다.
|