[MFC] Cacher la barre des taches

[MFC] Cacher la barre des taches - C++ - Programmation

Marsh Posté le 22-12-2002 à 11:06:54    

Salut,
Je cherche à cacher la barre des taches de Windows (Démarrer,...). Le moyen simple étant de faire une fenetre ayant la taille de l'écran, ainsi elle recouvre la barre. Mais lors de l'appui sur la touche windows, ou sur Ctrl-Echap, la barre se réaffiche (Menu démarrer).
J'ai essayé d'intercepter l'appui sur cette touche de la façon suivante mais rien n'y fait :

Code :
  1. void CUsersDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  2. {
  3. switch(nChar)
  4. {
  5. case VK_LWIN:
  6. case VK_RWIN:
  7.  return;
  8.  break;
  9. default:
  10.  break;
  11. }
  12. CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
  13. }


OnKeyDown n'est même pas appelée quand j'appui sur une touche lorsque ma Dialog a le focus...
Que faire ? Merci
 ANT
 
P.S. : Evidemment s'il existe une API du genre HideTaskbar(), je suis preneur !

Reply

Marsh Posté le 22-12-2002 à 11:06:54   

Reply

Marsh Posté le 22-12-2002 à 11:14:26    

antsite a écrit :

Mais lors de l'appui sur la touche windows, ou sur Ctrl-Echap, la barre se réaffiche (Menu démarrer).

c'est fait pour. pas touche.

Reply

Marsh Posté le 22-12-2002 à 11:16:56    

Oui mais ce que je comprens pas trop c'est pourquoi des applications Fullscreen genre jeu ou autre, sont insensibles à l'appui sur la touche windows !

Reply

Marsh Posté le 22-12-2002 à 11:44:52    

dans quake2 c'est SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, false, ...)

Reply

Marsh Posté le 22-12-2002 à 23:34:15    

antsite a écrit :

Salut,
Je cherche à cacher la barre des taches de Windows (Démarrer,...). Le moyen simple étant de faire une fenetre ayant la taille de l'écran, ainsi elle recouvre la barre. Mais lors de l'appui sur la touche windows, ou sur Ctrl-Echap, la barre se réaffiche (Menu démarrer).
J'ai essayé d'intercepter l'appui sur cette touche de la façon suivante mais rien n'y fait :

Code :
  1. void CUsersDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  2. {
  3. switch(nChar)
  4. {
  5. case VK_LWIN:
  6. case VK_RWIN:
  7.  return;
  8.  break;
  9. default:
  10.  break;
  11. }
  12. CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
  13. }


OnKeyDown n'est même pas appelée quand j'appui sur une touche lorsque ma Dialog a le focus...
Que faire ? Merci
 ANT
 
P.S. : Evidemment s'il existe une API du genre HideTaskbar(), je suis preneur !


 
ouais, j'ai eu le meme probleme, pourintercepter une touche faut un peu plus que OnKeyDown()
 
il faut aussi implementer PreTranslateMessage pour attraper au vol l'evenement puis l'envoyer sur OnKeyDown .... je sais ca peut paraitre caca, mais je l'ai vu tel quel dans la msdn, alors si c'est microsoft qui le dit, on eut leur faire confiance.
 
Faut que tu gardes ton OnKeyDown et que tu implemetes donc PreTranslateMessage.
 
voila pour info une partie de la page de la msdn qui cause de ca :
 
Handling Special Keys in Your Control
In some cases you may want to handle certain keystroke combinations in a special way; for example, insert a new line when the ENTER key is pressed in a multiline text box control or move between a group of edit controls when a directional key ID pressed.
 
If the base class of your ActiveX control is COleControl, you can override CWnd::PreTranslateMessage to handle messages before the container receives them. When using this technique, always return TRUE if you handle the message in your override of PreTranslateMessage.
 
The following code example demonstrates a possible way of handling any messages related to the directional keys.
 
BOOL CSampleControl::PreTranslateMessage(LPMSG lpmsg)
{
    BOOL bHandleNow = FALSE;
 
    switch (lpmsg->message)
    {
    case WM_KEYDOWN:
        switch (lpmsg->wParam)
        {
        case VK_UP:
        case VK_DOWN:
        case VK_LEFT:
        case VK_RIGHT:
            bHandleNow = TRUE;
            break;
        }
        if (bHandleNow)
            OnKeyDown(lpmsg->wParam, LOWORD(lpmsg  
                ->lParam), HIWORD(lpmsg->lParam));
        break;
    }
    return bHandleNow;
}
 
For more information on handling keyboard interfaces for an ActiveX control, see the ActiveX SDK documentation.
 

Reply

Marsh Posté le 22-12-2002 à 23:36:10    

le meme copier collre de la msdn sans les smileys :
 

Code :
  1. Handling Special Keys in Your Control
  2. In some cases you may want to handle certain keystroke combinations in a special way; for example, insert a new line when the ENTER key is pressed in a multiline text box control or move between a group of edit controls when a directional key ID pressed.
  3. If the base class of your ActiveX control is COleControl, you can override CWnd::PreTranslateMessage to handle messages before the container receives them. When using this technique, always return TRUE if you handle the message in your override of PreTranslateMessage.
  4. The following code example demonstrates a possible way of handling any messages related to the directional keys.
  5. BOOL CSampleControl::PreTranslateMessage(LPMSG lpmsg)
  6. {
  7.     BOOL bHandleNow = FALSE;
  8.     switch (lpmsg->message)
  9.     {
  10.     case WM_KEYDOWN:
  11.         switch (lpmsg->wParam)
  12.         {
  13.         case VK_UP:
  14.         case VK_DOWN:
  15.         case VK_LEFT:
  16.         case VK_RIGHT:
  17.             bHandleNow = TRUE;
  18.             break;
  19.         }
  20.         if (bHandleNow)
  21.             OnKeyDown(lpmsg->wParam, LOWORD(lpmsg
  22.                 ->lParam), HIWORD(lpmsg->lParam));
  23.         break;
  24.     }
  25.     return bHandleNow;
  26. }
  27. For more information on handling keyboard interfaces for an ActiveX control, see the ActiveX SDK documentation.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed