關於tabstop和group的事情

 關於tabstop。可以在.rc編輯畫面中,Ctrl+D顯示Tab鍵的執行順序,直接用鼠標點擊控件就可以改變這些順序。

關於group。比如要設定3個按鈕爲一組,需要把第一個按鈕的group屬性設定爲true,另外兩個設定爲False,這樣系統就會知道這3個控件爲一組。具體應用看下面的代碼。

 

把控制焦點移動的代碼放到消息循環裏:


 while (GetMessage(&msg, NULL, 0, 0))
 {
   //下面這段代碼就是用Tab鍵控制焦點的。
   if (msg.message == WM_KEYDOWN && (int)msg.wParam == VK_TAB){
    HWND hDlg = GetParent(msg.hwnd);
    if (hDlg && GetWindowLong(hDlg, DWL_DLGPROC)){
     HWND hNext;
     BOOL prev = (GetKeyState(VK_SHIFT) < 0);//如果按住Shift,再按Tab,就會往回走
     if (hNext = GetNextDlgTabItem(hDlg, msg.hwnd, prev)){//這是尋找下一個tabstop爲true的控件
      SetFocus(hNext);
      continue;
     }
    }

//下面這段代碼是用上下左右鍵控制焦點的。不過要求這些控件必須在同一group內

    if (msg.message == WM_KEYDOWN && ((int)msg.wParam == VK_RIGHT || (int)msg.wParam == VK_DOWN)){
     HWND hDlg = GetParent(msg.hwnd);
     if (hDlg && GetWindowLong(hDlg, DWL_DLGPROC)){
      HWND hNext;
      if (hNext = GetNextDlgGroupItem(hDlg, msg.hwnd, FALSE)){//這是尋找下一個同一group的控件
       SetFocus(hNext);
       continue;
      }
     }
    }
    if (msg.message == WM_KEYDOWN && ((int)msg.wParam == VK_LEFT || (int)msg.wParam == VK_UP)){
     HWND hDlg = GetParent(msg.hwnd);
     if (hDlg && GetWindowLong(hDlg, DWL_DLGPROC)){
      HWND hNext;
      if (hNext = GetNextDlgGroupItem(hDlg, msg.hwnd, TRUE)){
       SetFocus(hNext);
       continue;
      }
     }
    }

    }

   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }

 

下面代碼實現的效果:當焦點在一個RadioBox上,用鍵盤上的箭頭,把焦點移動到下一個RadioBox上,並且選中。

  if( Button_GetCheck(hwndNext) == UNCHECKED) {
     Button_SetCheck( hwndNext, TRUE);
  }
  ps:這個函數Button_GetCheck,可用來判斷當前焦點的控件是否被選(check)上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章