Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1426 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7
Auteur Sujet :

[C / C++] le topic des bras cassés de la progue windows

n°1284994
Inekman
Posté le 16-01-2006 à 21:07:24  profilanswer
 

Reprise du message précédent :
Ah d'accord, si c'est que ça, y'a pas de danger chez moi alors car j'ai calculé la taille maximale que pouvait avoir une ligne, donc à priori ça devrait être bon.

mood
Publicité
Posté le 16-01-2006 à 21:07:24  profilanswer
 

n°1284995
nraynaud
lol
Posté le 16-01-2006 à 21:08:31  profilanswer
 

http://forum-images.hardware.fr/themes_static/images_forum/1/flagn1.gif

n°1285000
red factio​n
Posté le 16-01-2006 à 21:18:22  profilanswer
 

:sarcastic:

n°1285002
Trap D
Posté le 16-01-2006 à 21:19:54  profilanswer
 

Il y a éventuellement

Citation :

int _snprintf( char *buffer, size_t count, const char *format [, argument] ... );
Parameters
buffer  
Storage location for output  
count  
Maximum number of characters to store  
format  
Format-control string  
argument  
Optional arguments  
Return Value
_snprintf returns the number of bytes stored in buffer, not counting the terminating null character. If the number of bytes required to store the data exceeds count, then count bytes of data are stored in buffer and a negative value is returned.
 
Remarks
The _snprintf function formats and stores count or fewer characters and values (including a terminating null character that is always appended unless count is zero or the formatted string length is greater than or equal to count characters) in buffer. Each argument (if any) is converted and output according to the corresponding format specification in format. The format consists of ordinary characters and has the same form and function as the format argument for printf. If copying occurs between strings that overlap, the behavior is undefined.
 

n°1285023
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2006 à 21:39:18  profilanswer
 

Inekman a écrit :

Ah d'accord, si c'est que ça, y'a pas de danger chez moi alors car j'ai calculé la taille maximale que pouvait avoir une ligne, donc à priori ça devrait être bon.


tiens, juste par curiosité, tu peux me dire pourquoi tu n'arrivais pas à écrire dans tes listbox avec le code que je t'ai fait ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°1285045
Inekman
Posté le 16-01-2006 à 21:52:59  profilanswer
 

Harkonnen a écrit :

tiens, juste par curiosité, tu peux me dire pourquoi tu n'arrivais pas à écrire dans tes listbox avec le code que je t'ai fait ?


Et bien en fait toi tu avais un petit tableau avec tes items ajoutés à la création. Or moi, j'ai une liste chaînée de structures à partir de laquelle je me base pour remplir mes zones de liste. Dans ton traitement du message WM_DRAWITEM tu te basais toujours sur ton pti tableau de item sauf que moi évidement il me fallait un moyen de retrouver les éléments depuis ma liste chaînée. Donc pour résoudre le problème, lorsque j'ajoute mes items à l'initialisation du jeu par LB_INSERTSTRING, je fais par la même occasion un LB_SETITEMDATA en passant en (LPARAM) un pointeur vers la structure correspondante dans ma liste chaînée. Ce qui fait que quand je traite le message WM_DRAWITEM, je récupère le pointeur de la strucutre dans le champ lpdis->itemData et je n'ai plus qu'à retrouver l'information dans ma structure ainsi récupérée. :D

n°1285079
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2006 à 22:06:32  profilanswer
 

ok [:romf]
j'me disais aussi ... :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°1285082
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2006 à 22:08:19  profilanswer
 

tu peux poster un exemple de tes Listbox en custom draw, histoire que les ames perdues qui fréquenteront ce topic sachent de quoi ils retournent ? :o
(passke bon, j'veux pas dire, mais le mien il craint un peu du boudin quand même [:god])


---------------
J'ai un string dans l'array (Paris Hilton)
n°1285089
chrisbk
-
Posté le 16-01-2006 à 22:10:12  profilanswer
 

j'osais pas le dire [:dawa]

n°1285091
chrisbk
-
Posté le 16-01-2006 à 22:10:45  profilanswer
 

jhe signale a tout hasard pour ceusses qui voudraient faire des choses horribles avec des LB (non paske c'est pratique, quand meme), que l'hauteur maximale d'une cell est fixé a 255pixels [:pingouino]

mood
Publicité
Posté le 16-01-2006 à 22:10:45  profilanswer
 

n°1285179
Inekman
Posté le 16-01-2006 à 23:40:53  profilanswer
 

Voilà le bout de code où on initialise les zones de listes
 

Code :
  1. // tant qu'il y a des cartes sur la pile, on boucle
  2. while(elt != NULL){
  3. // si la carte à l'attribut visible a VRAI (<> 0)
  4. if (elt->visible) {
  5.  // on récupère la couleur en texte  
  6.  getCouleur(elt->carte.couleur, co);
  7.  // on écrit dans la variable "ligne"
  8.  // la ligne telle qu'elle sera affichée dans la zdl
  9.  // [Nom de la carte] de [couleur]
  10.  sprintf(ligne, "%s de %s", elt->carte.nom, co);
  11.  // on envoi le message LB_INSERTSTRING à la zone de liste
  12.  // avec les paramètres :  - (WPARAM)0 : pour insérer la ligne en haut de la zdl
  13.  //       - (LPARAM)ligne : contenant le texte à afficher dans la zdl
  14.  SendMessage(hlstbox[i], LB_INSERTSTRING, (WPARAM)0, (LPARAM)ligne);
  15.  // on associe le pointeur de la structure à l'item de la zdl
  16.  SendMessage(hlstbox[i], LB_SETITEMDATA, (WPARAM)0, (LPARAM)elt);
  17. }
  18. else
  19. {
  20.  // si la carte est invisible
  21.  // alors on met des étoiles
  22.  sprintf(ligne, "***************" );
  23.  // on envoi le message pour ajouter la ligne à la zone de liste
  24.  SendMessage(hlstbox[i], LB_INSERTSTRING, (WPARAM)0, (LPARAM)ligne);
  25.  // on associe le pointeur de la structure à l'item de la zdl
  26.  SendMessage(hlstbox[i], LB_SETITEMDATA, (WPARAM)0, (LPARAM)elt);
  27. }
  28. nb++;
  29. // on passe à l'élément suivant de la pile
  30. elt = elt->suivante;
  31. }


 
Ensuite pour traiter l'affichage de la zone de liste :

Code :
  1. case WM_DRAWITEM:
  2. {
  3. // contient les info concernant l'item à afficher
  4. LPDRAWITEMSTRUCT info = (LPDRAWITEMSTRUCT)lParam;
  5. // on récupère les informations de la carte correspondant à l'item de la zone de liste
  6. TListeCartes *item = (TListeCartes*) info->itemData;
  7. HBITMAP hBmpOld;
  8. HDC hDCMem;
  9. // le texte aura un fond transparent
  10. SetBkMode(info->hDC, TRANSPARENT);
  11. if (item != NULL)
  12. {
  13.  char ligne[20];
  14.  HBRUSH fond;
  15.  switch (info->itemAction)
  16.  {
  17.   // on dessine entièrement l'item
  18.   case ODA_DRAWENTIRE:
  19.    {
  20.     // s'il est visible
  21.     if (item->visible) {
  22.      // on créé un DC en mémoire qui va permettre de dessiner l'image
  23.      hDCMem  = CreateCompatibleDC(info->hDC);
  24.      // on définit un fond gris/blanc
  25.      fond = CreateSolidBrush(RGB(230,230,230));
  26.      // on définit la couleur du texte ainsi que l'image qui sera associée à la carte
  27.      switch (item->carte.couleur) {
  28.       case 0 :
  29.        {
  30.         SetTextColor(info->hDC, RGB(255,0,0));
  31.         hBmpOld = (HBITMAP)SelectObject(hDCMem, hcoeur);
  32.        }
  33.        break;
  34.       case 1 :
  35.        {
  36.         SetTextColor(info->hDC, RGB(255,0,0));
  37.         hBmpOld = (HBITMAP)SelectObject(hDCMem, hcarreau);
  38.        }
  39.        break;
  40.       case 2 :
  41.        {
  42.         SetTextColor(info->hDC, RGB(0,0,0));
  43.         hBmpOld = (HBITMAP)SelectObject(hDCMem, hpique);
  44.        }
  45.        break;
  46.       case 3 :
  47.        {
  48.         SetTextColor(info->hDC, RGB(0,0,0));
  49.         hBmpOld = (HBITMAP)SelectObject(hDCMem, htrefle);
  50.        }
  51.        break;
  52.      }
  53.     }
  54.     else
  55.     {
  56.      // si la carte est invisible,  
  57.      // alors on mets des étoiles blanche sur fond vert
  58.      SetTextColor(info->hDC, RGB(255,255,255));
  59.      fond = CreateSolidBrush(RGB(50,100,0));
  60.     }
  61.     // on remplit le rectangle avec la couleur "fond"
  62.     FillRect(info->hDC, &info->rcItem, fond);
  63.     // on copie l'image  
  64. // (à déplacer ailleurs car les cartes invisibles n'ont pas d'image...)
  65.     BitBlt(info->hDC, info->rcItem.left + 15, info->rcItem.top + 2,
  66.      info->rcItem.right - info->rcItem.left,
  67.      info->rcItem.bottom - info->rcItem.top,
  68.      hDCMem, 0, 0, SRCCOPY);
  69.     // on détruit le brush fond
  70.     DeleteObject(fond);
  71.     SelectObject(hDCMem, hBmpOld);
  72.     // et on détruit le contexte mémoire
  73.     DeleteDC(hDCMem);
  74.    }
  75.    break;
  76.   case ODA_SELECT:
  77.    {
  78.     // si on sélectionne un élément de la zone de liste
  79.     // alors on affiche une bordure blanche
  80.     if (info->itemState & ODS_SELECTED)
  81.     {
  82.      SetTextColor(info->hDC, RGB(255,255,255));
  83.      fond = CreateSolidBrush(RGB(255,255,255));
  84.      FrameRect(info->hDC, &info->rcItem, fond);
  85.      DeleteObject(fond);
  86.     }
  87.     else
  88.     { 
  89.      // sinon, ça veut dire qu'on n'a pas sélectionné d'item
  90.      // donc on redessine l'item comme dans ODA_DRAWENTIRE  
  91. // (ce qui me parait chelou d'ailleur)
  92.      if (item->visible) {
  93.       // on créé un DC en mémoire qui va permettre de dessiner l'image
  94.       hDCMem  = CreateCompatibleDC(info->hDC);
  95.       fond = CreateSolidBrush(RGB(230,230,230));
  96.       switch (item->carte.couleur) {
  97.        case 0 :
  98.         {
  99.          SetTextColor(info->hDC, RGB(255,0,0));
  100.          hBmpOld = (HBITMAP)SelectObject(hDCMem, hcoeur);
  101.         }
  102.         break;
  103.        case 1 :
  104.         {
  105.          SetTextColor(info->hDC, RGB(255,0,0));
  106.          hBmpOld = (HBITMAP)SelectObject(hDCMem, hcarreau);
  107.         }
  108.         break;
  109.        case 2 :
  110.         {
  111.          SetTextColor(info->hDC, RGB(0,0,0));
  112.          hBmpOld = (HBITMAP)SelectObject(hDCMem, hpique);
  113.         }
  114.         break;
  115.        case 3 :
  116.         {
  117.          SetTextColor(info->hDC, RGB(0,0,0));
  118.          hBmpOld = (HBITMAP)SelectObject(hDCMem, htrefle);
  119.         }
  120.         break;
  121.       }
  122.      }
  123.      else
  124.      {
  125.       SetTextColor(info->hDC, RGB(255,255,255));
  126.       fond = CreateSolidBrush(RGB(50,100,0));
  127.      }
  128.      FillRect(info->hDC, &info->rcItem, fond);
  129.      BitBlt(info->hDC, info->rcItem.left + 15, info->rcItem.top + 2,
  130.       info->rcItem.right - info->rcItem.left,
  131.       info->rcItem.bottom - info->rcItem.top,
  132.       hDCMem, 0, 0, SRCCOPY);
  133.      DeleteObject(fond);
  134.      SelectObject(hDCMem, hBmpOld);
  135.      DeleteDC(hDCMem);
  136.     }
  137.    }
  138.    break;
  139.   case ODA_FOCUS:
  140.    {
  141.     // si un item reçoit le focus alors
  142.     // alors on affiche une bordure blanche
  143.     if (info->itemState & ODS_SELECTED)
  144.     {
  145.      if (item->visible) {
  146.       switch (item->carte.couleur) {
  147.        case 0 :
  148.        case 1 :
  149.         {
  150.          SetTextColor(info->hDC, RGB(255,0,0));
  151.         }
  152.         break;
  153.        case 2 :
  154.        case 3 :
  155.         {
  156.          SetTextColor(info->hDC, RGB(0,0,0));
  157.         }
  158.         break;
  159.       }
  160.      }
  161.      else SetTextColor(info->hDC, RGB(255,255,255));
  162.      fond = CreateSolidBrush(RGB(255,255,255));
  163.      FrameRect(info->hDC, &info->rcItem, fond);
  164.      DeleteObject(fond);
  165.     }
  166.     else
  167.     { 
  168.      // sinon, ça veut dire que l'item à perdu le focus
  169.      // donc on redessine l'item comme dans ODA_DRAWENTIRE
  170. // (ce qui me parait doublement chelou d'ailleur)
  171.      if (item->visible) {
  172.       // on créé un DC en mémoire qui va permettre de dessiner l'image
  173.       hDCMem  = CreateCompatibleDC(info->hDC);
  174.       fond = CreateSolidBrush(RGB(230,230,230));
  175.       switch (item->carte.couleur) {
  176.        case 0 :
  177.         {
  178.          SetTextColor(info->hDC, RGB(255,0,0));
  179.          hBmpOld = (HBITMAP)SelectObject(hDCMem, hcoeur);
  180.         }
  181.         break;
  182.        case 1 :
  183.         {
  184.          SetTextColor(info->hDC, RGB(255,0,0));
  185.          hBmpOld = (HBITMAP)SelectObject(hDCMem, hcarreau);
  186.         }
  187.         break;
  188.        case 2 :
  189.         {
  190.          SetTextColor(info->hDC, RGB(0,0,0));
  191.          hBmpOld = (HBITMAP)SelectObject(hDCMem, hpique);
  192.         }
  193.         break;
  194.        case 3 :
  195.         {
  196.          SetTextColor(info->hDC, RGB(0,0,0));
  197.          hBmpOld = (HBITMAP)SelectObject(hDCMem, htrefle);
  198.         }
  199.         break;
  200.       }
  201.      }
  202.      else
  203.      {
  204.       SetTextColor(info->hDC, RGB(255,255,255));
  205.       fond = CreateSolidBrush(RGB(50,100,0));
  206.      }
  207.      FillRect(info->hDC, &info->rcItem, fond);
  208.      BitBlt(info->hDC, info->rcItem.left + 15, info->rcItem.top + 2,
  209.       info->rcItem.right - info->rcItem.left,
  210.       info->rcItem.bottom - info->rcItem.top,
  211.       hDCMem, 0, 0, SRCCOPY);
  212.      DeleteObject(fond);
  213.      SelectObject(hDCMem, hBmpOld);
  214.      DeleteDC(hDCMem);
  215.     }
  216.    }
  217.    break;
  218.  }
  219.  // et là on écrit le texte ou non, selon le champ visible
  220.  if (item->visible) {
  221.   RECT rcText;
  222.   rcText = info->rcItem;
  223.   rcText.left += 40;
  224.   DrawText(info->hDC, item->carte.nom, -1, &rcText, DT_SINGLELINE | DT_LEFT | DT_VCENTER);
  225.  }
  226.  else
  227.  {
  228.   sprintf(ligne, "***************" );
  229.   DrawText(info->hDC, ligne, -1, &info->rcItem, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  230.  }
  231. }
  232. return (TRUE);
  233. }
  234. case WM_CTLCOLORLISTBOX:
  235. return (LRESULT) CreateSolidBrush(RGB(50,100,0)); // fond vert pour faire beau


 
Voilà les choco, avec de l'entraide y'a du résultat.  
J'ai fait ça alors que je code en C/Win32 que depuis 1 mois, je m'auto-hallucine :D


Message édité par Inekman le 16-01-2006 à 23:42:55
n°1285323
neg'gwada
rafix 971
Posté le 17-01-2006 à 11:29:39  profilanswer
 

salut, est ce que quelqu'un connait MSVDM (micro$oft virtual desktop manager) j'aimerai savoir s'il y a de la doc sur des éventuelles dll qui permettrait de récupérer des infos sur les fenetre et les bureaux pour pouvoir rajouter une option "move to" qui n'existe pas de base dessus :/


---------------
--- WinSplit Revolution ---
n°1289908
neg'gwada
rafix 971
Posté le 23-01-2006 à 11:22:45  profilanswer
 

j'arrive pas à trouver un api me permettant de connaitre le processus qui gère une fenetre dont j'ai le Handle, est ce que quelqu'un à déjà eu à faire ce genre de cas? :jap:


---------------
--- WinSplit Revolution ---
n°1290462
SquiZZ
Posté le 23-01-2006 à 20:00:57  profilanswer
 

neg'gwada a écrit :

j'arrive pas à trouver un api me permettant de connaitre le processus qui gère une fenetre dont j'ai le Handle, est ce que quelqu'un à déjà eu à faire ce genre de cas? :jap:


 
GetWindowThreadProcessId ?

n°1290562
neg'gwada
rafix 971
Posté le 23-01-2006 à 23:02:13  profilanswer
 

SquiZZ a écrit :

GetWindowThreadProcessId ?


yep  [:d4buff] faut maintenant qu'à partir du handle je recupere le nom du processus et je vais pouvoir mettre à jour mon winsplit.net
 
Edit: c'est bon j'ai trouvé... j'ai qu'en meme galéré, il y a je ne sait combien de définition de l'api GetWindowThreadProcessId en c#  [:pingouino]


Message édité par neg'gwada le 24-01-2006 à 00:14:42

---------------
--- WinSplit Revolution ---
n°1293299
haazheel
Posté le 27-01-2006 à 12:05:17  profilanswer
 

Salut à tous,
 
quelles sont les fonctions à utiliser pour le tracé du curseur clignotant comme on peut le trouver dans les boites d'édition?
 
Je suis en train de créer (sous BCB6 il est vrai) un composant identique à celui d'Adobe Premiere, permettant le déplacement dans une vidéo.
 
La partie affichage est faite, je voudrais maintenant coder/dessiner la partie edition. Quand on clique sur le Label, il se transforme en une sorte de boite d'édition, aux même dimensions, où l'utilisateur peut directement entrer la position où il veut se déplacer.

n°1293328
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-01-2006 à 12:51:36  profilanswer
 

en win32, le curseur clignotant s'appelle un caret. tu peux utiliser les fonctions CreateCaret(), ShowCaret(), etc...
tu devrais trouver ton bonheur ici : http://msdn.microsoft.com/library/ [...] carets.asp


---------------
J'ai un string dans l'array (Paris Hilton)
n°1293357
haazheel
Posté le 27-01-2006 à 13:32:55  profilanswer
 

OK, merci, je vais jeter un oeil à ça...

n°1293446
chrisbk
-
Posté le 27-01-2006 à 14:58:24  profilanswer
 

tu sais ou tu peux te la caret ta question [:mlc]
 
 
[:klem3i1]

n°1293453
haazheel
Posté le 27-01-2006 à 15:05:56  profilanswer
 

:D

n°1295297
Mackila
Posté le 31-01-2006 à 09:11:55  profilanswer
 

Dites les gens, vous sauriez pas ou est planqué le controle "combo box non éditable à sélection unique" dans VS2003 ?

n°1295299
chrisbk
-
Posté le 31-01-2006 à 09:20:13  profilanswer
 

c'est pas une combobox standart avec comme type "dropdown" ou je sais pu quoi ? joue avec les parametres de la combo, ca traine la dedans

n°1295302
Mackila
Posté le 31-01-2006 à 09:27:25  profilanswer
 

J'ai pas du asser bien mater hier. Enfin comme me semblait que dans VS6 c'était un contrôle séparé (me rappelle plus, la)...
Bon bah go to la ou j'ai un VS2003 (mais pas le net [:sisicaivrai] )

n°1295326
slash33
Posté le 31-01-2006 à 10:30:03  profilanswer
 

Dans VS6, c'est le contrôle de liste déroulante standard. On choisit le type de sélection dans les options du contrôle. Le style c'est "Dropdown list".

n°1300414
neg'gwada
rafix 971
Posté le 07-02-2006 à 12:16:35  profilanswer
 

je ne comprend pas... j'ai toujours pas trouvé de solution pour mon problème du dessus. Si je fais:

Code :
  1. SetWindowLong(AppToResize,GWL_STYLE,382664704);
  2. SetWindowPos(AppToResize,HWND_TOP,...

et que ma fenêtre elle est maximisée, ça remet l'icône de maximisation à normale et ça met ma fenêtre à la position souhaitée. c'est ce que je veux faire (mais j'arrive pas à trouver à quoi correspond 382664704<=>dwnewlong ).
 
si je fais uniquement:

Code :
  1. SetWindowPos(AppToResize,HWND_TOP,...

et que ma fenêtre est maximisée ben ça retaille la fenêtre mais l'icône reste maximisée. ça je veux pas :o
 

Code :
  1. SetWindowLong(AppToResize,GWL_STYLE,382664704);

ne fait rien :/ même si la fenêtre est maximisée alors que dans le premier cas ça remet l'icône à normal.
 
j'ai testé tout les flags dwnewlong que j'ai trouvé sur ce site et impossible d'en trouvé un qui marche pour me faire le premier cas...  [:pingouino]  Je sais pas si sur ce site il y a tout les dwnewlong, mais j'ai pas trouvé ailleurs même msdn.
est ce que quelqu'un peux m'aider là je bloc. Je peux garder ma valeur 382664704 mais je trouve que ça fait cochon  [:cupra]
 
rappel de ma définition :o : maximisée c'est comme ça http://reptils.free.fr/forumhardware/images/agrandi.JPG
 
sinon normal c'est http://reptils.free.fr/forumhardware/images/restaure.JPG


Message édité par neg'gwada le 07-02-2006 à 12:19:37

---------------
--- WinSplit Revolution ---
n°1300681
Scarmatil
magma idempotent
Posté le 07-02-2006 à 18:05:31  profilanswer
 

Ta valeur c'est (WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN) et changes là tout de suite, parce que c'est vrai que ça fait pas propre  :non:  
 
(une question d'ailleurs tu la sors d'où cette valeur ?)


---------------
Scarmatil
n°1300705
neg'gwada
rafix 971
Posté le 07-02-2006 à 18:53:07  profilanswer
 

ben j'ai fait à la barbare  [:cupra] .
j'ai fait une fois en c# un getwindowlong(hwnd,GWL_STYLE)
sur des fenetres non maximisées et ça me renvoyait toujours ça  [:joce]
 
merci en tout cas
 
(une question d'ailleurs tu la sors d'où tu sais que c'est ce qu'il faut mettre?)


Message édité par neg'gwada le 07-02-2006 à 18:58:31

---------------
--- WinSplit Revolution ---
n°1300725
Scarmatil
magma idempotent
Posté le 07-02-2006 à 19:35:11  profilanswer
 

A partir de ton site, en hexa ça fait 0x16CF0000 et après c'est pas dur de retrouver  :o


Message édité par Scarmatil le 07-02-2006 à 19:37:41

---------------
Scarmatil
n°1300975
neg'gwada
rafix 971
Posté le 08-02-2006 à 09:35:29  profilanswer
 

c'est à dire tu fais une espece de masque c'est ça?


---------------
--- WinSplit Revolution ---
n°1301162
Scarmatil
magma idempotent
Posté le 08-02-2006 à 12:08:14  profilanswer
 

neg'gwada a écrit :

c'est à dire tu fais une espece de masque c'est ça?


 
Ouep, et d'ailleurs j'en ai oublié un, il y a WS_CLIPSIBLINGS aussi.
Sachant que WS_OVERLAPPEDWINDOW = 0x00CF0000,
il y a trois autres flags: 0x10000000,0x02000000 et 0x04000000 soit respectivement WS_VISIBLE, WS_CLIPCHILDREN et WS_CLIPSIBLINGS.


---------------
Scarmatil
n°1301194
neg'gwada
rafix 971
Posté le 08-02-2006 à 12:51:38  profilanswer
 

ok merci, je suis con j'aurais pu y penser avant :/
 
En fait je pensais que ce le masquage marchait unquement en binaire et pas que si on était sur une autre base, il fallait convertir... [:dams86]
 
EDIT: juste au passage, j'ai découvert un package de devcpp qui donne la doc de win32api, je trouve que c'est hyper pratique


Message édité par neg'gwada le 08-02-2006 à 16:24:31

---------------
--- WinSplit Revolution ---
n°1307406
neg'gwada
rafix 971
Posté le 16-02-2006 à 18:32:05  profilanswer
 

UP c'est encore moi :o
j'arrive pas à faire un truc là. Je cherche à fermer toutes les fenetres de ma barre des taches via une enumération de windows, mais il m'énumere des trucs en plus de ce qui est dans le taskbar, meme si je precise certains flags. Un peu de code pour expliquer
 

Code :
  1. bool CALLBACK CloseEnumWindowsProc(HWND hwnd, LPARAM lParam)
  2. {
  3.      char c[20];
  4.      GetWindowText(hwnd,c,20);
  5.      if((strlen(c)!=0) && IsWindow(hwnd) && IsWindowVisible(hwnd) && IsWindowEnabled(hwnd))
  6.      /*{PostMessage(hwnd, WM_CLOSE, 0, 0);
  7.      DestroyWindow(hwnd); }*/
  8.      MessageBox( NULL, c, "", 0); //<---> il m'affiche des truc en plus genre SYSTEM, EventList
  9.          
  10.      return true;
  11. }
  12. void CloseAllFrame(void*)
  13. {
  14.      EnumWindows((WNDENUMPROC )CloseEnumWindowsProc , 0);
  15. }


il m'affiche des truc en plus genre SYSTEM, EventList au messagebox. j'utilise MessageBox pour m'afficher ce qu'il me fermerai, car j'ai testé direct au debut PostMessage.... et il m'a tout pété mon wondows en me fermant ma fleche du system tray et tou plein truc qui plantaient, j'ai due rebooter :D
Donc si quelqu'un peu me dire quel flag mettre pour récupérer uniquement les fenetre du taskbar :jap:


Message édité par neg'gwada le 17-02-2006 à 11:11:15

---------------
--- WinSplit Revolution ---
n°1307421
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-02-2006 à 18:48:05  profilanswer
 

teste si ta fenêtre est visible ou pas avec IsWindowVisible()


---------------
J'ai un string dans l'array (Paris Hilton)
n°1307436
neg'gwada
rafix 971
Posté le 16-02-2006 à 19:36:05  profilanswer
 

c'est deja dans le if


---------------
--- WinSplit Revolution ---
n°1307440
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-02-2006 à 19:40:48  profilanswer
 

ah oui merde, j'avais pas vu [:tinostar]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1307604
cricri_
Posté le 17-02-2006 à 08:20:46  profilanswer
 

m'étonne pas ce code est illisible ... y a pas un espace, faut tout de même un minmum pour la lisibilité !
un espace après le mots clés comme if, ...
une ligne vide après les déclarations de variables en entête de fonction, etc ...

n°1307632
neg'gwada
rafix 971
Posté le 17-02-2006 à 09:38:12  profilanswer
 

:'( comment il me casse [:ddr555]

Message cité 1 fois
Message édité par neg'gwada le 17-02-2006 à 09:38:36

---------------
--- WinSplit Revolution ---
n°1307636
chrisbk
-
Posté le 17-02-2006 à 09:40:27  profilanswer
 

faut reconnaitre que tu codes un peu comme si tu devais lacher 2 euros a chaque retour a la ligne [:petrus75]

n°1307728
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-02-2006 à 10:58:22  profilanswer
 

neg'gwada a écrit :

:'( comment il me casse [:ddr555]


ben il a pas tort :spamafote:


---------------
J'ai un string dans l'array (Paris Hilton)
n°1308489
cricri_
Posté le 18-02-2006 à 08:27:19  profilanswer
 

Y a rien de méchant non plus, mais perso je préfère aérer beaucoup plus .. ;)
Faut avoir un peu pitié pour ceux qui vont essayer de te relire, à moins que cela ne soit fait exprès !?  :lol:


Message édité par cricri_ le 18-02-2006 à 08:32:37
n°1308565
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-02-2006 à 12:39:07  profilanswer
 

bon sinon j'ai regardé ton code, et y'a plusieurs boulettes (d'ailleurs je me demande comment tu arrives à compiler ça, tu utilises quel compilo ?) :

Code :
  1. char c[20];
  2. GetWindowText(hwnd,c,20);


le compilo aurait du broncher, car le second paramètre de GetWindowText est censé être un pointeur sur chaine, et tu lui files un char[20]...
de plus, il ne faut pas oublier de prendre en compte le caractère de fin de chaine pour le 3eme paramètre de GetWindowText, donc rajouter 1.
il faut donc allouer de la mémoire au lieu de déclarer un tableau statique. et l'allouer façon Win32, et pas avec un malloc à la con :

Code :
  1. PSTR c = (PSTR)VirtualAlloc((LPVOID) NULL, (DWORD) 20, MEM_COMMIT, PAGE_READWRITE);
  2. GetWindowText(hwnd, (LPWSTR)c, 21);


déjà c'est plus propre. ne pas oublier de caster ensuite le second paramètre de MessageBox :

Code :
  1. MessageBox(NULL, (LPCWSTR)c, NULL, 0);


enfin, penser à libérer la mémoire allouée :

Code :
  1. VirtualFree(c, 0, MEM_RELEASE);


 
ce qui donne le code suivant :

Code :
  1. bool CALLBACK CloseEnumWindowsProc(HWND hwnd, LPARAM lParam)
  2. {
  3.     PSTR c = (PSTR)VirtualAlloc((LPVOID) NULL, (DWORD) 20, MEM_COMMIT, PAGE_READWRITE);
  4.     GetWindowText(hwnd,(LPWSTR)c, 21);
  5.  
  6.     if((strlen(c)!=0) && IsWindow(hwnd) && IsWindowVisible(hwnd) && IsWindowEnabled(hwnd))
  7.         MessageBox(NULL, (LPCWSTR)c, NULL, 0);
  8.  
  9.     VirtualFree(c, 0, MEM_RELEASE);    
  10.     return true;
  11. }


et chez moi, ce code fonctionne parfaitement et me donne uniquement les fenêtres visibles


Message édité par Harkonnen le 18-02-2006 à 12:40:54

---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7

Aller à :
Ajouter une réponse
 

Sujets relatifs
sniffer sous windowscreer raccourci vers le bureau windows
Code de retour d'un batch windowsCompter le nombre de ligne dans un fichier texte sous Windows
utilisation du port parallele sous windows XPScript windows
Plantage sur une desallocation d'une structure sous Windows 2003Pb de free d'une variable en C sous Windows 2003 TS
Compilation de routines Fortran pour Unix sous windows[c] recevoir un flux multicast sous WINDOWS (avec visual C++)
Plus de sujets relatifs à : [C / C++] le topic des bras cassés de la progue windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR