MFC - Barre des taches

Signaler
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012
-
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012
-
bonjour

après avoir une loooong recherche dans l'internet, j'ai trouver cette source.

http://www.codeproject.com/KB/statusbar/taskbarctrl.aspx

mais sérieusement je pige rien dans MFC et je demande l'aide de quelqu'un.

j'aimerai placer quelque chose dans cette barre de la même manière que dans la source.

mais avec le code minimum que que je puisse comprendre, merci avance

18 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
salut,

donc quelle est la question? de te traduire le code C++ en VB6 ?

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
le mieux c'est de modifier le code et  compiler comme dll et l'utiliser tel quel

Bonjour chez vous !
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012

salut et merci pour votre réponse.

oui monsieur [auteur/PCPT/401740.aspx PCPT] j'aimerai que tu me traduit le code en VB et a la place de création d'une barre de chargement veuillez placer juste un bouton, j'aimerai juste connaitre le rôle de ce truc, il m'intéresse beaucoup.

mon but c'est avoir le code minimum pour que je comprendre, mais MFC ne me permet pas ça il a beaucoup des classes et beaucoup des pointeurs ...

[auteur/GILLARDG/1360034.aspx - gillardg]j'aime pas utilise quelque chose que je n'est pas compris.

merci avance.
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
pour info :  les classes MFC c'est pas traduisible en vb


c'est pourquoi si c'est possible vaut mieux l'utiliser tel quel
MFC c'est le framework  de Visual C++

Bonjour chez vous !
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012

salut

non les classes MFC m'intéresses pas , ce qui m'intéresse c'est le code qui ajoute un truc dans la barre des taches "rebarwindow32" voilà, le reste sa m'interesse pas.

* tout comme windows media player qui ce align automatiquement dans cette barre lors de reduisement.

j'ai bien chercher dans ce site "vbfrance et cppfrance" mais j'ai rien trouver et aussi dans google ,heureusement j'ai trouver cette source mais il est trop compliquer avec les pointeurs et les classes, donc soit en "c" soit en "vb"
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
salut,

j'ai pas eu le temps de finioler ni donc de poster,
mais donc une source VB6 attend patiemment depuis janvier 2006 , et donne ce résultat :

si tu as besoin d'aide ou de pistes, pourquoi pas

commence tes recherches vers SHAppBarMessage et FindWindowEx

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012

wawawawawawawaaaaaaaaaaaaaaaaaaaw je veux cette source pleaseeeeeee
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
^^

elle attend depuis 2 ans et demi, elle peut bien attendre encore 6 mois
désolé j'ai d'autres trucs à finir avant mais c'est vraiment pas complexe
tu as les API pour démarrer

++ bon dev
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
c'est pas .net cette histoire

Bonjour chez vous !
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012

baaan aider moi, c'est tout ce que je demande, poste juste le code qui align le truc dans cette barre
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
il serait temps de t'en rendre compte gillardg ^^

<li> Vous êtes ici : [infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_WINDOWS_280.aspx Windows] / [infomsgt_API_282.aspx API] / MFC - Barre des taches</li>
mais en effet demander le code tout en disant "j'aime pas utilise quelque chose que je n'est pas compris", çà laisse à désirer ^^

(remarque, pas plus que de demander [voire ordonner] ouvertement une traduction C vers VB6, avec un bouton pour exemple)

faut plus s'étonner de rien
tout çà n'est pas méchant bien sûr
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
ben oui PCPT moi je le VEUX 
en .net  pour ma noêl 

Bonjour chez vous !
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012

pas besoin d'une traduction du code si tu veux pas, l'essentiel , c'est que je veux comprendre la marche de truc, et la premiere chose c'est la position, j'aimerai connaitre comment l'objet reste aligner dans la barre meme si on fait larger la barre des taches. [auteur/PCPT/401740.aspx PCPT][auteur/PCPT/401740.aspx tu me comprend j'espere, tu es mon espoir ][auteur/PCPT/401740.aspx
]
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
le règlement stipule de ne pas demander decode tout fait.

fait ton code en partant des API précisées sur la page 1, et revient quand tu bloques sur quelque chose

on t'aidera au fur et à mesure si tu en as besoin, mais je ne vais pas poster un bout de code qui - même s'il est fonctionnel - à mes yeux est loin d'être terminé, je suis sûr que tu peux comprendre çà aussi.

récupérer la position?
Private Type APPBARDATA
    cbSize              As Long
    hwnd                As Long
    uCallbackMessage    As Long
    uEdge               As Long
    rc                  As RECT
    lParam              As Long '  message specific
End Type
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long

RC te renvoie la position

comment l'objet reste aligner?
à toi de replacer en observant les messages de redimentions sur ReBarWindow32 que tu obtiens en subclassant sur son handle que tu trouves avec l'API FindWindowEx

c'est exactement ce que je t'ai indiqué en première page

tu as maintenant toutes les cartes en main, y'a plus qu'à se retrousser les manches
(ou attendre 6 mois )

bon courage, nous seront là pour t'aider au fur et à mesure, mais il faut que tu fasses le nécessaire, comme chercher sur les 2 API indiquées, pour commencer

lien utile :
http://msdn.microsoft.com/fr-fr/library/default.aspx

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012

alors apres avoir casser ma tete j'ai arriver a ce truc qui marche pas, je pige rien il se disparautre quand je clique, dans msdn j'ai resumer que APPBARDATA renvoi les infos de la barre des taches mais là oooh rien ne se passe, alors dis moi comment je vais deplacer ma bouton, je m'en fou les message pour l'instant , l'essenciel c'est qu'il soit placer comme windows media player.

vas-y vas-y donne moi quelque petits lignes pour realiser la magie

voici mon code:

Private Declare Sub SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Type APPBARDATA
    cbSize As Long
    hWnd As Long
    uCallbackMessage As Long
    uEdge As Long
    rc As RECT
    lParam As Long '  message specific
End Type

Dim aplibardata As APPBARDATA
Dim ControlTop
Dim ControlLeft
Dim AppBarWidth
Dim AppBarHeight

Private Sub Command1_Click()

mhWnd = FindWindow("Shell_TrayWnd", 0)
mhwnd2 = FindWindow("button", 0)
mhwnd3 = FindWindowEx(mhWnd, mhwnd2, 0, 0)
buton = Command1.hWnd 'hwnd button
aplibardata.cbSize = Len(aplibardata)
aplibardata.hWnd = buton
aplibardata.uCallbackMessage = WM_ABNOTIFY
SHAppBarMessage ABM_NEW, aplibardata
aplibardata.uEdge = ABE_TOP
SetRect aplibardata.rc, 0, 0, Screen.Width, Screen.Height
SetWindowPos aplibardata.hWnd, 0, aplibardata.rc.Left, aplibardata.rc.Top, aplibardata.rc.Right - aplibardata.rc.Left, aplibardata.rc.Bottom - aplibardata.rc.Top, SWP_NOZORDER

End Sub

Private Sub Form_Load()

End Sub
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012

desoler pour findwindow et quelque variable ajoutes, je teste mes trucs avec ses lignes donc...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
des 'variant' et d'autres variables même pas déclarées, j'peux pas faire grand chose là...

http://search.msdn.microsoft.com/Default.aspx?locale=fr-fr&Query=SHAppBarMessage&lang=fr-fr&Brand=msdn

pis du tout cuit
(toi qui avais beaucoup cherché c'était pas facile ; il est tout récent.... : 1997 !)
http://vbnet.mvps.org/index.html?code/screen/shappbarmessage.htm

voilà, bon copier-coller
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
116
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
19 mai 2012

enfin, je suis revenir apres avoir cassé ma tete et sans resultat je pense, il marche pas , mais je veux savoir ou est le probleme , je veux pas gerer les messages... je veux juste coller ma bouton dans la barre.

voici mon nouveau code

Private Declare Sub SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function PtInRect Lib "user32" (lpRect As RECT, pt As POINTAPI) As Long

Private Type POINTAPI
        x As Long
        y As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Type APPBARDATA
    cbSize As Long
    hWnd As Long
    uCallbackMessage As Long
    uEdge As Long
    rc As RECT
    lParam As Long '  message specific
End Type

Dim aplibardata As APPBARDATA
Dim ControlTop As Integer 'Used by function CalcComponentPos()
Dim ControlLeft 'Used by function CalcComponentPos()
Dim AppBarHeight, AppBarWidth As Integer 'The AppBar height and width depends on the Edge where the AppBar is docked
Dim WM_ABNOTIFY As Integer
Dim MousePos As POINTAPI
'Dim Desktop, LeftRect, RightRect, TopRect, BottomRect As Rectangle

Private Sub Command1_Click()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''' enregistrement de notre barre
WM_ABNOTIFY = WM_USER + 100 'User defined Callback message
buton = Command1.hWnd 'hwnd button
aplibardata.cbSize = Len(aplibardata) 'sizeof de aplibardata
aplibardata.hWnd = buton 'hwnd de ma bouton
aplibardata.uCallbackMessage = WM_ABNOTIFY
haha = SHAppBarMessage(ABM_NEW, aplibardata) 'ABM_GETSTATE
aplibardata.uEdge = ABE_TOP
SetRect aplibardata.rc, 0, 0, Screen.Width, Screen.Height
SHAppBarMessage ABM_QUERYPOS, aplibardata
'Calculate final size
aplibardata.rc.Bottom = aplibardata.rc.Top + AppBarHeight
SHAppBarMessage ABM_SETPOS, aplibardata
SetWindowPos aplibardata.hWnd, 0, aplibardata.rc.Left, aplibardata.rc.Top, aplibardata.rc.Right - aplibardata.rc.Left, aplibardata.rc.Bottom - aplibardata.rc.Top, SWP_NOZORDER Or SWP_NOACTIVATE
''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''

GetCursorPos MousePos

Desktop = RECT(0, 0, Screen.Width, Screen.Height)
LeftRect = RECT(Desktop.Left, Desktop.Top, Desktop.Left + AppBarWidth, Desktop.Bottom)
TopRect = RECT(Desktop.Left, Desktop.Top, Desktop.Right, Desktop.Top + AppBarHeight)
BottomRect = RECT(Desktop.Left, Desktop.Bottom - AppBarHeight, Desktop.Right, Desktop.Bottom)

If (PtInRect(LeftRect, MousePos)) Then
   
        aplibardata.rc = LeftRect
        aplibardata.uEdge = ABE_LEFT
    End If
If (PtInRect(RightRect, MousePos)) Then
   
        aplibardata.rc = RightRect
        aplibardata.uEdge = ABE_RIGHT
    End If
If (PtInRect(TopRect, MousePos)) Then
   
        aplibardata.rc = TopRect
        aplibardata.uEdge = ABE_TOP
   End If
   If (PtInRect(BottomRect, MousePos)) Then

        aplibardata.rc = BottomRect
        aplibardata.uEdge = ABE_BOTTOM

End If

End Sub

Private Sub Form_Load()
SHAppBarMessage ABM_REMOVE, aplibardata
End Sub

et dans un header:

Public Const ABM_NEW = &H0
Public Const ABM_REMOVE = &H1
Public Const ABM_QUERYPOS = &H2
Public Const ABM_SETPOS = &H3
Public Const ABM_GETSTATE = &H4
Public Const ABM_GETTASKBARPOS = &H5
Public Const ABM_ACTIVATE = &H6
Public Const ABM_GETAUTOHIDEBAR = &H7
Public Const ABM_SETAUTOHIDEBAR = &H8
Public Const ABM_WINDOWPOSCHANGED = &H9

Public Const ABN_STATECHANGE = &H0
Public Const ABN_POSCHANGED = &H1
Public Const ABN_FULLSCREENAPP = &H2
Public Const ABN_WINDOWARRANGE = &H3

Public Const ABS_AUTOHIDE = &H1
Public Const ABS_ALWAYSONTOP = &H2

Public Const ABE_LEFT = 0
Public Const ABE_TOP = 1
Public Const ABE_RIGHT = 2
Public Const ABE_BOTTOM = 3

Public Const WM_USER = &H400
Public Const SWP_NOACTIVATE = &H10

Public Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

que dois je faire .?