Coller une fenetre sur une autre fenetre?

Résolu
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 1 déc. 2007 à 22:29
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 3 déc. 2007 à 17:53
Bonsoir,
Je voudrait savoir si c'est possible de 'coller' une fenetre sur une autre (quand on déplace la fenetre conteneur la seconde reste a l'interieur)
j'ai vu que c'etait possible en mettant le style WS_CHILD a la seconde fenetre mais le pb c'est que cette seconde fenetre contient un menu et il est impossible de mettre un menu dans une fenetre qui a le style WS_CHILD..

Neo_Fr

11 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
2 déc. 2007 à 11:40
En effet, et tu ne peux pas non plus utiliser SetMenu (A menu can be assigned to any window that is not a child window.)

Si ton but est de déplacer deux fenetres en même temps, tu peux toujours le faire a la main sans utiliser WS_CHILD (en utilisant les messages WM_MOVING et WM_WINDOWPOSCHANGED)

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
3 déc. 2007 à 00:25
Evite aussi ce genre de param 'BYTE bShow', dans tous les cas c'est 'int' de 4 octets qui est PUSHé. Si le travail octet ne souffre pas en vitesse, il a une facheuse tendance à désaligner les instructions et force donc le compilo à insérer des octets de cadrage dans le code pour conserver les perfs.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
3 déc. 2007 à 15:49
Tu l'as ici:
http://www.cppfrance.com/code.aspx?id=21205
dans TaskBar.cpp
pas le temps de mettre en C.

ciao...
BruNews, MVP VC++
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
3 déc. 2007 à 17:53
En refesant le projet au propre ca marche :D
A force de rajouter et d'enlever du code j'avais du faire une étourderie qq part..
Merci quand mm.

Neo_Fr
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
2 déc. 2007 à 18:46
Merci, c'est ce que je pensais faire avec WM_MOVE, j'esperais juste qu'il exister une api tt prete..

Sinon qu'elle est l'api pr recuperer les coordonnées d'une fenetre?
J'ai penser a GetClientRect mais ca me donne juste la taille..

Neo_Fr
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
2 déc. 2007 à 19:17
Oups, j'avais pa vu que le systeme envoyer un WM_MOVE a l'initialisation de la fenetre..

Mais j'ai tjrs un pb: Comment supprimer l'entré de la fentre qui contient le menu de la barre des taches?

Neo_Fr
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
2 déc. 2007 à 22:03
Je vient d'essayer ce code:

int __stdcall ShowTaskBar(HWND hWnd, BYTE bShow)
{
ITaskbarList* tbLst = 0;
int RetValue = 0;
CoInitialize(0);
if((CoCreateInstance(&CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, &IID_ITaskbarList, (LPVOID*)&tbLst)) !S_OK) { RetValue 1; goto End; }
tbLst->lpVtbl->HrInit(tbLst);
if(!bShow)
{
if((tbLst->lpVtbl->DeleteTab(tbLst, hWnd)) !S_OK) { RetValue 1; goto End; }
}else
{
if((tbLst->lpVtbl->AddTab(tbLst, hWnd)) !S_OK) { RetValue 1; goto End; }
if((tbLst->lpVtbl->ActivateTab(tbLst, hWnd)) !S_OK) { RetValue 1; goto End; }
}
End:
tbLst->lpVtbl->Release(tbLst);
CoUninitialize();
return RetValue;
}

Sans succes :\

Neo_Fr
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
3 déc. 2007 à 00:16
goto c'est bien si judicieusement mis.if((tbLst->lpVtbl->AddTab(tbLst, hWnd)) !S_OK) { RetValue 1; goto End;} if((tbLst->lpVtbl->ActivateTab(tbLst, hWnd)) !S_OK) { RetValue 1; goto End;}
Si 1ere ligne réussit, pas bon du tout de forcer un saut de code pour aller à la 2eme.
Idem pour tout le listing de la fonction.


Réorganisons, retourne 0 si no error:
int __stdcall ShowTaskBar(HWND hWnd, BYTE bShow)
{
  ITaskbarList *tbLst = 0;
  int RetValue = 1; // PRESUME ERREUR
  CoInitialize(0);
  if(CoCreateInstance(&CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, &IID_ITaskbarList, (LPVOID*)&tbLst)) goto tskEXIT;
  if(tbLst->lpVtbl->HrInit(tbLst)) goto relTSK;
  if(!bShow) goto goHIDE;
  if(tbLst->lpVtbl->AddTab(tbLst, hWnd)) goto relTSK;
  if(tbLst->lpVtbl->ActivateTab(tbLst, hWnd)) goto relTSK;
  goto showOK;
goHIDE:
  if(tbLst->lpVtbl->DeleteTab(tbLst, hWnd)) goto tskEXIT;
showOK: RetValue = 0;
relTSK:
  tbLst->lpVtbl->Release(tbLst);
  CoUninitialize();
tskEXIT: return RetValue;
}

ciao...
BruNews, MVP VC++
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
3 déc. 2007 à 15:41
Moi qui croyait bien faire d'utiliser un BYTE pr économiser 3 octets..
Sinon la fonction ne marche tjrs pas :[
Pour info le style de la fenetre est: WS_VISIBLE | WS_POPUP..

Neo_Fr
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
3 déc. 2007 à 16:05
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
3 déc. 2007 à 17:31
Tu peux zipper ton projet que je regarde.

ciao...
BruNews, MVP VC++
0