|
TAB키나 VK_F10 등 VK_MENU 등과 같은 네비게이션 키들은 일반 KeyDown에서 안잡힙니다.
원도우가 내부적으로 처리하기 때문이죠
즉 탭을 누르면 다음 콘트롤로 이동한다던지.. F10을 누르면 메뉴를 보여준다든지..
이런 SystemKey들은 아래와 같이 WM_SYSKEYUP 메시지로 들어오니
이 메시지로 처리하면됩니다.
메시지 처리하는 방법은 아시겠죠
AppMesage라는 메시지 처리 함수 하나 만들고..
연결하시고 쓰면되는데...
아래에 대충 다른 프로젝트에 쓰던 소스 잘라 붙여봤습니다.
---------------------------------------------------------------------------------
Application->OnMessage = AppMessage;
-------------------------------------------------------------------------------
void __fastcall TF_Form1::AppMessage(tagMSG &Msg, bool &Handled)
{
if (Msg.message == WM_SYSKEYUP)
{
if( XfIsMsgShow()==false && F7_NumPad->Visible==false )
{
if( vk==VK_TAB || vk==VK_RETURN)
Handled = true;
}
// F10은 시스템 키 이므로 여기서 처리
if( vk == VK_F10 )
{
B_CameraFBClick(this);
Handled = true;
}
else if( vk==VK_F1 && (GetAsyncKeyState(VK_MENU) & 0x8000)) // ALT + F1
{
// Left Picker Vacuum
if( Xv_iRunStatus != XRS_START )
{
if( XIO[O_PK_1_ON_SOL] == true )
{
XCYL[VAC_PK_1].Off();
XfLogMsg("Left Picker Vacuum Off");
}
else
{
XCYL[VAC_PK_1].Pull(false);
XfLogMsg("Left Picker Vacuum On");
}
}
}
chang 님이 쓰신 글 :
: 정말 황당한 경우인 것도 같고 제가 뭔가 잘 모르는 것 같기도 하고....
:
: 에디트박스에서 "Page Down"키를 누르면 다음 에디트 박스로 포컼스가 이동하는 아주 단순한(?) 동작인데 이게 안되더라구요...
:
: void __fastcall TOrder::Edit1KeyDown(TObject *Sender, WORD &Key,
: TShiftState Shift)
: {
: if ( Key == VK_END )
: {
: FocusControl(Edit5); // 잘 넘어감...
: return;
: }
: else if ( Key == VK_ESCAPE )
: {
: FocusControl(Edit5); // 잘 넘어감...
: return;
: }
: else if ( Key == VK_RIGHT )
: {
: FocusControl(Edit5); // 잘 넘어감...
: return;
: }
: else if ( Key == VK_NEXT )
: {
: FocusControl(Edit5); // 이 넘만 포커스가 이동하지 않고 그대로 Edit1에 머물러 있슴
: return;
: }
: }
:
: 같은 버추얼 키값인데 왜 Page Down과 Page Up만 안되는걸까요?
: 본래 이런건가요? 아시는 분 답변 좀 부탁드리겠습니다...
|