velleronnais | 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 :
- void CUsersDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
- {
- switch(nChar)
- {
- case VK_LWIN:
- case VK_RWIN:
- return;
- break;
- default:
- break;
- }
- CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
- }
|
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.
|